Wiren Board 7.2: Peripherals: различия между версиями

Материал из Wiren Board
(не показаны 24 промежуточные версии 3 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Wiren Board 7.2 и 7.3.x: Низкоуровневая работа с железом}}
{{DISPLAYTITLE:Wiren Board 7.2: Низкоуровневая работа с железом}}
{{Draft}}
{{Wbincludes:Peripherals}}
{{Wbincludes:Peripherals}}
== GPIO на клеммниках ==
== GPIO на клеммниках ==
{|  border="1" class="wikitable"  
{|  border="1" class="wikitable"  
! Метка (label) ||Примечание
! Функция ||GPIO number ||  Примечание
|-
|-
! colspan="2" | Выходы A1-A3, D1
! colspan="3" | Выходы A1-A3, D1
|-
|-
| A1 OUT || Выход «открытый коллектор»
| A1 OUT || 109 || Выход «открытый коллектор»
|-
|-
| A2 OUT || Выход «открытый коллектор»
| A2 OUT || 108 || Выход «открытый коллектор»
|-
|-
| A3 OUT || Выход «открытый коллектор»
| A3 OUT || 107 || Выход «открытый коллектор»
|-
|-
| D1 OUT || Выход «открытый коллектор»
| D1 OUT || 106 || Выход «открытый коллектор»
|-
|-
! colspan="3" | Входы A1-A3, D1 (1 — нет сигнала)
! colspan="4" | Входы A1-A3, D1 (1 — нет сигнала)
|-
|-
| A1 IN ||  
| A1 IN ||231 ||  
|-
|-
| A2 IN ||  
| A2 IN ||230 ||  
|-
|-
| A3 IN ||  
| A3 IN ||227 ||  
|-
|-
| D1 IN ||
| D1 IN ||228 ||  
|-
|-
! colspan="2" | Onewire
! colspan="3" | Onewire
|-
|-
| W1 || 1-wire/DI  
| W1 || 226 || 1-wire/DI  
|-
|-
| W2 || 1-wire/DI  
| W2 || 271 || 1-wire/DI  
|-
|-
|}
|}
== Имена GPIO боковых модулей WBIO ==
{{Wbincludes:WBIO GPIO Names}}


== Реализация UART ==
== Реализация UART ==
Строка 43: Строка 41:
|'''Примечание'''
|'''Примечание'''
|-
|-
|/dev/ttyS0
|/dev/ttymxc0
|/dev/ttyCONSOLE
|/dev/ttyCONSOLE
|Debug-uart контроллера (micro-usb)
|Debug-uart контроллера (micro-usb)
|Настройки по умолчанию: 115200-8-N-1
|Настройки по умолчанию: 115200-8-N-1
|-
|-
|/dev/ttyS2
|/dev/ttymxc1
|/dev/ttyRS485-1
|/dev/ttyRS485-1
|Подписан ''RS-485'', клеммники A и B
|Подписан ''RS-485'', клеммники A и B
|Неизолированный порт, установлен терминатор
|Неизолированный порт, установлен терминатор
|-
|-
|/dev/ttyS4
|/dev/ttymxc3
|/dev/ttyRS485-2
|/dev/ttyRS485-2
|Подписан ''RS-485'', клеммники A/L и B/H (этот порт может использоваться и как CAN)
|Подписан ''RS-485'', клеммники A/L и B/H (этот порт может использоваться и как CAN)
|Неизолированный порт, установлен терминатор, мультиплексирован с CAN
|Неизолированный порт, установлен терминатор, мультиплексирован с CAN
|-
|-
|/dev/ttyS7
|/dev/ttymxc2
|/dev/ttyMOD1
|/dev/ttyMOD1
|UART на модуле расширения MOD1
|UART на модуле расширения MOD1
|
|
|-
|-
|/dev/ttyS6
|/dev/ttymxc4
|/dev/ttyMOD2
|/dev/ttyMOD2
|UART на модуле расширения MOD2
|UART на модуле расширения MOD2
|
|
|-
|-
|/dev/ttyS5
|/dev/ttymxc5
|/dev/ttyMOD3
|/dev/ttyMOD3
|UART на модуле расширения MOD3
|UART на модуле расширения MOD3
|
|
|-
|-
|/dev/ttyS3
|/dev/ttymxc6
|/dev/ttyMOD4
|/dev/ttyMOD4
|UART на модуле расширения MOD4
|UART на модуле расширения MOD4
|
|
|-
|/dev/ttymxc7
|/dev/ttyGSM
|UART на модуле расширения WBC (разъём GSM/3G/4G-модема)
|Для появления нужно выставить какой-либо из модемов в wb-hardware.conf
|-
|-
|}
|}
Строка 83: Строка 86:
Файл:MOD12.png|Распиновка разъемов Mod1, Mod2 и Mod3 на WB7 под модули расширения
Файл:MOD12.png|Распиновка разъемов Mod1, Mod2 и Mod3 на WB7 под модули расширения
Файл:MOD3.png|Распиновка разъема Mod4 на WB7 под модули расширения
Файл:MOD3.png|Распиновка разъема Mod4 на WB7 под модули расширения
Файл:wbc_mod.png| Распиновка разъема WBC на WB7 под модули 4g модемов (сигналы RX и TX не подключены)
Файл:wbc_mod.png| Распиновка разъема WBC на WB7 под модули 2g/3g/4g модемов
</gallery>
</gallery>


