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

Материал из 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 GPIO number вывод i.mx6UL комментарии
Выходы A1-A4
A1(out) FET GPIO3_IO15 79 LCD_DATA10 Выход "открытый коллектор";
A2(out) FET GPIO3_IO16 80 LCD_DATA11 Выход "открытый коллектор";
A3(out) FET GPIO3_IO17 81 LCD_DATA12 Выход "открытый коллектор";
A4(out) FET GPIO3_IO18 82 LCD_DATA13 Выход "открытый коллектор";
Входы A1-A4 (инвертированы; т.е. "1" на gpio появляется, когда на входе нет напряжения)
A1 (in) DI GPIO3_IO14 78 LCD_DATA09
A2 (in) DI GPIO3_IO13 77 LCD_DATA08
A3 (in) DI GPIO3_IO28 92 LCD_DATA23
A4 (in) DI GPIO3_IO27 91 LCD_DATA22
Onewire
W1 1-wire/DI GPIO3_IO4 68 LCD_RESET по умолчанию используется драйвером w1-gpio
W2 1-wire/DI GPIO1_IO11 11 JTAG_TMS по умолчанию используется драйвером w1-gpio

Реализация 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 Для появления нужно выставить в wb-hardware.conf "Expose UART Pins (DIY)"
/dev/ttymxc4 /dev/ttyMOD2 UART на модуле расширения MOD2 Для появления нужно выставить в wb-hardware.conf "Expose UART Pins (DIY)"
/dev/ttymxc5 /dev/ttyMOD3 UART на модуле расширения MOD3 Для появления нужно выставить в wb-hardware.conf "Expose UART Pins (DIY)"
/dev/ttymxc6 /dev/ttyMOD4 UART на модуле расширения MOD4 Для появления нужно выставить в wb-hardware.conf "Expose UART Pins (DIY)"
/dev/ttymxc7 /dev/ttyGSM UART на модуле расширения WBC (разъём GSM/3G/4G-модема) Для появления нужно выставить какой-либо из модемов в wb-hardware.conf

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

вывод sodim GPIO GPIO number pinmux pad name пин функция
MOD1
- - - - 3.3V 3.3V
30 GPIO1_IO24 24 UART3_TX_DATA TX gpio/uart_tx/i2c_sda
32 GPIO1_IO25 25 UART3_RX_DATA RX gpio/uart_rx/i2c_scl
- - - - 5V 5V
34 GPIO1_IO26 26 UART3_CTS_B RTS gpio/uart_de
- - - - GND GND
MOD2
- - - - 3.3V 3.3V
98 GPIO4_IO21 117 CSI_DATA00 TX gpio/uart_tx/i2c_sda
49 GPIO1_IO10 10 JTAG_MOD TX (muxed через 3k, 12k PD) spdif out
100 GPIO4_IO22 118 CSI_DATA01 RX gpio/uart_rx/i2c_scl
- - - - 5V 5V
52 GPIO1_IO09 9 GPIO1_IO09 RTS gpio/uart_de
- - - - GND GND
MOD3
- - - - 3.3V 3.3V
90 GPIO4_IO17 113 CSI_MCLK TX gpio/uart_tx/i2c_sda
92 GPIO4_IO18 114 CSI_PIXCLK RX gpio/uart_rx/i2c_scl
- - - - 5V 5V
94 GPIO4_IO19 115 CSI_VSYNC RTS gpio/uart_de
- - - - GND GND
MOD4
- - - - 3.3V 3.3V
194 GPIO3_IO21 85 LCD_DATA16 TX gpio/uart_tx/i2c_sda
192 GPIO3_IO22 86 LCD_DATA17 RX gpio/uart_rx/i2c_scl
112 GPIO4_IO28 124 CSI_DATA07 MISO spi miso
106 GPIO4_IO25 121 CSI_DATA04 SCK spi sck
- - - - 5V 5V
150 GPIO3_IO0 64 LCD_CLK RTS gpio/uart_de
- - - - GND GND
110 GPIO4_IO27 123 CSI_DATA06 MOSI spi mosi
108 GPIO4_IO26 122 CSI_DATA05 SS spi ss
WBC (модем)
188 GPIO3_IO24 88 LCD_DATA19 SIM_SELECT SIM slot select (low: 1, high: 2)
166 GPIO3_IO19 83 LCD_DATA14 STATUS Modem power status (input)
164 GPIO3_IO20 84 LCD_DATA15 POWER_GSM Modem PWRKEY (output)
125 GPIO5_IO04 132 SNVS_TAMPER4 5V gpio (включение/выключение 5V на модем)
186 - - LCD_DATA20 TX uart_tx
184 - - LCD_DATA21 RX uart_rx
- - - - GND GND

Каналы АЦП

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

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

вывод sodim GPIO GPIO number вывод i.mx6UL функция
84 GPIO1_IO13 13 JTAG_TDI транзисторная подтяжка 1-wire к верху (W2)
77 GPIO4_IO16 112 NAND_DQS транзисторная подтяжка 1-wire к верху (W1)
36 GPIO1_IO27 27 5V out
23 GPIO2_IO19 51 SD1_DATA1 watchdog input (6.7-6.8)
? GPIO3_IO08 - LCD_DATA03 watchdog input (6.9-)
162 PWM1_OUT LCD_DATA00 Buzzer
80 Red LED, управление индикатором
82 Green LED, управление индикатором
65 GPIO1_IO18 18 STAT1 (BATTERY_CHARGING)
67 GPIO1_IO19 19 STAT2 (BATTERY_PRESENT)
152 GPIO3_IO10 74 питание Wi-Fi (active low)
29 GPIO2_IO16 48 i2c для RTC, SDA
31 GPIO2_IO17 49 i2c для RTC, SCL
144 GPIO3_IO12 76 PAD_LCD_DATA07 i2c для EEPROM1, SDA
142 GPIO3_IO03 67 PAD_LCD_VSYNC i2c для EEPROM1, SCL
160 GPIO3_IO06 70 PAD_LCD_DATA01 i2c для EEPROM2, SDA
158 GPIO3_IO07 71 PAD_LCD_DATA02 i2c для EEPROM2, SCL
75 GPIO4_IO11 107 питание USB
154 GPIO3_IO09 73 V_OUT_ON
156 GPIO3_IO08 72 V_OUT_ST (6.7-6.8)
102 GPIO4_IO23 119 PAD_CSI_DATA02 RS-485-1 failsafe bias
96 GPIO4_IO20 116 CSI_HSYNC RS-485-2 failsafe bias
40 GPIO1_IO23 23 PAD_UART2_RTS_B CAN transciever power
117 GPIO5_IO00 128 SNVS_TAMPER0 Termination resistor on RS-485-1
121 GPIO5_IO02 130 SNVS_TAMPER2 Termination resistor on RS-485-2
GPIO5_IO10 138 FW button