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

Материал из 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-A3, D1
A1 OUT 109 Выход «открытый коллектор»
A2 OUT 108 Выход «открытый коллектор»
A3 OUT 107 Выход «открытый коллектор»
D1 OUT 106 Выход «открытый коллектор»
Входы A1-A3, D1 (1 — нет сигнала)
A1 IN 231
A2 IN 230
A3 IN 227
D1 IN 228
Onewire
W1 226 1-wire/DI
W2 271 1-wire/DI

Реализация UART

Название порта в Linux Альтернативное имя порта в Linux Разъём на контроллере Примечание
/dev/ttymxc0 /dev/ttyCONSOLE Debug-uart контроллера (micro-usb) Настройки по умолчанию: 115200-8-N-1
/dev/ttymxc1 /dev/ttyRS485-1 Подписан RS-485, клеммники A и B Неизолированный порт, установлен терминатор
/dev/ttymxc3 /dev/ttyRS485-2 Подписан RS-485, клеммники A/L и B/H (этот порт может использоваться и как CAN) Неизолированный порт, установлен терминатор, мультиплексирован с CAN
/dev/ttymxc2 /dev/ttyMOD1 UART на модуле расширения MOD1
/dev/ttymxc4 /dev/ttyMOD2 UART на модуле расширения MOD2
/dev/ttymxc5 /dev/ttyMOD3 UART на модуле расширения MOD3
/dev/ttymxc6 /dev/ttyMOD4 UART на модуле расширения MOD4
/dev/ttymxc7 /dev/ttyGSM UART на модуле расширения WBC (разъём GSM/3G/4G-модема) Для появления нужно выставить какой-либо из модемов в wb-hardware.conf

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

Функция GPIO number Примечание
MOD1
MOD1 RTS 36
MOD1 TX 226
MOD1 RX 227
MOD2
MOD2 RTS 84
MOD2 TX 268
MOD2 RX 269
MOD3
MOD3 RTS 138
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)

Каналы АЦП

клеммник Канал АЦП Делитель
A1 88k7, 10k
A2
A3
Vin 200k, 12k
5Vout 33k, 12k

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

Функция 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
Eth1 RST 237
CAN_TX 16
CAN_RX 17
CAN TXRX ON 139
CAN/UART RX ALT 229
SoM PMIC_SCK 32
SoM PMIC_SDA 33
BUZZER 35
Red LED 41 Управление индикатором
Green LED 42
W1-UP 45
W2-UP 131
EEPROM-2 SDA 46
EEPROM-2 SCL 47
EEPROM-1 SDA 48
EEPROM-1 SCL 49
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 BT ON 68
SoM BT TX 198
SoM BT RX 199
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
SoM Wi-Fi HOST_WAKE 80
SoM BT WAKE 81
SoM BT HOST_WAKE 82
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
WBMZ Status 115 vin
USB0 ID 116 usb0_id_det
USB0 ON 128
Watchdog out 117
Wi-Fi ON 120
5Vout ON 129
V_OUT ON 130
RS-485-1 RTS 83
RS-485-1 Termination 134
RS-485-1 Failsafe 136
RS-485-1 TX 274
RS-485-1 TX 275
RS-485-2 RTS 85
RS-485-2 Termination 133
RS-485-2 Failsafe 135
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 LCD Backlight ON 251
RTC SCK 226
RTC SDA 257
RTC OUT 273