== Сигналы на модулях расширения ==
== Сигналы на модулях расширения ==
{|  border="1" class="wikitable"  
{|  border="1" class="wikitable"  
! Функция || Примечание
! Функция ||GPIO number ||  Примечание
|-
|-
! colspan="2" | MOD1
! colspan="3" | MOD1
|-
|-
| MOD1 RTS ||
| MOD1 RTS || 36 ||
|-
|-
| MOD1 TX ||  
| MOD1 TX || 226 ||  
|-
|-
| MOD1 RX ||  
| MOD1 RX || 227 ||  
|-
|-
! colspan="2" | MOD2
! colspan="3" | MOD2
|-
|-
| MOD2 RTS ||
| MOD2 RTS || 84 ||  
|-
|-
| MOD2 TX ||
| MOD2 TX || 268 ||  
|-
|-
| MOD2 RX ||
| MOD2 RX || 269 ||  
|-
|-
! colspan="2" | MOD3
! colspan="3" | MOD3
|-
|-
| MOD3 RTS ||  
| MOD3 RTS || 138 ||  
|-
|-
| MOD3 TX ||
| MOD3 TX || 266 ||  
|-
|-
| MOD3 RX ||
| MOD3 RX || 267 ||  
|-
|-
! colspan="2" | MOD4
! colspan="3" | MOD4
|-
|-
| MOD4 RTS ||
| MOD4 RTS || 270 ||  
|-
|-
| MOD4 TX ||
| MOD4 TX || 224 ||  
|-
|-
| MOD4 RX ||
| MOD4 RX || 225 ||  
|-
|-
| MOD4 SPI MOSI ||
| MOD4 SPI MOSI || 64 ||  
|-
|-
| MOD4 SPI MISO ||
| MOD4 SPI MISO || 65 ||  
|-
|-
| MOD4 SPI CLK ||
| MOD4 SPI CLK || 66 ||  
|-
|-
| MOD4 SPI CS ||
| MOD4 SPI CS || 87 ||  
|-
|-
! colspan="2" | GSM (WBC)
! colspan="3" | GSM (WBC)
|-
|-
| GSM Status  || Modem power status (input)  
| GSM Status  || 121 || Modem power status (input)  
|-
|-
| GSM PWRKEY  || Modem PWRKEY (output)  
| GSM PWRKEY  || 122 || Modem PWRKEY (output)  
|-
|-
| GSM ON  || On/OFF 5 V
| GSM ON  || 123 || On/OFF 5 V
|-
|-
| SIM_SELECT  || SIM slot select (low: 1, high: 2)  
| SIM_SELECT  || 34 || SIM slot select (low: 1, high: 2)  
|-
|-
|}
|}


