Wiren Board 7.2 и 7.3.x: Низкоуровневая работа с железом

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Введение

Эта статья предназначена, в первую очередь, для разработчиков стороннего ПО для контроллеров 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-A3, D1
A1 OUT Выход «открытый коллектор»
A2 OUT Выход «открытый коллектор»
A3 OUT Выход «открытый коллектор»
D1 OUT Выход «открытый коллектор»
Входы A1-A3, D1 (1 — нет сигнала)
A1 IN
A2 IN
A3 IN
D1 IN
Onewire
W1 1-wire/DI
W2 1-wire/DI

Имена GPIO боковых модулей WBIO

Для обращения к боковым модулям WBIO лучше использовать не номера GPIO, а так называемые «имена» или «метки».

При обращении нужно указать порядковый номер модуля. Нумерация начинается с единицы: EXT1_IN1 — первый дискретный вход первого модуля, EXT2_IN1 — первый дискретный вход второго модуля, EXT3_K4 — четвертый дискретный выход третьего модуля и так далее.

Как работать с GPIO и преобразовывать имена в номера, читайте в статье Работа с GPIO.

Таблица имён GPIO боковых модулей WBIO
Модуль Номера входов/выходов
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/L и B/H (этот порт может использоваться и как CAN) Неизолированный порт, установлен терминатор, мультиплексирован с CAN
/dev/ttyS7 /dev/ttyMOD1 UART на модуле расширения MOD1
/dev/ttyS6 /dev/ttyMOD2 UART на модуле расширения MOD2
/dev/ttyS5 /dev/ttyMOD3 UART на модуле расширения MOD3
/dev/ttyS3 /dev/ttyMOD4 UART на модуле расширения MOD4

Сигналы на модулях расширения

Функция Примечание
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
MOD4 SPI MOSI
MOD4 SPI MISO
MOD4 SPI CLK
MOD4 SPI CS
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 7 доступны через стандартный ядерный интерфейс IIO. Конвертация сигналов с учётом внешний по отношению к процессору делителей происходит внутри ядра.

Каждому аналоговому входу соответствует своё устройство в подсистеме IIO. Приложения должны считывать текущие значения из файлов с суффиксом raw, текущий масштаб и сдвиг из файлов scale и offset.

В Wiren Board 7 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
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