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

Материал из Wiren Board

Введение

Эта статья предназначена, в первую очередь, для разработчиков стороннего ПО для контроллеров 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 на клеммниках

Функция GPIO number Примечание
Выходы A1-A4
A1 OUT 109 Выход «открытый коллектор»
A2 OUT 108 Выход «открытый коллектор»
A3 OUT 107 Выход «открытый коллектор»
A4 OUT 106 Выход «открытый коллектор»
Входы A1-A4
A1 IN 231
A2 IN 230
A3 IN 227
A4 IN 228
Onewire
W1 226 1-wire/DI
W2 273 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

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

Функция GPIO number Примечание
MOD1
MOD1 RTS 36
MOD1 TX 276
MOD1 RX 277
MOD2
MOD2 RTS 84
MOD2 TX 268
MOD2 RX 269
MOD3
MOD3 RTS 52
MOD3 TX 266
MOD3 RX 267
MOD4
MOD4 RTS 270
MOD4 TX 224
MOD4 RX 225
MOD4 SPI MOSI 64
MOD4 SPI MISO 65
MOD4 SPI CLK 66
MOD4 SPI CS 87
GSM (WBC)
GSM Status 121 Modem power status (input)
GSM PWRKEY 122 Modem PWRKEY (output)
GSM ON 123 On/OFF 5 V
SIM_SELECT 34 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
A4 a4-volt
Vin vin-volt

Ножки для внутреннего использования

Функция (label) GPIO number Примечание
BUZZER 35
Red LED 41 Управление индикатором
Green LED 42
W1 UP 256
W2 UP 257
Pushbutton 110
USB0 ON 128
Wi-Fi ON 120
5VOut ON 129
VOut ON 388
RS-485-1 Termination 137
RS-485-1 Failsafe 139
RS-485-2 Termination 132
RS-485-2 Failsafe 138

Расположение данных на внутреннем накопителе

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