Мини-компьютеры/периферия/GPIO: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 29: Строка 29:




=== Советы начинающему пользователю по выбору железа ===
=== Советы начинающему пользователю по выбору rtc clock ===


В продаже есть множество готовых модулей rtc clock для Arduino, Raspberry Pi и т.д. от 50р и выше.
В продаже есть множество готовых модулей rtc clock для Arduino, Raspberry Pi и т.д. от 50р и выше.
Строка 67: Строка 67:
<br>
<br>


=== Подключение i2c rtc clock ===
=== Статус поддержки i2c rtc clock ===


В ядре поддерживаются практически все популярные микросхемы i2c rtc clock.
В ядре поддерживаются практически все популярные микросхемы i2c rtc clock.
Однако их настройка требует некоторых телодвижений.
Однако их настройка требует некоторых телодвижений.


==== тестирование подключения i2c rtc clock ====
=== тестовое подключение i2c rtc clock ===


К примеру, рассмотрим пробное подключение модуля с микросхемой часов pcf8563
К примеру, рассмотрим пробное подключение модуля с микросхемой часов pcf8563
Строка 112: Строка 112:
можно легко найти в интернет.
можно легко найти в интернет.


==== Настройка системы для i2c rtc clock ====
=== Настройка системы для i2c rtc clock ===


Тонкость настройки системы для i2c rtc clock в том, чтобы
Тонкость настройки системы для i2c rtc clock в том, чтобы
Строка 175: Строка 175:
С такими настройками время выставляется на раннем этапе загрузки.
С такими настройками время выставляется на раннем этапе загрузки.


== модуль TFT LCD (с тачскрином) ==
== модуль TFT LCD (опционально с тачскрином) ==


Представляет собой плату, на которой распаян TFT экран,
Представляет собой плату, на которой распаян TFT экран,
Строка 207: Строка 207:
с драйвером fbturbo,
с драйвером fbturbo,
под которыми запускается обычное linux приложение.
под которыми запускается обычное linux приложение.
=== Советы начинающему пользователю по выбору железа ===
* интерфейс подключения - SPI, если одноплатник с GPIO гребенкой формата Raspberry PI.
дешевое решение:
* если если рабочий стол на экран не нужен, достаточно выводить окошко со статусом (темрературой, загрузкой, ...)
то модуль SPI tft 1 низкого разрешения (1.3'' 240X240 - $2.5)
* если нужен рабочий стол, то нужны размеры от 2.8'' и разрешение от 320X240.
- готовое решение (10$) c явной поддержкой Raspberry Pi (продавец предоставляет настройки для fbtft, либо клон waveshare модуля)
Модули с подключением по hdmi на порядок дороже. Их не стоит покупать, если вы не планируете
использовать одноплатник как планшет-кирпич. За половину их цены можно купить качественный PVA
монитор б/у и переходник HDMI->DVI, либо, альтернативно, если под рукой есть нерабочий ноутбук
или монитор с целой матрицей, ее можно демонтировать и подключить отдельно к одноплатнику
через подходящий универсальный LVDS контролер (12-25$) (кроме матриц от старых телефонов/планшетов - там обычно портретное разрешение).


=== TFT panel ===
=== TFT panel ===
=== Статус поддержки TFT panel ===


