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

Материал из Wiren Board
(не показано 27 промежуточных версий 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"
! Функция || Примечание
|-
! colspan="2" | MOD1
|-
| MOD1 RTS || 
|-
| MOD1 TX ||
|-
| MOD1 RX ||
|-
! colspan="2" | MOD2
|-
| MOD2 RTS ||
|-
| MOD2 TX ||
|-
| MOD2 RX ||
|-
! colspan="2" | MOD3
|-
| MOD3 RTS ||
|-
| MOD3 TX ||
|-
| MOD3 RX ||
|-
! colspan="2" | MOD4
|-
| MOD4 RTS ||
|-
| MOD4 TX ||
|-
| MOD4 RX ||
|-
| MOD4 SPI MOSI ||
|-
| MOD4 SPI MISO ||
|-
| MOD4 SPI CLK ||
|-
| MOD4 SPI CS ||
|-
! colspan="2" | GSM (WBC)
|-
| GSM Status  || Modem power status (input)
|-
| GSM PWRKEY  || Modem PWRKEY (output)
|-
| GSM ON  || On/OFF 5 V
|-
| SIM_SELECT  || 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"
!Клеммник
!Имя IIO устройства
|-
|A1
|a1-volt
|-
|A2
|a2-volt
|-
|A3
|a3-volt
|-
|Vin
|vin-volt
|-
|}


== Каналы АЦП ==
== Ножки для внутреннего использования ==
== Ножки для внутреннего использования ==
{|  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:14, 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

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

Каналы АЦП

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