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

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

Это черновик страницы. Последняя правка сделана 21.05.2022 пользователем 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 на клеммниках

Функция 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

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