Поддержка оборудования. Драйвер  
Поддержка оборудования. Драйвер  
Строка 229: Строка 247:
(для небольших разрешений, 320x240 и меньше). Большие разрешения упираются в пропускную способность SPI
(для небольших разрешений, 320x240 и меньше). Большие разрешения упираются в пропускную способность SPI
[https://www.willprice.dev/2017/09/16/adventures-with-tft-screens-for-raspberry-pi.html (на 480x320 на стандартной частоте работы SPI было 4fps, разгон SPI дал 7+fps)].
[https://www.willprice.dev/2017/09/16/adventures-with-tft-screens-for-raspberry-pi.html (на 480x320 на стандартной частоте работы SPI было 4fps, разгон SPI дал 7+fps)].
=== тестовое подключение i2c rtc clock ===


Для тестирования  
Для тестирования  
Строка 235: Строка 255:


Для настройки в ALT прописываем опции fbtft в /etc/modprobe.d/
Для настройки в ALT прописываем опции fbtft в /etc/modprobe.d/


=== тачскрин ===
=== тачскрин ===
Строка 246: Строка 265:
которые подключают экран через HDMI, а  
которые подключают экран через HDMI, а  
через GPIO получают питание и подключают тачскрин.
через GPIO получают питание и подключают тачскрин.
=== Советы начинающему пользователю по выбору железа ===
из дешевых вариантов:
* интерфейс подключения - SPI
* явная поддержка Raspberry Pi (продавец предоставляет настройки для fbtft, либо клон waveshare модуля)
* разрешение 320x240


[[Категория:Hardware]]
[[Категория:Hardware]]
[[Категория:HCL]]
[[Категория:HCL]]
[[Категория:Мини-компьютеры]]
[[Категория:Мини-компьютеры]]

Версия от 15:35, 19 августа 2019

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Настройка систем ALT Linux для поддержки периферии к одноплатным и другим мини-компьютерам, которая подключается/подпаивается к разъемам/контактам на плате.


Gnome-dialog-warning.svg Внимание:

Страница предназначена для обсуждения настройки систем ALT Linux. Пожалуйста, не указывайте здесь 1) несистемную периферию (датчики и т.д.), работа с которой идет от пользователя и не требует настройки системы. 2) схематику подключения для конкретных плат.


Часы реального времени.

Pcf8563-rtc.jpg

Много одноплатных компьютеров не имеет встроенных часов (rtc clock). Но можно подключить готовый модуль с отсеком для батарейки и микросхемой rtc clock, как правило, подключаемой по шине I2C.


Советы начинающему пользователю по выбору rtc clock

В продаже есть множество готовых модулей rtc clock для Arduino, Raspberry Pi и т.д. от 50р и выше. Модуль можно спаять и самостоятельно, для винтажности взяв отсек для батарейки и часовой кварц со старой нерабочей материнки (кварцы там обычно ставили точнее, чем ширпотреб на готовых модулях). Если нужно качество и точность, я бы рекомендовал модуль на микросхеме DS3231. В общем случае, при выборе модуля для одноплатного компьютера желательно, чтобы

  • модуль мог работать от питания 3.3V (выводы GPIO одноплатников, того же Raspberry Pi, не толерантны к 5V). Это микросхемы DS3231, DS1302, pcf8563, ...
  • на модуле либо не было подтягивающих резисторов к линиям SDA/SCL, либо их можно было легко отключить джамперами.

Обычно в одноплатнике на линии i2c уже есть подтягивающие резисторы к 3.3V, поэтому в модуле часов подтягивающие резисторы не нужны.

Gnome-dialog-warning.svg
Внимание: при подключении 5V модуля rtc clock для Arduino отключите подтягивающие резисторы с SDA/SCL на 5V!

Нужно быть осторожными с готовыми модулями для Arduino на микросхеме DS1307. Они могут соблазнять дешевизной и изобилием предложений. Сама по себе микросхема DS1307 питается от 5 вольт, но общается с одноплатником по шине I2C сигналами с уровнем 30%VDD (Low) и 70%VDD (High), т.е. не больше 3.5V. Таким образом, ее можно безболезненно подключать к выводам, не толерантным к 5V. Но! на плате модуля для Arduino могут быть распаяны подтягивающие резисторы (4K7) к 5V. Через них 5V придет на входы SoC одноплатника. Обычно это не смертельно. Резисторы 4K7 ограничивают ток до 10мА, плюс в SoC на входах может быть встроенная защита от перенапряжения. Но это нештатный режим, ведущий со временем к деградации чипа. [1] Это как в дешевых светодиодных лампочках недобросовестные производители делают из 7W 10W, повышая напряжение на светодиодах, что резко сокращает срок их службы. Поэтому для постоянного подключения к одноплатнику такой модуль нужно доработать, выпаяв из него подтягивающие резисторы.

Пример доработки модуля TinyRTC для Arduino: TinyRTCArduinoShield.jpg


Статус поддержки i2c rtc clock

В ядре поддерживаются практически все популярные микросхемы i2c rtc clock. Однако их настройка требует некоторых телодвижений.

тестовое подключение i2c rtc clock

К примеру, рассмотрим пробное подключение модуля с микросхемой часов pcf8563 к шине i2c №1 (/dev/i2c-1).

# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

Видим, что устройство доступно на шине №1 (опция -y 1) с адресом 0x51. Выполняем команду

# echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device

после чего появится устройство /dev/rtc0.

  1. dmesg | grep rtc
[   18.259456] rtc-pcf8563 1-0051: registered as rtc0
# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

теперь i2cdetect по адресу 0x51 показывет UU, что означает, что данное устройство открыто ядром и недоступно пользователю.

Для практически любого модуля часов указания по тестовому подключению можно легко найти в интернет.

Настройка системы для i2c rtc clock

Тонкость настройки системы для i2c rtc clock в том, чтобы при загрузке подключить часы и выставить время как можно раньше, чтобы получить правильное время в логах и отсутствие странного в /etc/adjtime.

В идеале, ядро должно увидеть часы прямо при старте ядра. Этот идеал достижим с помощью механизма Device Tree и Device Tree Overlay.

В отсутствие BIOS/UEFI механизм Device_Tree позволяет использовать одно и то же универсальное ядро, подгружая ему загрузчиком файл .dtb (Device Tree Binary) с описанием устройств конкретной платы. Более того, в Device_Tree есть возможность менять конфигурацию платы с помощью механизма Device Tree Overlay. Варианты конфигурации можно скомпилировать в файлы .dtbo и загрузчик u-boot при загрузке объединит файл .dtb с файлами .dtbo и получит текущую конфигурацию платы, которую передаст ядру. Device Tree можно условно сравнить с BIOS, а Overlays - с меню настроек BIOS.

В Raspbian имеется огромный набор оверлеев под различную GPIO периферию. для указанного выше модуля rtc в Raspbian достаточно добавить в /boot/config.txt

dtoverlay=i2c-rtc,pcf8563

и система загрузится как на машине со встроенными часами. кроме как в загрузчик, собственно в систему никаких настроек вносить не надо. К сожалению, это все богатство пока не входит в vanilla kernel, и сам механизм Device_Tree еще в разработке[2].

Таким образом, в ALT файл оверлея придется откуда-то взять, адаптировать при необходимости, оттранслировать в .dtbo. Далее, в ALT конфигурации загрузчика не предусмотрена поддержка оверлеев, надо смотреть, как сделано, например, в armbian[3].

Поэтому сейчас в ALT, к сожалению, проще править настройки. достаточно написать обработчики событий появления устройств i2c и rtc. казалось бы, для модуля из примера выше достаточно

KERNEL=="i2c-1", SUBSYSTEM=="i2c-dev", ACTION=="add", RUN+="/bin/sh -c 'echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device'"
KERNEL=="rtc0", SUBSYSTEM=="rtc", ACTION=="add", RUN+="/sbin/hwclock -s --utc -f /dev/rtc0"

но udev запускает скрипты без CAP_SYS_TIME, пришлось hwclock выносить в systemd service:

$ cat /etc/udev/rules.d/10-i2c-rtc.rules
KERNEL=="i2c-1", SUBSYSTEM=="i2c-dev", ACTION=="add", RUN+="/bin/sh -c 'echo pcf8563 0x51 > /sys/class/i2c-adapter/i2c-1/new_device'"
KERNEL=="rtc0", SUBSYSTEM=="rtc", SUBSYSTEMS=="i2c", TAG+="systemd", ENV{SYSTEMD_WANTS}="i2c-rtc-hwclock.service"
$ cat /etc/systemd/system/i2c-rtc-hwclock.service
[Install]
RequiresMountsFor=/usr/share/zoneinfo

[Unit]
Description=Set system time from i2c hardware real time clock
CapabilityBoundingSet=CAP_SYS_TIME
Before=time-set.target getty.target chrony.service ntpd.service systemd-timedated.service
WantedBy=time-set.target getty.target chrony.service ntpd.service systemd-timedated.service

[Service]
Type=oneshot
ExecStart=/sbin/hwclock -s --utc

С такими настройками время выставляется на раннем этапе загрузки.

модуль TFT LCD (опционально с тачскрином)

Представляет собой плату, на которой распаян TFT экран, опционально с тачскрином (тогда на плате также распаян контроллер тачскрина) и, возможно, другой периферией: кнопками, слотом для SD карты и т.д. Для подключения к микроконтроллеру на плате есть одинарная/двойная гребенка (PLS/PLD) либо PBD (для подключения к гребенке). Популярные разьемы подключения рассчитаны на Arduino Uno, Arduino Mega, Raspberry Pi, отладочные платы для микроконтроллеров STM32.

