Orange Pi

Операционные системы - Pi OS => Armbian => Тема начата: Olej от Июнь 11, 2018, 04:15:51 pm

Название: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 04:15:51 pm
Железка - Orange Pi One.
Образ Armbian - Armbian Stretch mainline kernel 4.14.y (https://www.armbian.com/orange-pi-one/) ... с пересобранным их же SDK ядром, но это дела не меняет:
root@orangepione:~# uname -a
Linux orangepione 4.14.48-sunxi #1 SMP Wed Jun 6 19:14:27 EEST 2018 armv7l GNU/Linux
В загруженной систем нет поддержки GPIO:
olej@orangepione:~$ lsmod | grep gpio
root@orangepione:~# modinfo gpio-sunxi
modinfo: ERROR: Module gpio-sunxi not found.

root@orangepione:~# modprobe gpio-sunxi
modprobe: FATAL: Module gpio-sunxi not found in directory /lib/modules/4.14.48-sunxi
Вопросы ... для начала ;) :
1. Поддержка GPIO не включена в образе по умолчанию?
2. Что нужно сделать чтобы загрузить модуль gpio-sunxi? Что и где нужно взять?
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 04:46:46 pm
olej@orangepione:~$ lsmod | grep gpio
...
1. Поддержка GPIO не включена в образе по умолчанию?
Тогда как понимать следующее? :
olej@orangepione:~$ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 июн 11 15:46 export
lrwxrwxrwx 1 root root    0 июн 11 15:46 gpiochip0 -> ../../devices/platform/soc/1c20800.pinctrl/gpio/gpiochip0
lrwxrwxrwx 1 root root    0 июн 11 15:46 gpiochip352 -> ../../devices/platform/soc/1f02c00.pinctrl/gpio/gpiochip352
--w------- 1 root root 4096 июн 11 15:46 unexport
Напишу скриптик gpio.tst :
olej@orangepione:~$ cat gpio.tst
for v in 1 2 3 4 5 6 7 8 9 10 11 12; do echo "$v" > /sys/class/gpio/export ; done

olej@orangepione:~$ sudo ./gpio.tst

olej@orangepione:~$ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 июн 11 16:39 export
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio1 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio1
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio10 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio10
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio11 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio11
lrwxrwxrwx 1 root root    0 июн 11 16:39 gpio12 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio12
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio2 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio2
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio3 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio3
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio4 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio4
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio5 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio5
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio6 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio6
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio7 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio7
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio8 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio8
lrwxrwxrwx 1 root root    0 июн 11 16:40 gpio9 -> ../../devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio9
lrwxrwxrwx 1 root root    0 июн 11 15:46 gpiochip0 -> ../../devices/platform/soc/1c20800.pinctrl/gpio/gpiochip0
lrwxrwxrwx 1 root root    0 июн 11 15:46 gpiochip352 -> ../../devices/platform/soc/1f02c00.pinctrl/gpio/gpiochip352
--w------- 1 root root 4096 июн 11 15:46 unexport
Всё появилось... Каким это образом?
root@orangepione:~# echo out > /sys/class/gpio/gpio12/direction

root@orangepione:~# echo 1 > /sys/class/gpio/gpio12/value

