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

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

Это черновик страницы. Последняя правка сделана 08.09.2023 пользователем Mikhail.Burchu.

Введение

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

Наименование модуля Имена GPIO
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 0
IN2 1
IN3 2
IN4 3
IN5 4
IN6 5
IN7 6
IN8 7
IN9 8
IN10 9
IN11 10
IN12 11
IN13 12
IN14 13
WBIO-DIO-TTL-8
TTL1 0
TTL2 1
TTL3 2
TTL4 3
TTL5 4
TTL6 5
TTL7 6
TTL8 7
WBIO-DO-HS-8
HS1 0
HS2 1
HS3 2
HS4 3
HS5 4
HS6 5
HS7 6
HS8 7
WBIO-DO-R10R-4
DIR1 0
ON1 1
DIR2 2
ON2 3
DIR3 4
ON3 5
DIR4 6
ON4 7
WBIO-DO-R1G-16
K1 0
K2 1
K3 2
K4 3
K5 4
K6 5
K7 6
K8 7
K9 8
K10 9
K11 10
K12 11
K13 12
K14 13
K15 14
K16 15
WBIO-DO-R3A-4
R3A1 0
R3A2 1
R3A3 2
R3A4 3
WBIO-DO-RxA-8
R3A1 0
R3A2 1
R3A3 2
R3A4 3
R3A5 4
R3A6 5
R3A7 6
R3A8 7
WBIO-DO-SSR-8
K1 0
K2 1
K3 2
K4 3
K5 4
K6 5
K7 6
K8 7

Реализация 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 Примечание
SoM Eth1 RXD3 0
SoM Eth1 RXD2 1
SoM Eth1 RXD1 2
SoM Eth1 RXD0 3
SoM Eth1 TXD3 4
SoM Eth1 TXD2 5
SoM Eth1 TXD1 6
SoM Eth1 TXD0 7
SoM Eth1 RXCK 8
SoM Eth1 RXERR 9
SoM Eth1 RXDV 10
SoM Eth1 MDC 11
SoM Eth1 MDIO 12
SoM Eth1 TXEN 13
SoM Eth1 TXCK 14
SoM Eth1 CRS 15
SoM Eth1 RST 237
CAN TX 16
CAN RX 17
CAN TXRX ON 53
CAN/UART RX ALT 229
SoM PMIC SCL 32
SoM PMIC SDA 33
BUZZER 35
Red LED 41 Управление индикатором
Green LED 42
W1 UP 256
W2 UP 257
WBIO SCL 50
WBIO SDA 51
WBIO INT 272
DEBUG UART TX 54
DEBUG UART RX 55
SoM Wi-Fi ON 67
SoM Wi-Fi CMD 192
SoM Wi-Fi CLK 193
SoM Wi-Fi D0 194
SoM Wi-Fi D1 195
SoM Wi-Fi D2 196
SoM Wi-Fi D3 197
SoM Wi-Fi HOST_WAKE 80
SoM BT ON 68
SoM BT TX 198
SoM BT RX 199
SoM BT WAKE 81
SoM BT HOST_WAKE 82
SoM BT reserved 200
SoM BT reserved 201
SoM eMMC CMD 70
SoM eMMC CLK 71
SoM eMMC D0 72
SoM eMMC D1 73
SoM eMMC D2 74
SoM eMMC D3 75
SoM eMMC D4 76
SoM eMMC D5 77
SoM eMMC D6 78
SoM eMMC D7 79
SoM eMMC RST 88
LVDS D0 P 96
LVDS D0 N 97
LVDS D1 P 98
LVDS D1 N 99
LVDS D2 P 100
LVDS D2 N 101
LVDS DCK P 102
LVDS DCK N 103
LVDS D3 P 104
LVDS D3 N 105
Pushbutton 110
EC WBMZ Status 389
USB0 ID 116
USB0 ON 128
Wi-Fi ON 120
5VOut ON 129
VOut ON 388
RS-485-1 RTS 83
RS-485-1 Termination 137
RS-485-1 Failsafe 139
RS-485-1 TX 274
RS-485-1 RX 275
RS-485-2 RTS 85
RS-485-2 Termination 132
RS-485-2 Failsafe 138
RS-485-2 TX 202
RS-485-2 RX 203
microSD D1 160
microSD D0 161
microSD CLK 162
microSD CMD 163
microSD D3 164
microSD D2 165
microSD CD 69
SoM Eth0 RXD3 232
SoM Eth0 RXD2 233
SoM Eth0 RXD1 234
SoM Eth0 RXD0 235
SoM Eth0 TXD3 238
SoM Eth0 TXD2 239
SoM Eth0 TXD1 240
SoM Eth0 TXD0 241
SoM Eth0 RXCK 242
SoM Eth0 RXERR 243
SoM Eth0 RXDV 244
SoM Eth0 MDC 245
SoM Eth0 MDIO 246
SoM Eth0 TXEN 247
SoM Eth0 TXCK 248
SoM Eth0 CRS 249
SoM Eth0 RST 236
SoM Eth0 COL 250
SoM LCD Backlight ON 251
EC CS 46
EC CLK 47
EC MOSI 48
EC MISO 49
EC SWCLK/BOOT0 114
EC RESET 115
EC INT 271
CR_RTC SCL 258
CR_RTC SDA 259
ON periph voltage 45

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

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