TFT экран, подключаемый к GPIO, не является альтернативой нормальному монитору, подключаемому через HDMI. Как монитор, он имеет такие недостатки, как

  • (обычно) низкое разрешение (320x240, 480x320)
  • в отсутствие eeprom цветовой профиль взять негде,

поэтому скорее всего по умолчанию будут искаженные цвета, и гамма-коррекцию нужно будет подбирать вручную;

  • (обычно) невысокий fps.
  • (обычно) драйвер фреймбуфера более кривой и глючный, чем для VideoCore.

Это нишевое решение для панели отображения состояния/управления. Достоинства:

  • компактность
  • низкая цена - если не подошло, не жалко выбросить
  • бонусом обычно идет touchscreen.
  • простота вывода изображения.

не нужно явно программировать вывод состояния на экран. драйвер ядра дает фреймбуфер /dev/fb1, на нем запускаются обычный X (или Wayland), с драйвером fbturbo, под которыми запускается обычное linux приложение.

Советы начинающему пользователю по выбору железа

  • интерфейс подключения - SPI, если одноплатник с GPIO гребенкой формата Raspberry PI.
дешевое решение: 
  • если если рабочий стол на экран не нужен, достаточно выводить окошко со статусом (темрературой, загрузкой, ...)

то модуль SPI tft 1 низкого разрешения (1.3 240X240 - $2.5)

  • если нужен рабочий стол, то нужны размеры от 2.8 и разрешение от 320X240.

- готовое решение (10$) c явной поддержкой Raspberry Pi (продавец предоставляет настройки для fbtft, либо клон waveshare модуля)

Модули с подключением по hdmi на порядок дороже. Их не стоит покупать, если вы не планируете использовать одноплатник как планшет-кирпич. За половину их цены можно купить качественный PVA монитор б/у и переходник HDMI->DVI, либо, альтернативно, если под рукой есть нерабочий ноутбук или монитор с целой матрицей, ее можно демонтировать и подключить отдельно к одноплатнику через подходящий универсальный LVDS контролер (12-25$) (кроме матриц от старых телефонов/планшетов - там обычно портретное разрешение).

TFT panel

Статус поддержки TFT panel

Поддержка оборудования. Драйвер fbtft входит в ядро еще с версии 3.35. При правильной настройке позволяет подключать достаточно большое число tft панелей с Display Bus Interface (DBI), подключаемый по интерфейсам

  • SPI (четыре управляющих сигнала)
  • Motorola 6800 (четыре управляющих сигнала и параллельная шина данных шириной 8/16 бит)
  • Intel 8080 (четыре управляющих сигнала и параллельная шина данных шириной 8/16 бит)

контроллер tft панели может поддерживать несколько интерфейсов, но на плате tft модуля будет выведен обычно только 1 из них.

На платах форм-фактора RaspberryPi для последних двух интерфейсов не получится задействовать DMA (требуется 2 полных 8-битных порта ввода-вывода, разведенных на разъемы). Плату tft модуля с параллельной шиной данных придется подключать в режиме GPIO (bitbang, программно выставлять биты на каждый пин gpio по отдельности, что не добавляет скорости работы). соответствие пинов и битов задается опцией fbtft, к примеру

gpios=reset:17,dc:2,wr:3,cs:27,db00:21,db01:20,db02:16,db03:12,db04:1,db05:7,db06:8,db07:25,db08:26,db09:19,db10:13,db11:6,db12:5,db13:0,db14:11,db15:9

Поэтому для форм-фактора RaspberryPi оптимальным является подключение по шине SPI (для небольших разрешений, 320x240 и меньше). Большие разрешения упираются в пропускную способность SPI (на 480x320 на стандартной частоте работы SPI было 4fps, разгон SPI дал 7+fps).

тестовое подключение i2c rtc clock

Для тестирования

modprobe fbtft <options>

создаст устройство /dev/fb1.

Для настройки в ALT прописываем опции fbtft в /etc/modprobe.d/

тачскрин

xpt2046 = ads7846

https://github.com/notro/fbtft/wiki/Touchpanel

Также есть модули для Raspberry Pi от Waveshare и их многочисленные китайские клоны, которые подключают экран через HDMI, а через GPIO получают питание и подключают тачскрин.