root@orangepione:~# echo $?
0
Осциллографом ногу 12 не проверял ... всему своё время - но система считает что всё нормально, по коду ошибки...
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 04:50:19 pm
olej@orangepione:~$ lsmod | grep gpio
С помощью кого из них осуществляется поддержка GPIO на уровне общих стандартов Linux:
olej@orangepione:~$ lsmod
Module                  Size  Used by
snd_soc_hdmi_codec     16384  1
rc_cec                 16384  0
dw_hdmi_i2s_audio      16384  0
dw_hdmi_cec            16384  0
sun8i_codec_analog     24576  0
snd_soc_simple_card    16384  0
snd_soc_simple_card_utils    16384  1 snd_soc_simple_card
sun4i_i2s              16384  2
snd_soc_core          118784  5 sun4i_i2s,sun8i_codec_analog,snd_soc_hdmi_codec,snd_soc_simple_card_utils,snd_soc_simple_card
snd_pcm_dmaengine      16384  1 snd_soc_core
snd_pcm                65536  4 sun4i_i2s,snd_pcm_dmaengine,snd_soc_hdmi_codec,snd_soc_core
joydev                 20480  0
input_leds             16384  0
evdev                  20480  0
sun8i_dw_hdmi          16384  0
dw_hdmi                28672  2 dw_hdmi_i2s_audio,sun8i_dw_hdmi
sun4i_gpadc_iio        16384  0
snd_timer              24576  1 snd_pcm
sun8i_mixer            16384  0
cec                    40960  2 dw_hdmi_cec,dw_hdmi
snd                    45056  4 snd_soc_hdmi_codec,snd_timer,snd_soc_core,snd_pcm
soundcore              16384  1 snd
sun4i_tcon             20480  1 sun8i_dw_hdmi
uio_pdrv_genirq        16384  0
uio                    16384  1 uio_pdrv_genirq
sun4i_drm              16384  0
ip_tables              20480  0
x_tables               20480  1 ip_tables
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 05:01:03 pm
Установил WiringOP ... как пишут здесь: Установка и настройка WiringOP/WiringPi на Orange Pi PC (https://micro-pi.ru/wiringop-wiringpi-на-orange-pi-pc/) (и ещё во множестве сходных мест)
Цитировать
08.11.2016
Orange Pi проекты
olej@orangepione:~/WiringOP$ gpio -v
gpio version: 2.20
Copyright (c) 2012-2014 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Banana Pro Details:
  Type: Banana Pro, Revision: 1.2, Memory: 1024MB, Maker: LeMaker
olej@orangepione:~/WiringOP$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+

Как я понял (или разуверьте меня ;D):
1. WiringOP является библиотекой пространства пользователя...
2. Для её работы, вообще говоря, не нужна поддержка со стороны модуля ядра, может работать без драйвера ... добираясь куда-то по портам GPIO напрямую, пользуясь стандартом на железо GPIO
3. Но из-за этого оно не может работать по прерываниям (на вход GPIO) - только программным опросом (циклическим, как работают программируемые логические контроллеры, PLC).
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 06:34:06 pm
Всё появилось... Каким это образом?
Простой, но достаточный рассказ "на пальцах" как работает стандарт (драйвер) GPIO Linux: Linux: кнопки, светодиоды и GPIO (https://habr.com/post/236251/).
Цитировать
Начиная с версии 2.6.26 (кажется) у Linux появляется стандартный интерфейс для работы с GPIO через sysfs.
...
Главной точкой работы с GPIO является директория /sys/class/gpio.

(самое главное здесь выделил - это я)
Пример (это уже Armbian):
olej@orangepione:~$ tree /sys/class/gpio/gpio1/
/sys/class/gpio/gpio1/
├── active_low
├── device -> ../../../gpiochip0
├── direction
├── edge
├── power
│   ├── autosuspend_delay_ms
│   ├── control
│   ├── runtime_active_time
│   ├── runtime_status
│   └── runtime_suspended_time
├── subsystem -> ../../../../../../../class/gpio
├── uevent
└── value

3 directories, 10 files

olej@orangepione:~$ cat /sys/class/gpio/gpio1/active_low
0

olej@orangepione:~$ cat /sys/class/gpio/gpio1/edge
none

Здесь же становится ясным все ограничения, которые будут возникать в любой подсистеме, работающей с GPIO в пространстве пользователя...
3. Но из-за этого оно не может работать по прерываниям (на вход GPIO) - только программным опросом (циклическим, как работают программируемые логические контроллеры, PLC).
Цитировать
Хорошо, теперь мы может узнать, нажата кнопка или нет, просто прочитав значение из value. Но удобно ли это? Скорее всего — нет. Нам придется постоянно, с некоторой периодичностью считывать текущее значение (данная технология называется polling), чтобы определить момент, когда кнопка будет нажата. Лишняя работа – лишняя трата ресурсов. Большинство производителей SoC’ов снабжают свои GPIO контроллером прерываний, который генерирует прерывание по всяким различным случаям: изменение уровня, установка уровня в высокое или низкое состояние. Можно ли это как-то использовать через sysfs? Документация, сообщает, что можно. Для этого, нам необходимо в файл edge записать одно из следующих значений: none, rising, falling или both. Здесь: none – выключаем отслеживание изменения состояния входящей линии; rising и falling – отслеживаем переход из неактивного состояния в активное и из активного в неактивное соответственно; both – реагируем на любое изменение состояния.
Теперь всё становится на свои места...
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 06:42:25 pm
Простой, но достаточный рассказ "на пальцах" как работает стандарт (драйвер) GPIO Linux: Linux: кнопки, светодиоды и GPIO (https://habr.com/post/236251/).

И описываются ещё некоторые не очевидные мелочи, на которые можно убить много времени:
Цитировать
Инструкция гласит, что стоит только установить одно из этих значений (кроме none), так сразу с помощью функции poll() или select() можно определить, изменялось ли состояние линии. В случае, если состояние не менялось, вызов read() для файла value должен быть заблокирован. Однако, тут есть тонкость. Если вы откроете файл value и попытаетесь натравить на него poll(), то получите, что чтение не будет блокироваться независимо от того, менялось состояние линии или нет.

Авторы подсистемы GPIO видимо хотели, чтобы cat value срабатывал всегда, независимо от того, что записано в файле edge, поэтому первое чтение не будет блокироваться никогда. В принципе, это логично: для того, чтобы отслеживать изменения нужно сначала определить изначальное состояние. Однако, мне пришлось потратить почти часа два, и только в каком-то заброшенном форуме я нашел предположение, почему poll() не срабатывает и что для этого можно сделать.

Я открывал файл value на каждое чтение и очень удивлялся, почему не происходит блокировка. Оказалось, что файл нужно открывать один раз за весь сеанс слежения за линией, читать из него начальное значение и только тогда, последующие операции чтения будут блокироваться до появления указанного в edge события. И тут тоже есть одна тонкость: значения из файла value читаются только по смещению 0, в то время как вызов функции read() изменяет позицию чтения. Поэтому, перед вызовом read() нужно сбросить позицию чтения с помощью lseek(). В документации Linux эти моменты почему-то обойдены.
И пример кода, который, я считаю, стоит чтобы его скопировать сюда:
Цитировать
Вот, как будет выглядеть чтение GPIO c использованием событий edge:
// set edge event on specific gpio_line
int gpio_edge_set(int n, const char *edge_str)
{
    char filename[PATH_MAX];
    FILE *file;

    snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/edge", n);
    file = fopen(filename, "w");
    if (file == NULL) return -1;
    fprintf(file, "%s\n", edge_str);
    fclose(file);

    return 0;
}

// set GPIO line polling mode
int gpio_poll(int n)
{
    char filename[PATH_MAX];
    int fd;
    char c;
    int err;

    snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", n);
    fd = open(filename, O_RDONLY);
    if (fd < 0) return -1;

    read(fd, &c, sizeof(c));

    return fd;
}

// get GPIO line value
int gpio_get(int fd, int timeout)
{
    struct pollfd pollfd[1];
    char c;
    int err;

    pollfd[0].fd = fd;
    pollfd[0].events = POLLPRI | POLLERR;
    pollfd[0].revents = 0;

    err =  poll(pollfd, 1, timeout);
    if(err != 1) return -1;

    lseek(fd, 0, SEEK_SET);
    err = read(fd, &c, sizeof(c));
    if(err != 1) return -1;

    return c - '0';
}
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 06:57:53 pm
Как я понял (или разуверьте меня ;D):
1. WiringOP является библиотекой пространства пользователя...
2. Для её работы, вообще говоря, не нужна поддержка со стороны модуля ядра, может работать без драйвера ... добираясь куда-то по портам GPIO напрямую, пользуясь стандартом на железо GPIO
3. Но из-за этого оно не может работать по прерываниям (на вход GPIO) - только программным опросом (циклическим, как работают программируемые логические контроллеры, PLC).
Таким образом, WiringOP годится для организации циклического программного опроса ... ещё это называют pooling, или моноцикл - когда WiringOP в цикле непрерывно молотит опрос входов GPIO.
Это в точности напоминает тот цикл автоматического управления, как это реализуется в Arduino или промышленных PLC (программируемых логических контроллерах ... Siemens, Schneider Electric ... и т.п.).

И WiringOP не годится для реакции на данные GPIO по прерываниям, по событиям... ну и таким образом, для организации многопоточной, параллельной работы и т.д.

Это не значит, что одно явно лучше другого или хуже.
Это разные способы.

P.S. Хотя ... работа через драйвер, в стандартной sysfs модели Linux полностью перекрывает возможности WiringOP, т.е. включает все те возможности, но не наоборот. Но и WiringOP имеет право жить, за счёт большей простоты своего использования из программного кода, там где это уместно.
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Июнь 11, 2018, 07:43:37 pm
И WiringOP не годится для реакции на данные GPIO по прерываниям, по событиям... ну и таким образом, для организации многопоточной, параллельной работы и т.д.
Да работают прерывания, тестил ещё на сборках лобориса  с WiringOP тут код : https://github.com/ua3nbw/gpiokey (https://github.com/ua3nbw/gpiokey)
isr и wfi это наше всё.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 07:59:33 pm
И WiringOP не годится для реакции на данные GPIO по прерываниям, по событиям... ну и таким образом, для организации многопоточной, параллельной работы и т.д.
Да работают прерывания, тестил ещё на сборках лобориса  с WiringOP тут код : https://github.com/ua3nbw/gpiokey (https://github.com/ua3nbw/gpiokey)
isr и wfi это наше всё.
Без поддержки модуля ядра GPIO? с выгруженным драйвером?

Я не понимаю как из пространства пользователя можно ловить прерывания без ядерной части ... но посмотрю по свободе.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 08:07:13 pm
Да работают прерывания, тестил ещё на сборках лобориса  с WiringOP тут код : https://github.com/ua3nbw/gpiokey (https://github.com/ua3nbw/gpiokey)
isr и wfi это наше всё.
Автор того проекта пишет (там же на странице):
Цитировать
This is a modified WiringPi for OrangePi. We call it WiringOP. Test fo Orangepi pc When doing menuconfig the appropriate setting can be found under Device Drivers -> GPIO Support -> sysfs interface, or use CONFIG_GPIO_SYSFS=y if manually editing .config.
Они просто используют WiringOP как прослойку к стандартному Linux интерфейсу sysfs, и ничего из этого не будет работать без загруженного драйвера чипа GPIO.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 08:12:35 pm
Они просто используют WiringOP как прослойку к стандартному Linux интерфейсу sysfs, и ничего из этого не будет работать без загруженного драйвера чипа GPIO.
Ещё раз спрошу здесь (уже спрашивал в других темах!):
- как посмотреть информацию о конкретных периферийных чипах на шинах?...
- то, что в x86 десктопах делается командой lspci ...

То, что не удаётся посмотреть так:
olej@orangepione:~$ sudo lspci
pcilib: Cannot open /proc/bus/pci
lspci: Cannot find any working access method.

olej@orangepione:~$ ls /proc/bus
input
Понятно, нет такой шины. А что есть?
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Июнь 11, 2018, 08:26:02 pm
Ещё раз спрошу здесь (уже спрашивал в других темах!):
- как посмотреть информацию о конкретных периферийных чипах на шинах?...
- то, что в x86 десктопах делается командой lspci ...
Никак, в arm нет аналога lspci.
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Июнь 11, 2018, 08:50:43 pm

Без поддержки модуля ядра GPIO? с выгруженным драйвером?

Я не понимаю как из пространства пользователя можно ловить прерывания без ядерной части ... но посмотрю по свободе.

а, там при сборке ядра в конфиге надо  CONFIG_GPIO_SYSFS=y.
Название: Re: поддержка GPIO
Отправлено: AlDemin от Июнь 11, 2018, 08:54:04 pm
Цитата: Olej
Они просто используют WiringOP как прослойку к стандартному Linux интерфейсу sysfs, и ничего из этого не будет работать без загруженного драйвера чипа GPIO.
Я смотрел исходники WiringOP: что то работает через sysfs, но в основном напрямую с регистрами процессора в обход и без участия драйвера.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 09:06:49 pm
Цитата: Olej
Они просто используют WiringOP как прослойку к стандартному Linux интерфейсу sysfs, и ничего из этого не будет работать без загруженного драйвера чипа GPIO.
Я смотрел исходники WiringOP: что то работает через sysfs, но в основном напрямую с регистрами процессора в обход и без участия драйвера.
Ну так вот всё, что связано с прерываниями - работает через sysfs, а всё, что не работает с прерываниями - работает напрямую с портами I/O.
Название: Re: поддержка GPIO
Отправлено: AlDemin от Июнь 11, 2018, 09:09:59 pm
Цитата: ua3nbw
Никак, в arm нет аналога lspci.
У Allwinner-H6 есть PCI-Express шина, но так же как и у H5 не для внутренних устройств.
lspci там работать будет, но только для внешних устройств.
Цитата: Olej
Ещё раз спрошу здесь (уже спрашивал в других темах!):
- как посмотреть информацию о конкретных периферийных чипах на шинах?...
о каких периферийных шинах может быть речь, смотрю на свои одноплатники, вижу SoC, Ram, GMAC у некорорых, sata on SoC, sata через USB, usb-хаб, SD-карты eMMC NAND SPI-flash, WiFi на USB, и самое экзотичное WiFi на SPI.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 09:12:32 pm
olej@orangepione:~$ lsmod | grep gpio
С помощью кого из них осуществляется поддержка GPIO на уровне общих стандартов Linux:
Никого. Нет никакого драйвера поддержки GPIO.
Просто они вкомпилировали поддержку GPIO непосредственно в ядро Linux, без всяких модулей:
olej@orangepione:~$ cat /boot/config-4.14.48-sunxi | grep GPIO
CONFIG_ARCH_NR_GPIO=416
CONFIG_RFKILL_GPIO=m
CONFIG_MTD_NAND_GPIO=y
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_KEYBOARD_GPIO_POLLED is not set
# CONFIG_MOUSE_GPIO is not set
# CONFIG_INPUT_GPIO_BEEPER is not set
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
CONFIG_INPUT_GPIO_DECODER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_SERIO_GPIO_PS2=m
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
CONFIG_I2C_MUX_GPIO=m
# CONFIG_I2C_CBUS_GPIO is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_SPI_GPIO is not set
CONFIG_PPS_CLIENT_GPIO=m
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
CONFIG_GPIOLIB=y
CONFIG_OF_GPIO=y
CONFIG_GPIOLIB_IRQCHIP=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
# Memory mapped GPIO drivers
# CONFIG_GPIO_74XX_MMIO is not set
CONFIG_GPIO_ALTERA=m
CONFIG_GPIO_AXP209=y
# CONFIG_GPIO_DWAPB is not set
# CONFIG_GPIO_FTGPIO010 is not set
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_MOCKUP is not set
# CONFIG_GPIO_MPC8XXX is not set
CONFIG_GPIO_SYSCON=m
# CONFIG_GPIO_XILINX is not set
# CONFIG_GPIO_ZEVIO is not set
# I2C GPIO expanders
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_ADNP is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
CONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_TPIC2810 is not set
# MFD GPIO expanders
# CONFIG_HTC_EGPIO is not set
# SPI GPIO expanders
# CONFIG_GPIO_74X164 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_PISOSR is not set
# CONFIG_GPIO_XRA1403 is not set
# USB GPIO expanders
CONFIG_W1_MASTER_GPIO=m
CONFIG_POWER_RESET_GPIO=y
# CONFIG_POWER_RESET_GPIO_RESTART is not set
# CONFIG_CHARGER_GPIO is not set
CONFIG_SENSORS_GPIO_FAN=m
CONFIG_GPIO_WATCHDOG=m
# CONFIG_SSB_DRIVER_GPIO is not set
# CONFIG_BCMA_DRIVER_GPIO is not set
CONFIG_REGULATOR_GPIO=y
# CONFIG_IR_GPIO_CIR is not set
CONFIG_IR_GPIO_TX=m
CONFIG_BACKLIGHT_GPIO=m
# CONFIG_USB_GPIO_VBUS is not set
CONFIG_LEDS_GPIO=y
CONFIG_LEDS_TRIGGER_GPIO=m
CONFIG_EXTCON_GPIO=m
CONFIG_EXTCON_USB_GPIO=m
CONFIG_MUX_GPIO=m
CONFIG_TRACING_EVENTS_GPIO=y
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 09:20:00 pm
lspci там работать будет, но только для внешних устройств.
Цитата: Olej
Ещё раз спрошу здесь (уже спрашивал в других темах!):
- как посмотреть информацию о конкретных периферийных чипах на шинах?...
о каких периферийных шинах может быть речь, смотрю на свои одноплатники, вижу SoC, Ram, GMAC у некорорых, sata on SoC, sata через USB, usb-хаб, SD-карты eMMC NAND SPI-flash, WiFi на USB, и самое экзотичное WiFi на SPI.
C PCI всё понятно, оставили PCI, это я для иллюстрации назвал PCI...
Но вот те же устройства ... считыватель SD, например, или Ethernet чип - должны как-то идентифицироваться по типу чипа и способу подключения?
Какой командой вы отличите SoC с WiFi от такого же SoC без него? Вывод чего (команды) будет у них отличаться?
Название: Re: поддержка GPIO
Отправлено: AlDemin от Июнь 11, 2018, 09:24:39 pm
Цитата: Olej
Ну так вот всё, что связано с прерываниями - работает через sysfs, а всё, что не работает с прерываниями - работает напрямую с портами I/O.
У портов PA PG и PL есть режим "внешнего прерывания" на аппаратном уровне.
как оно работает, не скажу, не разбирался.
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 11:17:27 pm
Цитата: Olej
Ну так вот всё, что связано с прерываниями - работает через sysfs, а всё, что не работает с прерываниями - работает напрямую с портами I/O.
У портов PA PG и PL есть режим "внешнего прерывания" на аппаратном уровне.
как оно работает, не скажу, не разбирался.
Внешние прерывания - это прерывания, идущие снаружи SoC.
Все книги по яду Linux учат, что только ядро Linux может обрабатывать прерывания, хоть аппаратные хоть программные, ... и более того, код обработчика - это неустойчивый фрагмент, который допускает безопасно только нищенскую часть набора API, и который обязан завершиться как можно быстрее.
Ничего подобного обрабатываться в пользовательском адресном пространстве не может ... иначе ОС очень скоро прийдёт полный капец с глухим зависанием.
 
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 11, 2018, 11:44:37 pm
Но вот те же устройства ... считыватель SD, например, или Ethernet чип - должны как-то идентифицироваться по типу чипа и способу подключения?
Какой командой вы отличите SoC с WiFi от такого же SoC без него? Вывод чего (команды) будет у них отличаться?
Что-то типа вот этого, но более детализировано - этого мало:
olej@orangepione:~$ sudo lshw 
orangepione                 
    description: ARMv7 Processor rev 5 (v7l)
    product: Xunlong Orange Pi One
    serial: 02c000815fd5e717
    width: 32 bits
    capabilities: smp
  *-core
       description: Motherboard
       physical id: 0
     *-cpu:0
          description: CPU
          product: cpu
          physical id: 0
          bus info: cpu@0
          size: 1200MHz
          capacity: 1200MHz
          capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:1
          description: CPU
          product: cpu
          physical id: 1
          bus info: cpu@1
          size: 1200MHz
          capacity: 1200MHz
          capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:2
          description: CPU
          product: cpu
          physical id: 2
          bus info: cpu@2
          size: 1200MHz
          capacity: 1200MHz
          capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-cpu:3
          description: CPU
          product: cpu
          physical id: 3
          bus info: cpu@3
          size: 1200MHz
          capacity: 1200MHz
          capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm cpufreq
     *-memory
          description: System memory
          physical id: 4
          size: 493MiB
  *-usbhost:0
       product: EHCI Host Controller
       vendor: Linux 4.14.48-sunxi ehci_hcd
       physical id: 2
       bus info: usb@1
       logical name: usb1
       version: 4.14
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:1
       product: Generic Platform OHCI controller
       vendor: Linux 4.14.48-sunxi ohci_hcd
       physical id: 3
       bus info: usb@2
       logical name: usb2
       version: 4.14
       capabilities: usb-1.10
       configuration: driver=hub slots=1 speed=12Mbit/s
  *-usbhost:2
       product: EHCI Host Controller
       vendor: Linux 4.14.48-sunxi ehci_hcd
       physical id: 4
       bus info: usb@3
       logical name: usb3
       version: 4.14
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-usbhost:3
       product: Generic Platform OHCI controller
       vendor: Linux 4.14.48-sunxi ohci_hcd
       physical id: 5
       bus info: usb@4
       logical name: usb4
       version: 4.14
       capabilities: usb-1.10
       configuration: driver=hub slots=1 speed=12Mbit/s
     *-usb
          description: USB hub
          product: USB Hub 2.0
          vendor: ALCOR
          physical id: 1
          bus info: usb@4:1
          version: 7.02
          capabilities: usb-2.00
          configuration: driver=hub maxpower=100mA slots=4 speed=12Mbit/s
        *-usb:0
             description: Keyboard
             product: USB Keyboard
             vendor: Logitech
             physical id: 3
             bus info: usb@4:1.3
             version: 64.00
             capabilities: usb-1.10
             configuration: driver=usbhid maxpower=90mA speed=1Mbit/s
        *-usb:1
             description: Mouse
             product: USB OPTICAL MOUSE
             physical id: 4
             bus info: usb@4:1.4
             version: 1.00
             capabilities: usb-1.10
             configuration: driver=usbhid maxpower=100mA speed=1Mbit/s
  *-usbhost:4
       product: MUSB HDRC host driver
       vendor: Linux 4.14.48-sunxi musb-hcd
       physical id: 1
       bus info: usb@5
       logical name: usb5
       version: 4.14
       capabilities: usb-2.00
       configuration: driver=hub slots=1 speed=480Mbit/s
  *-network
       description: Ethernet interface
       physical id: 6
       logical name: eth0
       serial: 02:81:5f:d5:e7:17
       size: 100Mbit/s
       capacity: 100Mbit/s
       capabilities: ethernet physical tp aui bnc mii fibre 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=st_mac100 driverversion=Jan_2016 duplex=full ip=192.168.1.201 link=yes multicast=yes port=MII speed=100Mbit/s
Название: Re: поддержка GPIO
Отправлено: Olej от Июнь 12, 2018, 11:43:58 pm
У портов PA PG и PL есть режим "внешнего прерывания" на аппаратном уровне.
как оно работает, не скажу, не разбирался.
У ARM-процессоров/ОС для ARM - есть кольца безопасности? (http://qaru.site/questions/1872184/do-arm-processorsos-for-arm-have-security-rings)
Цитировать
Все платформы, предназначенные для поддержки операционных систем с изоляцией памяти, имеют некоторую систему привилегий. На процессорах x86 уровни привилегий называются "кольцом 0" через "кольцо 3". На процессорах ARM уровни привилегий называются "режимом супервизора" и "пользовательским режимом". Имена и реализации различны, но понятия одинаковы. Некоторые регистры сгруппированы, т.е. Имеется отдельный регистр в другом режиме; другие регистры разделены, поэтому более привилегированный режим должен позаботиться о том, чтобы проверить значение на входе, а не на утечку данных на выходе.
Или более строго - Registers and Processor Modes (http://www.heyrick.co.uk/assembler/regs.html):
Цитировать
By now you may be wondering about these "modes", such as "FIQ" mentioned above.

User Mode, the usual mode for applications to run in. Your memory access is restricted and you cannot read directly from hardware devices.
Supervisor Mode (SVC Mode), used mainly by SWIs and the OS. This mode has additional privileges which allow greater control of the computer. For example, you have to go to Supervisor Mode in order to read from a podule. It cannot be done in User Mode.
Interrupt Mode (IRQ Mode), used to handle peripherals that issues interrupts. This mode is also privileged. Such devices causing IRQs are the keyboard, the VSync (when the screen refresh is occurring), IOC timers, serial, harddisc, floppy etc etc...
Fast Interrupt Mode (FIQ Mode), used to handle peripherals that issue fast interrupts. This mode is also privileged. Such devices causing FIQs are the floppy disc handling data, the serial port (on 82C71x machines such as the A5000) and Econet.
The difference between IRQ and FIQ is with FIQ you have to process your stuff as quickly as possible and then get the .... out of there. An IRQ may be interrupted by an FIQ but an IRQ cannot interrupt an FIQ. To make FIQs faster, they have more shadow registers. FIQs cannot call SWIs. FIQs must also disable interrupts. If it becomes necessary for an FIQ routine to re-enable interrupts, it's too slow and should be IRQ not FIQ. Phew!
Или "на пальцах", в моём изложении:
- во всех современных операционных системах с аппаратной защитой есть единственный способ взаимодействия программного кода пространства пользователя с ядром ОС: системный вызов, выполнение выделенной привилегированной команды для перехода на другой уровень защиты (user -> supervisor)
- тогда происходит аппаратное прерывание и смена уровня привилегий
- и нет никаких других способов
- а прерывания могут обрабатываться только в привилегированном коде ядра, и никак иначе
- это классика всех вообще UNIX систем

P.S. В Linux есть некоторый побочные, более поздние механизмы, когда ядро может взаимодействовать с кодом пользовательского пространства (supervisor -> user): широковещательные сообщения сокета netlink - подсистема udev, посылка сигнала UNIX выбранному процессу... Но это больше экзотика, чем правило.
И никогда наоборот (user -> supervisor).
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 09:47:34 am
Ещё раз пришлось вернуться к GPIO...
Вот в этой табличке WiringOP:
Установил WiringOP ... как пишут здесь: Установка и настройка WiringOP/WiringPi на Orange Pi PC (https://micro-pi.ru/wiringop-wiringpi-на-orange-pi-pc/) (и ещё во множестве сходных мест)
Цитировать
08.11.2016
Orange Pi проекты
olej@orangepione:~/WiringOP$ gpio -v
gpio version: 2.20
Copyright (c) 2012-2014 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Banana Pro Details:
  Type: Banana Pro, Revision: 1.2, Memory: 1024MB, Maker: LeMaker
olej@orangepione:~/WiringOP$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
Здесь есть 3 колонки относительно нумерации ног GPIO:
- Physical
- wPi - это, наверное, соответствует гребёнке GPIO Rapsberry Pi
- BCM - это что? ... наверное это соответствует Banana Pro, судя по заголовку версии программы. Но каким моделям Orange Pi это соответствует, или не соответствует... тем более, что распиновка GPIO моделей Orange Pi различаются.
 
Название: Re: поддержка GPIO
Отправлено: AlDemin от Ноябрь 23, 2018, 01:39:07 pm
Цитировать
- Physical
это номер контакта на гребенке
Цитировать
- wPi - это,
это логический номер порта условно так обозванный автором библиотеки.
Цитировать
- BCM - это что?
Это скорее всего номер ноги на чипе Broadcom: "Привет от малины."
Доки нормально не правлены, те кто переписывал WiringPi в WiringOP на это забил.
А не проще работать без этой прокладки?
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 03:54:03 pm
Цитировать
- Physical
это номер контакта на гребенке
Т.е. для своих устройств, макетов и т.д. нужно использовать именно этот номер как параметр программы gpio?
А не проще работать без этой прокладки?
1. наверное, иногда удобнее одно, а иногда - другое (т.е. системная поддержка GPIO со стороны ядра);
2. а это вы у ua3nbw спросите ;) - он очень любит WiringOP ... я думаю, что он вскоре появится и внесёт ясность;
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 07:36:52 pm
Распиновку разъёмов всех (почти всех?) моделей Orange Pi находим здесь: 
Orange Pi проекты (https://micro-pi.ru/orange-pi-pinout-pin-definition-gpio/)
Цитировать
Распиновка всех моделей Orange Pi (Orange Pi pinout / Pin definition), назначение и описание разъемов GPIO
04.12.2016
В данной статье я собрал распиновки (Orange Pi pinout) всех моделей Orange Pi: Orange Pi, Orange Pi 2, Orange Pi Mini, Orange Pi Mini 2, Orange Pi One, Orange Pi Lite, Orange Pi PC, Orange Pi PC 2, Orange Pi Plus, Orange Pi Plus 2, Orange Pi Plus 2E, Orange Pi Zero. В основном распиновка GPIO у всех почти одинакова — по 40 выводов общего назначения, кроме Orange Pi — 26 + 18 выводов и Orange Pi Zero — 26 + 13 выводов.
В частности, для OPI One (что меня на сегодня интересует) это так (выглядит плохо, но понять можно):
Цитировать
2×20 Выводов (H3)
1	3.3V	2	VCC-5V
3 PA12 (TWI0-SDA/DI_RX/EINT12) 4 VCC-5V
5 PA11 (TWI0-SCK/DI_TX/EINT11) 6 GND
7 PA6 (SIM_PWREN/PWM1/PA_EINT6) 8 PA13 (SPI1_CS/UART3_TX/PA_EINT13)
9 GND 10 PA14 (SPI1_CLK/UART3_RX/PA_EINT14)
11 PA1 (UART2_RX/JTAG_CK0/PA_EINT1) 12 PD14(RGMII_NULL/MII_TXERR/RMII_NULL)
13 PA0 (UART2_TX/JTAG_MS0/PA_EINT0) 14 GND
15 PA3 (UART2_CTS/JTAG_DI0/PA_EINT3) 16 PC4 (NAND_CE0)
17 3.3V 18 PC7 (NAND_RB1)
19 PC0 (NAND_WE/SPI0_MOSI) 20 GND
21 PC1 (NAND_ALE/SPI0_MISO) 22 PA2 (UART2_RTS/JTAG_DO0/PA_EINT2)
23 PC2 (NAND_CLE/SPI0_CLK) 24 PC3 (NAND_CE1/SPI0_CS)
25 GND 26 PA21 (PCM0_DIN/SIM_VPPPP/PA_EINT21)
27 PA19 (PCM0_CLK/TWI1_SDA/PA_EINT19) 28 PA18 (PCM0_SYNC/TWI1_SCK/PA_EINT18)
29 PA7 (SIM_CLK/PA_EINT7) 30 GND
31 PA8 (SIM_DATA/PA_EINT8) 32 PG8 (UART1_RTS/PG_EINT8)
33 PA9 (SIM_RST/PA_EINT9) 34 GND
35 PA10 (SIM_DET/PA_EINT10) 36 PG9 (UART1_CTS/PG_EINT9)
37 PA20 (PCM0_DOUT/SIM_VPPEN/PA_EINT20) 38 PG6 (UART1_TX/PG_EINT6)
39 GND 40 PG7 (UART1_RX/PG_EINT7)
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 07:41:10 pm
В частности, для OPI One (что меня на сегодня интересует) это так (выглядит плохо, но понять можно):
Это очень похоже на то, что мне даёт экспериментально запущенная программ gpio, в колонке Physical:
Цитировать
olej@orangepione:~/WiringOP$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
В принципе, не просто совпадает, а в точности идентично ... насколько я могу сравнить.
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 07:54:06 pm
Это очень похоже на то, что мне даёт экспериментально запущенная программ gpio, в колонке Physical:
И это означает, насколько я понимаю, по этой таблице, для того, чтобы лёргать пином N 40-контактного разъёма, я должен программно (из shell, C - не важно) дёргать GPIO с номером M, где, например:
GPIO     PIN
21        29
22        31
23        33
24        35
25        37

12        01
16        04
18        05

Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 08:23:34 pm
Т.е. чтобы системными средствами (через /sys) управлять выходом pin 37 нужно делать что-то типа следующего c GPIO25:
# echo 25 > /sys/class/gpio/export 
# echo out > /sys/class/gpio/gpio25/direction
# echo 1 > /sys/class/gpio/gpio25/value
...
# echo 0 > /sys/class/gpio/gpio25/value
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 23, 2018, 09:56:22 pm
Это очень похоже на то, что мне даёт экспериментально запущенная программ gpio, в колонке Physical:
И это означает, насколько я понимаю, по этой таблице, для того, чтобы лёргать пином N 40-контактного разъёма, я должен программно (из shell, C - не важно) дёргать GPIO с номером M, где, например:
GPIO     PIN
21        29
22        31
23        33
24        35
25        37

12        01
16        04
18        05

P.S. Дописано позже: всё написанное выше - неверно. И всё разъясняет:
olej@orangepione:~/WiringOP$ man gpio
....
Очень обстоятельный man!
И все параметры gpio задаются не в номерах GPIO, а непосредственно в pin!
Например:
# gpio mode 16 output
...
# gpio write 16 1
...
Там же (в man) находим такие интересные опции:
Цитировать
       -g     Use the BCM_GPIO pins numbers rather than wiringPi pin numbers.  Note: The  BCM_GPIO  pin  numbers  are
              always used with the export and edge commands.

       -1     Use  the physical pin numbers rather than wiringPi pin numbers.  Note: that this applies to the P1 con‐
              nector only. It is not possible to use pins on the Revision 2 P5 connector this way, and as with -g the
              BCM_GPIO pin numbers are always used with the export and edge commands.
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 23, 2018, 11:26:10 pm
А не проще работать без этой прокладки?
1. наверное, иногда удобнее одно, а иногда - другое (т.е. системная поддержка GPIO со стороны ядра);
2. а это вы у ua3nbw спросите ;) - он очень любит WiringOP ... я думаю, что он вскоре появится и внесёт ясность;
wiringPi самая популярная библиотека для работы с GPIO на Raspberry Pi создавалась с прицелом на схожесть с языком Wiring, который используется в Arduino.

Программы пишутся на C/C++, а компилируются и собираются с помощью широко известного avr-gcc
код Arduino для работы с периферией легко адаптируется,
глупо не использовать готовые наработки.
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 12:04:25 am
wiringPi самая популярная библиотека для работы с GPIO на Raspberry Pi создавалась с прицелом на схожесть с языком Wiring, который используется в Arduino.
Это всё известно и понятно.
Вы внесите ясность в другом:
- как увязать номер, указываемый в параметре gpio с номером разъёма на 40-контактной гребёнке GPIO?
- и совпадает ли этот номер gpio (если без опций -g и -1) с номером, указываемым через /sys ?
 
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 12:28:20 am
Эксперимент ... до начала какое-то состояние:
olej@orangepione:/sys/class/gpio$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 1 | OUT  | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 |  OUT | 1 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
Теперь добавляю ещё один пин GPIO:
root@orangepione:/sys/class/gpio# echo 20 > /sys/class/gpio/export
root@orangepione:/sys/class/gpio# echo out > /sys/class/gpio/gpio20/direction
root@orangepione:/sys/class/gpio# echo 1 > /sys/class/gpio/gpio20/value
root@orangepione:/sys/class/gpio# cat /sys/class/gpio/gpio20/value
1
olej@orangepione:/sys/class/gpio$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 1 | OUT  | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 |  OUT | 1 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 |  OUT | 1 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
olej@orangepione:/sys/class/gpio$ gpio exports
GPIO Pins exported:
   1: out  1  none
   4: out  0  none
   5: out  0  none
  16: out  0  none
  20: out  1  none
Увидели как изменился BCM 20? Причём его как 20 видят и /sys и gpio...
Меняем:
root@orangepione:/sys/class/gpio# echo 0 > /sys/class/gpio/gpio20/value
root@orangepione:/sys/class/gpio# cat /sys/class/gpio/gpio20/value
0
olej@orangepione:/sys/class/gpio$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 1 | OUT  | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 |  OUT | 1 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 |  OUT | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
olej@orangepione:/sys/class/gpio$ gpio exports
GPIO Pins exported:
   1: out  1  none
   4: out  0  none
   5: out  0  none
  16: out  0  none
  20: out  0  none
Увидели как изменился BCM 20 и в /sys и в gpio?

Здесь отчётливо видно, что нумерация GPIO, используемая в /sys - это то, что утилита gpio называет как BCM - это внутренняя нумерация GPIO на процессоре (не важно какой он модели).

Но на какой ноге 40-контактного разъёма ловить осциллографом это изменение?
Будет ли этот номер ноги одинаковый для разных (хотя бы основных) моделей Orange Pi?

Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 12:39:45 am
Вот здесь Схема подключения датчика движения HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi с GPIO на 40 выводов (https://micro-pi.ru/схема-подключения-hc-sr04-к-orange-pi-pc/#__HC-SR04_Orange_Pi_PCBanana_Pi_Raspberry_Pi_GPIO_40) автор увязывает ... говорит что OrangePi PC:
(https://micro-pi.ru/wp-content/uploads/2016/11/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B0-%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-HC-SR04-%D0%BA-Orange-Pi-PC-Banana-Pi-%D0%B8%D0%BB%D0%B8-Raspberry-Pi-%D1%81-GPIO-%D0%BD%D0%B0-40-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%BE%D0%B2-300x285.png)
GPIO18 -> PIN12
GPIO23 -> PIN16
(https://micro-pi.ru/wp-content/uploads/2016/11/HC-SR04_Raspberry-300x213.png)
GPIO24 -> PIN18
Но каким таким хитрым образом это у него вытекает (и верно ли это вообще?) из такого же вывода gpio readall:
(https://micro-pi.ru/wp-content/uploads/2016/11/Orange-Pi-PC-GPIO-1-300x231.png)
Это совершенно непонятно!
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 24, 2018, 02:39:36 am
Но на какой ноге 40-контактного разъёма ловить осциллографом это изменение?
Будет ли этот номер ноги одинаковый для разных (хотя бы основных) моделей Orange Pi?
дык всё очевидно в таблице gpio readall - 37 нога на гребёнке.

Для процессора H3 WiringOP компилируете с опцией -b h3, для H5 с опцией -b h5
для H2 есть своя WiringOP
естественно таблицы gpio readall будут отличаться, там и надо смотреть номера
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 24, 2018, 03:01:22 am
Вот здесь Схема подключения датчика движения HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi с GPIO на 40 выводов (https://micro-pi.ru/схема-подключения-hc-sr04-к-orange-pi-pc/#__HC-SR04_Orange_Pi_PCBanana_Pi_Raspberry_Pi_GPIO_40) автор увязывает ... говорит что OrangePi PC:
(https://micro-pi.ru/wp-content/uploads/2016/11/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B0-%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-HC-SR04-%D0%BA-Orange-Pi-PC-Banana-Pi-%D0%B8%D0%BB%D0%B8-Raspberry-Pi-%D1%81-GPIO-%D0%BD%D0%B0-40-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%BE%D0%B2-300x285.png)
GPIO18 -> PIN12
GPIO23 -> PIN16

Это совершенно непонятно!

картинка для Raspberry Pi, а физически подключено правильно.
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 09:57:14 am
Для процессора H3 WiringOP компилируете с опцией -b h3, для H5 с опцией -b h5
для H2 есть своя WiringOP
Не компилируется, а скачивается с GIT с разных веток (branch) репозитория: -b h3 и -b h5 соответственно. Но для этого дают разные сервера GIT:
$ git clone https://github.com/zhaolei/WiringOP.git -b h3
...
$ git clone https://github.com/kazukioishi/WiringOP.git -b h5
...
Отличаются ли эти версии с разных серверов?
Для H2 скачивается с совсем другого сервера GIT:
$ git clone https://github.com/xpertsavenue/WiringOP-Zero.git
 
А собираются (компилируются и устанавливаются) все они совершенно одинаково - войдя в скачанный каталог:
$ sudo ./build
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 10:17:26 am
дык всё очевидно в таблице gpio readall - 37 нога на гребёнке.
Не всё так очевидно:
1. Что там электрически на выходах GPIO? на 37-й ноге... Я могу изменять GPIO20 и видеть изменения:
root@orangepione:/sys/class/gpio# echo 1 > /sys/class/gpio/gpio20/value
root@orangepione:/sys/class/gpio# cat /sys/class/gpio/gpio20/value
1
root@orangepione:/sys/class/gpio# echo 0 > /sys/class/gpio/gpio20/value
root@orangepione:/sys/class/gpio# cat /sys/class/gpio/gpio20/value
0
Эти же изменения видит: gpio readall (на картинках выше именно это показано).
Но я не вижу осциллографом никаких изменений на 37-й ноге гребёнки!
Нужно ли её (ногу) подпирать каким-то потенциалом? - через резистор на +5, GND
2. Показанные выше изменения состояния GPIO20 делаются системными средствами. Никаких изменений не удаётся получить командой записи:
$ gpio write 20 1

3. Команда gpio имеет ключи (опции) -g и -1... (и это есть подробно в man gpio).
Пишут (http://orangepi.su/content.php?p=112):
Цитировать
где номер порта который соответствует номеру в строке wPi, для использования физического номера используйте команду
gpio -1 mode <номер порта> <значение>
например надо физический порт 8 определить на выход
gpio -1 mode 8 out
запишем в порт логическую единицу
gpio -1 write 8 1
Но и никакие комбинации опций не позволяют не только электрически изменить уровень на ноге 37, но и считываемое значение по cat /sys/class/gpio/gpio20/value.
Что из этих опций соответствует каждой из 3-х колонок, показываемых gpio readall: BCM, wPi, Physical ?
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 11:36:15 am
Но для этого дают разные сервера GIT:
И ещё: https://github.com/lanefu/WiringOtherPi (https://github.com/lanefu/WiringOtherPi)
Цитировать
An initiative to creat a unified WiringPI port to support all H2/H3 boards
It's a fork of a fork of a fork
;D
Цитировать
Не только названием отличается, она совместима с Orange Pi Zero на H2, ну и претендует на включение в релиз Armbian. Как и WiringOP, это всего лишь прослойка.
Это уже какое-то объединение реализаций H2 & H3 ... возможно, и H5.

P.S. Когда "радиолюбители" берутся за дело, то делу - труба :-[ ... как утверждал один мой начальник лаборатории.
Цитировать
crazy people
:-\

P.S. В этом GIT репозитории удивляет только то, что там есть один branch h3 ... и нет h2, h5 - оно одно и то же для всех модификаций?  :-\
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 24, 2018, 12:08:31 pm
утилита gpio, библиотеки WiringOP без всяких подтяжек выставит высокий логический уровень на 37-й ноге гребёнки
не заморачивайтесь с ключами -g и -1 man наверное для Raspberry писан.

gpio mode 25 out
gpio write 25 1


тоже самое через sysfs

echo 20 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio20/direction
echo 1 >  /sys/class/gpio/gpio20/value


в 3-х колонках, показываемых gpio readall: BCM, wPi, Physical  это 20 25 37
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 03:22:17 pm
утилита gpio, библиотеки WiringOP без всяких подтяжек выставит высокий логический уровень на 37-й ноге гребёнки
Да, запутался я с нумерацией гребёнки ... давно не возился с электроникой...
root@orangepione:/sys/class/gpio# echo 20 > /sys/class/gpio/unexport
bash: echo: write error: Invalid argument

root@orangepione:/sys/class/gpio# echo 20 > /sys/class/gpio/export

root@orangepione:/sys/class/gpio# gpio exports
GPIO Pins exported:
  20: in   0  none

root@orangepione:/sys/class/gpio# cat /sys/class/gpio/gpio20/value
0

root@orangepione:/sys/class/gpio# cd /sys/class/gpio/gpio20
Это начальная подготовка GPIO20, характерно, что по дефаулту пин становится в состояние IN.
root@orangepione:/sys/class/gpio/gpio20# echo out > direction

root@orangepione:/sys/class/gpio/gpio20# gpio exports
GPIO Pins exported:
  20: out  0  none

root@orangepione:/sys/class/gpio/gpio20# cat value
0

root@orangepione:/sys/class/gpio/gpio20# echo 1 > value

root@orangepione:/sys/class/gpio/gpio20# cat value
1
И теперь я действительно вижу осциллографом что 37 pin переходит LOW -> HIGH !

Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 03:47:02 pm
Теперь утилита gpio:
olej@orangepione:~$ gpio read 25
1
olej@orangepione:~$ gpio write 25 0
olej@orangepione:~$ gpio read 25
0
Это соответствует № wPi=25 для BCM=20.
Мне этот эксперимент нужен был для того, чтобы проверить, что если пин инициализирован как OUT через /sys, то gpio его так уже и использует.
Ну а иначе нужно предварительно:
olej@orangepione:~$ gpio mode 25 out 
Хотя man gpio даёт немного другое написание параметра:
Цитировать
       mode <pin> <mode>
              Set  a pin into input, output or pwm mode. Can also use the literals up, down or tri to set the inter‐
              nal pull-up, pull-down or tristate (off) controls.
не заморачивайтесь с ключами -g и -1 man наверное для Raspberry писан.
А вот тут меня "наверное" не устраивает и в таких вещах хорошо бы знать, а не предполагать:
olej@orangepione:~$ gpio -1 write 37 1

olej@orangepione:~$ gpio read 25
1

olej@orangepione:~$ gpio -1 write 37 0

olej@orangepione:~$ gpio read 25
0

olej@orangepione:~$ cat /sys/class/gpio/gpio20/value
0
Вот тут уже фигурируют все 3 числа из таблички.
А вот опция -g, которая предполагала бы то же значение, что /sys - 20 - не работает.
Возможно это только для этого варианта WiringOP ... потому что их слишком много развелось ???
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 24, 2018, 05:39:05 pm
Нашёл такое ... странное описание того, как для pin (Physical) определить номер GPIO (BCM), который ему соответствуют, или наоборот. Без использования таблички gpio, а непосредственно из распиновки (из даташита) - Доступ к GPIO на OrangePI PC Plus (H3) на Armbian 3.4.113 и новее (http://qaru.site/questions/2433862/accessing-gpio-on-orangepi-pc-plus-h3-on-armbian-34113-and-newer):
Цитировать
(http://qaru.site/img/9e73ee100f180f03c221f2f4423af6b1.png)

для вывода PA1 команда будет echo 1 > sys/class/gpio/export. Номер штыря вычисляется по следующей формуле:
 (position of letter in alphabet - 1) * 32 + pin number
PA1 имеет номер штыря ('A' - первая буква) 1, PB2 имеет номер контакта 34 ('B' - вторая буква), PG7 имеет номер контакта 199 ('G' - 7-я буква (7-1) * 32 + 7 = 199)
Написанный там "номер штырька" - это номер GPIO, BCP!
Но, похоже, что это обозначение PxN а). является основой на картинках из даташитов, б). которое даёт соответствие для всех моделей Orange Pi - нынешних и будущих и в). это, скорее всего, и является основой, на которой авторы WiringPi / WiringOP и рисуют свои таблички для наглядности:
BCP = ( x - 'A' ) * 32 + N
Смотрю по даташиту OPI One (иду последовательно по номерам 40 контактов разъёма):
3 - PA12 - 12
5 - PA11 - 11
7 - PA6 - 6
11 - PA1 - 1
13 - PA0 - 0
15 - PA3 - 3
19 - PC0 - 64
21 - PC1 - 65
23 - PC2 - 66
27 - PA19 - 19
29 - PA7 - 7
31 - PA8 - 8
33 - PA9 - 9
35 - PA10 - 10
37 - PA20 - 20

8 - PA13 - 13
10 - PA14 - 14
12 - PD14 - 110
16 - PC4 - 68
18 - PC7 - 71
22 - PA2 - 2
24 - PC3 - 65
26 - PA21 - 21
28 - PA18 - 18
32 - PG8 - 200
36 - PG9 - 201
38 - PG6 - 198
40 - PG7 - 199
Это в точности та таблица, которую даёт gpio, но исключительно из обозначений в документации Orange Pi.
* - только 'G' - это вовсе не 199, как пишет хлопчик, а 192 = 6 * 32 ... т.е. хлопчик "слышал звон - да не знает где он".
 
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 25, 2018, 12:15:26 pm
Теперь, в итоге, ясно откуда берутся 2 "системы координат", 2 нумерации линий GPIO:
- BCM оно же GPIO# - внутренняя нумерация линий GPIO, даже не на входах процессора, а где-то на чипах обеспечивающих GPIO; этот же номер используем в командах /sys ... например, GPIO198 (я такое же нечто подобное видел и на новых платах от Intel с GPIO, и в их описаниях) - UDOO X86:
(https://www.udoo.org/docs-x86/img/x86_ultra_top_rotate.png)

- Physical - номер контакта (пин) 40 (или 26) контактного разъёма той же линии GPIO, например у H3 для той же GPIO198 -  pin 38; к этому номеру подключаемся электрически соединительными шнурками...

Этим 2-м нумерациям понятен физический (реальный) смысл... Не очень понятен смысл ещё одной нумерации wPi, которая используется для утилиты gpio - это что номер обозначает? Но... если бы я писал утилиту gpio, я, конечно мог бы внутри, в коде применить любую систему нумерации, "от булды" ;D... Но можно и gpio выполнять с опцией -1, тогда параметр-нумерация будет Physical - непосредственно по контактам разъёма.

P.S. Интересно, что в команде exports для gpio (и ещё некоторых случаев по man) используется исключительно нумерация GPIO# ... которая не работает в качестве параметра.

P.P.S. Вот сижу и думаю: какой смысл в этой 3-й системе нумерации линия GPIO ... даже какой она была первоначально в Rapsbery Pi, откуда перекочевала в Orange Pi - в чём была задумка?  ;) 
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 02:44:54 pm
Для сравнения, табличка WiringPi на Rapsberry Pi:
olej@raspberrypi:~ $ gpio readall
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |  OUT | 0 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |  OUT | 0 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |  OUT | 0 |  7 || 8  | 1 | ALT0 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT0 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |  OUT | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |  OUT | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |  OUT | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |  OUT | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |  OUT | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+
И тут же рядом, для сравнения, такая же табличка WiringOP для Orange Pi:
olej@orangepione:~$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT3 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT3 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 0 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 | ALT3 | 0 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT3 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT3 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT3 | 0 | 23 || 24 | 0 | ALT3 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT3 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 | ALT3 | 0 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 | ALT3 | 0 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 | ALT3 | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 | ALT3 | 0 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT3 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+
Видно, что нумерации Physical и wPi совпадают, но они соответствуют совершенно разным BCM (GPIO#).
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 02:48:42 pm
Для сравнения, табличка WiringPi на Rapsberry Pi:
В описания для распиновки Rapsberry Pi читаем такие любопытные вещи - Распиновка Raspberry Pi - нюансы и особенности (https://myraspberry.ru/raspinovka-raspberry-pi.html):
Цитировать
У Raspberry распиновка включает в себя два ряда штырьков. Совокупное количество же пинов равняется 40, а значит в одном ряде их числов – 20.

В первую очередь человеку, который хочет подключить внешнее устройство, нужно знать, чем отличается каждый ряд. Первый (располагается слева) предназначается девайсам, для работы которых требуется напряжение в 3,3 Вольта. Второй (соответственно, размещается справа) – 5 Вольт. С этим не должно возникнуть вопросов.
Цитировать
Можно подключать любые устройства в Raspberry 2, 3 т.д. пины. Однако на GPIO есть специальные порты, которые применять не по назначению возможно, но не рекомендуется. К ним относятся BCM 0 и BCM 1, которые в схеме имеют номера 27 и 28 соответственно. Эти порты предназначены специально для поверхностного монтажа – HAT-устройств, которые, по сути, являются платами расширения.
Цитировать
Первое, о чем следует рассказать  – о силе тока. Максимально на один 3-вольтовый пин может быть подано 16 миллиампер, тогда как суммарно на все, работающие под указанным напряжением – 50 миллиампер. На 5-вольтовые power-штырьки, в свою очередь, может быть суммарно подано до 500 миллиампер. Благодаря этому по GPIO возможно подключать в том числе клавиатуры, мыши и прочее оборудование.
Как с этим?
Особенно относительно 1-го цитируемого фрагмента (3.3v/5v)...
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 04:53:32 pm
Вот тоже цитата с форума cnc:
Цитировать
подробные инструкции нужны только "чайникам" и написать их могут только "чайники".
художник творит для тех, кто имеет похожую/близкую конструкцию мозга, позволяющую воспринимать созданное
"Гуру" и без подобных инструкций во всём разобрались и соотв.
писать им инструкции для "чайников" нет необходимости, разве что из альтруизма и от избытка времени.
 Но и в этом случае они могут просто не догадываться, что какое-то простейшее для них понятие может быть непонятно "чайникам" и его надо подробно расписать...
Читайте первоисточники aka. datasheet
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 05:08:45 pm
Вот тоже цитата с форума cnc:
Цитировать
подробные инструкции нужны только "чайникам" и написать их могут только "чайники".
художник творит для тех, кто имеет похожую/близкую конструкцию мозга, позволяющую воспринимать созданное
"Гуру" и без подобных инструкций во всём разобрались и соотв.
писать им инструкции для "чайников" нет необходимости, разве что из альтруизма и от избытка времени.
 Но и в этом случае они могут просто не догадываться, что какое-то простейшее для них понятие может быть непонятно "чайникам" и его надо подробно расписать...
Читайте первоисточники aka. datasheet
Тогда, может, форум этот и другие подобные - закрыть нахер?  :-\ ... за ненадобностью

P.S. Вы когда цитируете очередного долбоёба: "цитата с форума cnc" - вы ссылку давайте? чтоб я ему там характеристику выписал... ;D
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 05:46:21 pm
P.S. Вы когда цитируете очередного долбоёба: "цитата с форума cnc" - вы ссылку давайте? чтоб я ему там характеристику выписал... ;D
да ненадо никого наказывать.  :) это в теме: "LinuxCNC + Orange Pi"
и моё мнение (IMHO), странно это, что вы как-бы ведёте диалог, или монолог  на  этом форуме  и других подобных.
вызывает ассоциацию человека идущего по тротуару и бубнящего чего-то себе.

   
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 06:03:10 pm
вызывает ассоциацию человека идущего по тротуару и бубнящего чего-то себе.
А я именно и "бубню чего-то себе" - выясняю для себя неясные подробности, а записываю их на форумах а). только для памяти, чтоб потом не забыть + б). может кому-то ещё пригодится. И естественно "чего-то себе" - потому что меня кроме себя, любимого, естественно никто другой интересовать не должен.

Только вот когда вы даёте такие "информативные" говно-советы как выше, то лучше бы затолкал язык себе в жопу и тихонько помалкивал...
А если вас просто плющит дурное настроение, то вы его ... маме высказывайте, или жене своей.

P.S. Сначала полтора или два года месил "говна собачьи" относительно нумерации выводов GPIO, что-то совершенно бездарное буровил... , а теперь оно "на коне":
Цитировать
Читайте первоисточники aka. datasheet


Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 06:52:12 pm
грубо.
но не справедливо,
Почти три года назад на allwinner H3 был посажен Si570 https://github.com/ua3nbw-cf/Si570- (https://github.com/ua3nbw-cf/Si570-)
позже энкодер на прерываниях  https://ua3nbw.ru/all/upravlenie-setevym-audiopleerom-pri-pomoschi-enkodera/ (https://ua3nbw.ru/all/upravlenie-setevym-audiopleerom-pri-pomoschi-enkodera/)
кнопки на GPIO Mainline Linux OrangePi https://github.com/ua3nbw-cf/gpio-keys (https://github.com/ua3nbw-cf/gpio-keys)

месиво про нумерацию выводов GPIO, где это ?
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 07:00:10 pm
грубо.
но не справедливо,
Почти три года назад на allwinner H3 был посажен Si570 https://github.com/ua3nbw-cf/Si570- (https://github.com/ua3nbw-cf/Si570-)
позже энкодер на прерываниях  https://ua3nbw.ru/all/upravlenie-setevym-audiopleerom-pri-pomoschi-enkodera/ (https://ua3nbw.ru/all/upravlenie-setevym-audiopleerom-pri-pomoschi-enkodera/)
кнопки на GPIO Mainline Linux OrangePi https://github.com/ua3nbw-cf/gpio-keys (https://github.com/ua3nbw-cf/gpio-keys)
Всё это читал.
Невнятно и косноязычно, с мелкими неточностями + без логически внятных связей ... "каша во рту", чем так писать - так лучше ничего не писать вообще!
Как только я отказался от всех этих "статей", и поискал более внятные источники - всё стало на свои места. Пацаны 20-летние пишут полнее, точнее, доходчивее, и более внятно.
Скорблю вместе с вами.  ;D 
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 07:04:10 pm
подробные инструкции нужны только "чайникам" и написать их могут только "чайники".
художник творит для тех, кто имеет похожую/близкую конструкцию мозга
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 07:17:33 pm
подробные инструкции нужны только "чайникам" и написать их могут только "чайники".
художник творит для тех, кто имеет похожую/близкую конструкцию мозга
Вот "как художник художнику" ;D скажу тебе (шёпотом и по секрету):  "Не твоё".  ;)

P.S. Мной издано несколько книги в издательствах Москвы и С.-Петербурга, по UNIX, Linux, realtime etc., которые получили много отзывов от профессионалов-разработчиков, как "лучшее что написано по предмету на русском языке" (это из отзывов и переписки). После чего издательство "Символ-Плюс", С.-Петербург (лучшее по IT) пригласило, и я почти 10 лет был научным редактором их переводной литературы - вот тех книг, которые "глянцевые и со зверушками".
Это я не для хвастовства написал, а потому что понимаю кто тут "художник", а кто ... как там говорилось у Даниила Хармса:
Цитировать
ХУДОЖНИК: Я художник!
РАБОЧИЙ: А по-моему,ты говно!
(Художник тут же побледнел, как полотно,
И как тростиночка закачался
И неожиданно скончался.
Его выносят.)
© "Четыре иллюстрации того, как новая идея огорашивает человека, к ней не подготовленного"
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 07:39:55 pm
Это я не для хвастовства написал, а потому что понимаю кто тут "художник", а кто ... как там говорилось у Даниила Хармса:
© "Четыре иллюстрации того, как новая идея огорашивает человека, к ней не подготовленного"
есть подобный писатель на форуме vegalab, лет 10 публикует в журналах схемы усилителей, не ссылаясь на авторов этих схем.
может он тоже "научным редактором" работал. Ума большого не надо, а что, copy + paste
Название: Re: поддержка GPIO
Отправлено: Olej от Ноябрь 28, 2018, 07:45:31 pm
Ладно ... всё - поговорил и хватит.
Я первоначально рассчитывал на вас как на квалифицированного профессионала. Оказалось - ошибся: нахватавшийся начётчик, "самопалкин на коленке", фарисей...
Проехали...
Свободен.
(убогий срач разводить с тобой я не намереваюсь)

P.S. Всегда досадно разочаровываться в людях.
Ничего, без говнистых разберёмся...
Цитировать
Сухов: «Я рассчитывал на тебя, Саид».
;)
Название: Re: поддержка GPIO
Отправлено: ua3nbw от Ноябрь 28, 2018, 08:06:18 pm

Сухов: «Я рассчитывал на тебя, Саид».
 ;)
Большевизм: «Я рассчитывал на тебя».

В кратком ответе большевизма — трезвая оценка вероятности исхода одиночного противостояния культуре толпо-“элитаризма” и призыв к кораническому исламу осознанно размежеваться с библейской концепцией управления.

Коранический ислам: «Если меня убьют, кто отомстит Джавдету?»

 :)