Wiren Board 8.4.x: Низкоуровневая работа с железом
Это черновик страницы. Последняя правка сделана 03.05.2024 пользователем A.Degtyarev.
Введение
Эта статья предназначена, в первую очередь, для разработчиков стороннего ПО для контроллеров Wiren Board.
Самый простой и удобный способ работы с железом контроллера — через MQTT, связываясь с сервисами wb: wb-mqtt-gpio, wb-mqtt-adc, wb-mqtt-gpio и т.п. Сервисы wb- позволяют работать с железом через унифицированный интерфейс MQTT и скрывают аппаратные различия между аппаратными ревизиями контроллеров.
Работа в обход стандартных сервисов wb- обычно используется, когда программное обеспечение выполняется на разных Linux-контроллерах разных вендоров, и работа через соответсвующие интерфейсы ядра уже реализована в ПО. Данная статья содержит описание периферии, нужное для работы с ней через стандартные интерфейсы ядра. При работе с ядерными интерфейсами не забудьте отключить соответствующий сервис wb-.
Большая часть периферии, описанной в этой статье, описана также в ноде /wirenboard в Devicee Tree контроллера. Сервисы wb-mqtt-gpio, wb-mqtt-adc и т.д. берут описание периферии именно оттуда, считывая описание каждый раз при старте контроллера. Этот способ является предпочтительным и для стороннего ПО, чтобы сохранить совместимость с прошлыми и будущими аппаратными ревизиями оборудования.
Работа с GPIO в Linux
GPIO (General-purpose input/output — ввод/вывод общего назначения) — контакт электрической схемы, который может принимать одно из двух логических состояний — единицу или ноль. Пользователь может устанавливать и считывать состояние GPIO.
В разных устройствах высокий логический уровень может представляться разным напряжением — следите за этим. В контроллерах Wiren Board логическая единица — это 3.3 В.
ВНИМАНИЕ: не подключайте напрямую к GPIO контроллера сигналы с напряжением больше 3.3 В! Если нужно подключить устройство, которое выдает сигнал с более высоким напряжением — используйте схемы согласования. В некоторых случаях, если напряжение сигнала не больше 5 В, то можно согласовать сигналы через резистор на 20 кОм.
Подробно про работу с GPIO читайте в статье Работа с GPIO. Также рекомендуем прочитать соответствующий раздел документации к ядру Linux.
Для других версий контроллера смотрите Таблицы GPIO разных версий контроллера.
Посмотреть таблицу GPIO можно командой cat /sys/kernel/debug/gpio
, или в разделе ниже.
GPIO на клеммниках
Метка (label) | Примечание | |
---|---|---|
Выходы A1-A4 | ||
A1 OUT | Выход «открытый коллектор» | |
A2 OUT | Выход «открытый коллектор» | |
A3 OUT | Выход «открытый коллектор» | |
A4 OUT | Выход «открытый коллектор» | |
Входы A1-A4 | ||
A1 IN | ||
A2 IN | ||
A3 IN | ||
A4 IN | ||
Onewire | ||
W1 | 1-wire/DI | |
W2 | 1-wire/DI |
Имена GPIO боковых модулей WBIO
Для обращения к боковым модулям WBIO лучше использовать не номера GPIO, а так называемые «имена» или «метки».
При обращении нужно указать порядковый номер модуля. Нумерация начинается с единицы: EXT1_IN1 — первый дискретный вход первого модуля, EXT2_IN1 — первый дискретный вход второго модуля, EXT3_K4 — четвертый дискретный выход третьего модуля и так далее.
Как работать с GPIO и преобразовывать имена в номера, читайте в статье Работа с GPIO.
Модуль | Номера входов/выходов | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
WBIO-DI-DR-14 | DR1 | DR2 | DR3 | DR4 | DR5 | DR6 | DR7 | DR8 | DR9 | DR10 | DR11 | DR12 | DR13 | DR14 | ||
WBIO-DI-DR-16 | DR1 | DR2 | DR3 | DR4 | DR5 | DR6 | DR7 | DR8 | DR9 | DR10 | DR11 | DR12 | DR13 | DR14 | DR15 | DR16 |
WBIO-DI-DR-8 | DR1 | DR2 | DR3 | DR4 | DR5 | DR6 | DR7 | DR8 | ||||||||
WBIO-DI-HVD-16 | IN1 | IN2 | IN3 | IN4 | IN5 | IN6 | IN7 | IN8 | IN9 | IN10 | IN11 | IN12 | IN13 | IN14 | IN15 | IN16 |
WBIO-DI-HVD-8 | IN1 | IN2 | IN3 | IN4 | IN5 | IN6 | IN7 | IN8 | ||||||||
WBIO-DI-LVD-16 | IN1 | IN2 | IN3 | IN4 | IN5 | IN6 | IN7 | IN8 | IN9 | IN10 | IN11 | IN12 | IN13 | IN14 | IN15 | IN16 |
WBIO-DI-LVD-8 | IN1 | IN2 | IN3 | IN4 | IN5 | IN6 | IN7 | IN8 | ||||||||
WBIO-DI-WD-14 | IN1 | IN2 | IN3 | IN4 | IN5 | IN6 | IN7 | IN8 | IN9 | IN10 | IN11 | IN12 | IN13 | IN14 | ||
WBIO-DIO-TTL-8 | TTL1 | TTL2 | TTL3 | TTL4 | TTL5 | TTL6 | TTL7 | TTL8 | ||||||||
WBIO-DO-HS-8 | HS1 | HS2 | HS3 | HS4 | HS5 | HS6 | HS7 | HS8 | ||||||||
WBIO-DO-R10R-4 | DIR1 | ON1 | DIR2 | ON2 | DIR3 | ON3 | DIR4 | ON4 | ||||||||
WBIO-DO-R1G-16 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | K8 | K9 | K10 | K11 | K12 | K13 | K14 | K15 | K16 |
WBIO-DO-R3A-4 | R3A1 | R3A2 | R3A3 | R3A4 | ||||||||||||
WBIO-DO-RxA-8 | R3A1 | R3A2 | R3A3 | R3A4 | R3A5 | R3A6 | R3A7 | R3A8 | ||||||||
WBIO-DO-SSR-8 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | K8 |
Реализация UART
Название порта в Linux | Альтернативное имя порта в Linux | Разъём на контроллере | Примечание |
/dev/ttyS0 | /dev/ttyCONSOLE | Debug-uart контроллера (micro-usb) | Настройки по умолчанию: 115200-8-N-1 |
/dev/ttyS2 | /dev/ttyRS485-1 | Подписан RS-485, клеммники A и B | Неизолированный порт, установлен терминатор |
/dev/ttyS4 | /dev/ttyRS485-2 | Подписан RS-485, клеммники A и B | Неизолированный порт, установлен терминатор |
/dev/ttyS7 | /dev/ttyMOD1 | UART на модуле расширения MOD1 | |
/dev/ttyS6 | /dev/ttyMOD2 | UART на модуле расширения MOD2 | |
/dev/ttyS5 | /dev/ttyMOD3 | UART на модуле расширения MOD3 |
Сигналы на модулях расширения
Метка (label) | Примечание |
---|---|
MOD1 | |
MOD1 RTS | |
MOD1 TX | |
MOD1 RX | |
MOD2 | |
MOD2 RTS | |
MOD2 TX | |
MOD2 RX | |
MOD3 | |
MOD3 RTS | |
MOD3 TX | |
MOD3 RX | |
MOD4 | |
MOD4 RTS | |
MOD4 TX | |
MOD4 RX | |
GSM (WBC) | |
GSM Status | Modem power status (input) |
GSM PWRKEY | Modem PWRKEY (output) |
GSM ON | On/OFF 5 V |
SIM_SELECT | SIM slot select (low: 1, high: 2) |
Аналоговые входы
Аналоговые входы в Wiren Board 8.4 доступны через стандартный ядерный интерфейс IIO. Конвертация сигналов с учётом внешний по отношению к процессору делителей происходит внутри ядра.
Каждому аналоговому входу соответствует своё устройство в подсистеме IIO. Приложения должны считывать текущие значения из файлов с суффиксом raw, текущий масштаб и сдвиг из файлов scale и offset.
В Wiren Board 8.4 scale аналоговых входов постоянный, а offset всегда равен нулю.
Пример чтения напряжения Vin на контроллере:
root@wirenboard-AHIN3TB:~# cat /sys/bus/iio/devices/iio\:device4/name vin-volt root@wirenboard-AHIN3TB:~# cat /sys/bus/iio/devices/iio\:device4/in_voltage0_raw 1779 root@wirenboard-AHIN3TB:~# cat /sys/bus/iio/devices/iio\:device4/in_voltage0_scale 13.481987847 # 1779 * 13.481987847 mV = 23 984 mV
Приложения должны искать IIO устройства по именам, номера не являются стабильными.
Клеммник | Имя IIO устройства |
---|---|
A1 | a1-volt |
A2 | a2-volt |
A3 | a3-volt |
A4 | a4-volt |
Vin | vin-volt |
Ножки для внутреннего использования
Метка (label) | Примечание |
---|---|
BUZZER | |
Red LED | Управление индикатором |
Green LED | |
W1 UP | |
W2 UP | |
Pushbutton | |
USB0 ON | |
Wi-Fi ON | |
5VOut ON | |
VOut ON | |
RS-485-1 Termination | |
RS-485-1 Failsafe | |
RS-485-2 Termination | |
RS-485-2 Failsafe |
Расположение данных на внутреннем накопителе
Offset (in bytes) | ||
---|---|---|
0x00000000 | MBR | Device-specific factory data |
0x000000D9 | ||
0x000001BE | Partition table | |
0x000001FE | ||
0x000001FF | ||
0x00002000 | Bootloader | |
0x00087fff | ||
0x00088000 | Bootloader environment | |
0x000a7fff | ||
0x000fc000 | Device-specific factory data Factory DT overlay with revision, batch, adc and crystal calibration data and so on |
|
0x000fffff | ||
0x00100000 | /dev/mmcblk0p1 Device-specific factory data |
|
0x00500000 | hiddenfs Ext3 filesystem, currently holding device-specific cryptographic certificates | |
0x005fffff | ||
0x010fffff | ||
0x01100000 | /dev/mmcblk0p2 Rootfs partition |
|
0x410fffff | ||
0x41100000 | /dev/mmcblk0p3 Rootfs partition |
|
0x810fffff | ||
0x81200000 | /dev/mmcblk0p5 Swap partition |
|
0x911fffff | ||
0x91300000 | /dev/mmcblk0p6 /mnt/data partition |
|
end |