== Аналоговые входы ==
== Каналы АЦП ==
Аналоговые входы в Wiren Board 7 доступны через стандартный ядерный интерфейс IIO.
Конвертация сигналов с учётом внешний по отношению к процессору делителей происходит внутри ядра.
 
Каждому аналоговому входу соответствует своё устройство в подсистеме IIO. Приложения должны считывать текущие значения из файлов с суффиксом raw, текущий масштаб и сдвиг из файлов scale и offset.
 
В Wiren Board 7 scale аналоговых входов постоянный, а offset всегда равен нулю.
 
Пример чтения напряжения Vin на контроллере:
 
<pre>
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
</pre>
 
Приложения должны искать IIO устройства по именам, номера не являются стабильными.
 
{| class="wikitable"
{| class="wikitable"
!Клеммник
!клеммник
!Имя IIO устройства
!Канал АЦП
!Делитель
|-
|-
|A1
|A1
|a1-volt
|
| rowspan="3" |88k7, 10k
|-
|-
|A2
|A2
|a2-volt
|
|-
|-
|A3
|A3
|a3-volt
|
|-
|-
|Vin
|Vin
|vin-volt
|
|200k, 12k
|-
|-
|5Vout
|
|33k, 12k
|}
|}


== Ножки для внутреннего использования ==
== Ножки для внутреннего использования ==
{|  border="1" class="wikitable"
! Метка (label)|| Примечание
|-
| BUZZER ||
|-
| Red LED || rowspan="2" | [[Control_led_indicator_WB | Управление индикатором]]
|-
| Green LED
|-
| W1 UP ||
|-
| W2 UP ||
|-
| Pushbutton ||
|-
| USB0 ON ||
|-
| Wi-Fi ON ||
|-
| 5VOut ON ||
|-
| VOut ON ||
|-
| RS-485-1 Termination ||
|-
| RS-485-1 Failsafe ||
|-
| RS-485-2 Termination ||
|-
| RS-485-2 Failsafe ||
|-
|}
== Расположение данных на внутреннем накопителе ==
{| class="wikitable"
|- style="font-weight:bold; text-align:center;"
! style="font-family:'Courier New', Courier, monospace !important;" | Offset (in bytes)
!
!
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00000000
| rowspan="5" style="text-align:center;" | MBR
| rowspan="2" style="background-color:#fd6864;" | Device-specific factory data
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000000D9
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000001BE
| rowspan="2" | Partition table
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000001FE
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000001FF
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00002000
| rowspan="2" | Bootloader
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00087fff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00088000
| rowspan="2" | Bootloader environment
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000a7fff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000fc000
| rowspan="2" style="background-color:#fd6864;" | Device-specific factory data<br /><br />Factory DT overlay with revision,<br />batch, adc and crystal calibration data<br />and so on
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x000fffff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00100000
| rowspan="4" style="background-color:#fd6864;" | /dev/mmcblk0p1<br />Device-specific factory data
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x00500000
| rowspan="2" style="background-color:#fd6864;" | hiddenfs<br /><br />Ext3 filesystem, currently holding device-specific<br />cryptographic certificates
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x005fffff
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x010fffff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x01100000
| rowspan="2" | /dev/mmcblk0p2<br />Rootfs partition
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x410fffff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x41100000
| rowspan="2" | /dev/mmcblk0p3<br />Rootfs partition
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x810fffff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x81200000
| rowspan="2" | /dev/mmcblk0p5<br />Swap partition
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x911fffff
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | 0x91300000
| rowspan="2" | /dev/mmcblk0p6<br />/mnt/data partition
|
|-
| style="font-family:'Courier New', Courier, monospace !important;" | end
|
|}

Версия 12:54, 21 мая 2022

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

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