Мини-компьютеры/периферия/GPIO: различия между версиями
(не показано 40 промежуточных версий этого же участника) | |||
Строка 11: | Строка 11: | ||
| '''Внимание:''' | | '''Внимание:''' | ||
Страница предназначена для обсуждения настройки систем ALT Linux. | Страница предназначена для обсуждения настройки систем ALT Linux. | ||
Пожалуйста, не указывайте здесь | Пожалуйста, не указывайте здесь | ||
1) | 1) несистемную периферию (датчики и т.д.), | ||
работа с | работа с которой идет от пользователя | ||
и не требует | и не требует настройки системы. | ||
2) | 2) схематику подключения для конкретных плат. | ||
|- | |||
|} | |||
== переходник USB to Serial == | |||
[[Изображение:UART_TTL_perehodnik.jpg|200px|right]] | |||
Позволяет работать с платой без ее подключения к монитору, | |||
что особенно удобно при включении / загрузке (пока нет сети) | |||
и в случае проблем. | |||
Подробнее см. | |||
<ref>https://habr.com/ru/post/109395/</ref> | |||
=== Советы начинающему пользователю по выбору железа === | |||
Поддержка такого железа полная, | |||
подойдет практически любой переходник usb2serial (может при продаже называться по разному: USB to UART/TTL/Serial). | |||
поэтому не имеет смысла тратить на них больше 0.5-1$. | |||
=== пробное подключение === | |||
Контакты на плате переходника обычно подписаны. | |||
Нам нужно только 3 контакта: TX, RX, GND (-, земля). | |||
подключаем GND к GND одноплатника, | |||
а линии данных перекрещиваем: | |||
TX к RX, | |||
RX к TX. | |||
Контакты переходника 5V, 3.3V ни в коем случае не подключаем! | |||
Они используются для запитывания подключаемой платы, если у той нет своего питания. | |||
Но в нашем случае одноплатник уже со своим блоком питания 10-15W, при соединении питаний | |||
легко можно сжечь USB порт, куда втыкаем переходник! | |||
{| style="border:1px solid #AAA; background:#F9F9F9; margin: 0 0 1em 1em; padding:.2em; text-align:center;" class=noprint | |||
|- | |||
|[[Image:Gnome-dialog-warning.svg]] | |||
|- | |- | ||
| '''Внимание:''' контакты переходника 5V, 3.3V не подключаем! | |||
|} | |} | ||
На одноплатнике устройство tty на GPIO может называться, к примеру, | |||
{{path|/dev/ttyS0}} | |||
{{path|/dev/ttyAMA0}} | |||
Втыкаем переходник в большой компьютер. | |||
Должно появиться устройство tty, к примеру, | |||
{{path|/dev/ttyUSB0}}. | |||
Запускаем программу - терминал на большой компьютере и | |||
программу - терминал на одноплатнике, | |||
указывая в опциях | |||
baudrate 115200. | |||
databits 8 | |||
flow control none. | |||
обмениваемся данными. | |||
'''Замечание.'''<br> | |||
старые древние программы вроде minicom имеют исторически сложившиеся настройки по умолчанию | |||
вроде baudrate 9600. Это имело смысл для RS-232 COM соединений длинными кабелями, | |||
чтобы бороться с наводками и помехами, кроме того, 50 лет назад и типичная частота работы | |||
процессора была не та, что сегодня. | |||
При подключении через GPIO гребенку собственно протокол UART используется только | |||
до микросхемы usb2serial, т. е., практически, 10-20 см. соединительных проводов, | |||
далее данные идут по USB. Поэтому любой, самый дешевый переходник справляется со скоростью 115200 бод. | |||
а большинство поддерживают скорости до 0,5-1 Mbod. | |||
При этом для комфортной работы с ncurses-приложениями (mc) желательна скорость не менее 115200 бод. | |||
Поэтому я лично использую tio, так как у него удобное умолчание baudrate 115200/ databits 8/ flow control none, | |||
что упрощает запуск - сразу пишу без опций | |||
$ tio /dev/ttyUSB0 | |||
=== Настройка системы === | |||
Основная страница: [[SerialLogin]]. | |||
== Часы реального времени. == | == Часы реального времени. == | ||
Строка 28: | Строка 98: | ||
Но можно подключить готовый модуль с отсеком для батарейки и | Но можно подключить готовый модуль с отсеком для батарейки и | ||
микросхемой rtc clock, как правило, подключаемой по шине I2C. | микросхемой rtc clock, как правило, подключаемой по шине I2C. | ||
=== Советы начинающему пользователю по выбору rtc clock === | |||
В продаже есть множество готовых модулей rtc clock для Arduino, Raspberry Pi и т.д. от 50р и выше. | |||
Модуль можно спаять и самостоятельно, для винтажности взяв отсек для батарейки и часовой кварц | |||
со старой нерабочей материнки (кварцы там обычно ставили точнее, чем ширпотреб на готовых модулях). | |||
Если нужно качество и точность, я бы рекомендовал модули на микросхеме DS3231 | |||
[https://www.sigmdel.ca/michel/ha/rpi/rtc_eeprom_module_en.html обзор и подключение к Raspberry Pi]. | |||
Большой модуль ZS-042 DS3231 RTC можно [https://www.sigmdel.ca/michel/ha/rpi/rtc_eeprom_module_02_en.html#battery доработать ], | |||
сбив паяльником резистор цепи подзарядки аккумулятора (не страшно при питании от 3.3V, при подключении к Arduino 5V со временем выводит из строя батарейку). | |||
В общем случае, при выборе модуля для одноплатного компьютера желательно, чтобы | |||
* модуль мог работать от питания 3.3V (выводы GPIO одноплатников, того же Raspberry Pi, не толерантны к 5V). Это микросхемы DS3231, DS1302, pcf8563, ... | |||
* на модуле либо не было подтягивающих резисторов к линиям SDA/SCL, либо их можно было легко отключить джамперами. | |||
Обычно в одноплатнике на линии i2c уже есть подтягивающие резисторы к 3.3V, | |||
поэтому в модуле часов подтягивающие резисторы не нужны. | |||
{| style="border:1px solid #AAA; background:#F9F9F9; margin: 0 0 1em 1em; padding:.2em; text-align:center;" class=noprint | |||
|- | |||
|[[Image:Gnome-dialog-warning.svg]] | |||
|- | |||
| '''Внимание:''' при подключении 5V модуля rtc clock для Arduino отключите подтягивающие резисторы с SDA/SCL на 5V! | |||
|} | |||
Нужно быть осторожными с готовыми модулями для Arduino на микросхеме DS1307. | |||
Они могут соблазнять дешевизной и изобилием предложений. | |||
Сама по себе микросхема DS1307 питается от 5 вольт, но общается с одноплатником по шине I2C | |||
сигналами с уровнем 30%VDD (Low) и 70%VDD (High), т.е. не больше 3.5V. | |||
(В общем случае 5 вольтовые микросхемы c i2c могут требовать и 80%VDD (High), т.е. 4V., т.е. не работать | |||
при прямом подключении, только через logic level converter <ref>https://electronic-products-design.com/geek-area/communications/i2c/i2c-bus-interfacing</ref>). | |||
Таким образом, ее можно безболезненно подключать к выводам, не толерантным к 5V. | |||
Но! на плате модуля для Arduino могут быть распаяны подтягивающие резисторы (4K7) к 5V. | |||
Через них 5V придет на входы SoC одноплатника. Обычно это не смертельно. | |||
Резисторы 4K7 ограничивают ток до 10мА, плюс в SoC на входах может быть встроенная защита | |||
от перенапряжения. Но это нештатный режим, ведущий со временем к деградации чипа. | |||
<ref>http://electromost.com/news/raspberry_pi_dlja_domashnej_avtomatizacii_chasy_realnogo_vremeni/2015-09-13-135</ref> | |||
Это как в дешевых светодиодных лампочках недобросовестные производители | |||
делают из 7W 10W, повышая напряжение на светодиодах, что резко сокращает срок их службы. | |||
Поэтому для постоянного подключения к одноплатнику такой модуль нужно доработать, выпаяв из него подтягивающие резисторы. | |||
Пример доработки модуля TinyRTC для Arduino: | |||
[[Изображение:TinyRTCArduinoShield.jpg]] | |||
<br> | |||
=== Статус поддержки i2c rtc clock === | |||
В ядре поддерживаются практически все популярные микросхемы i2c rtc clock. | В ядре поддерживаются практически все популярные микросхемы i2c rtc clock. | ||
Однако их настройка требует некоторых телодвижений. | Однако их настройка требует некоторых телодвижений. | ||
=== | === тестовое подключение i2c rtc clock === | ||
К примеру, рассмотрим пробное подключение модуля с микросхемой часов pcf8563 | К примеру, рассмотрим пробное подключение модуля с микросхемой часов pcf8563 | ||
Строка 105: | Строка 223: | ||
оттранслировать в {{term|.dtbo}}. Далее, в ALT конфигурации загрузчика | оттранслировать в {{term|.dtbo}}. Далее, в ALT конфигурации загрузчика | ||
не предусмотрена поддержка оверлеев, надо смотреть, как сделано, | не предусмотрена поддержка оверлеев, надо смотреть, как сделано, | ||
например, в armbian<ref>https://docs.armbian.com/User-Guide_Allwinner_overlays/ | например, в armbian<ref>https://docs.armbian.com/User-Guide_Allwinner_overlays</ref>. | ||
Поэтому сейчас в ALT, к сожалению, проще править настройки. | Поэтому сейчас в ALT, к сожалению, проще править настройки. | ||
Строка 134: | Строка 252: | ||
С такими настройками время выставляется на раннем этапе загрузки. | С такими настройками время выставляется на раннем этапе загрузки. | ||
== модуль дисплея (TFT/IPS LCD, опционально с тачскрином) == | |||
Представляет собой плату, на которой распаян TFT/IPS экран, | |||
опционально с тачскрином (тогда на плате также распаян | |||
контроллер тачскрина) и, возможно, другой периферией: | |||
кнопками, слотом для SD карты и т.д. | |||
Для подключения к микроконтроллеру на плате есть одинарная/двойная гребенка (PLS/PLD) | |||
либо PBD (для подключения к гребенке). | |||
Популярные разьемы подключения рассчитаны на Arduino Uno, Arduino Mega, | |||
Raspberry Pi, отладочные платы для микроконтроллеров STM32. | |||
Естественно, если одноплатник с GPIO гребенкой формата Raspberry PI: raspberry pi, banana pi, orange pi,... | |||
то готовые модули для Raspberry Pi предпочтительнее. Это модули от Waveshare и их многочисленные китайские клоны. | |||
TFT экран, подключаемый к GPIO, не является альтернативой | |||
нормальному монитору, подключаемому через HDMI. | |||
Как монитор, он имеет такие недостатки, как | |||
* (обычно) низкое разрешение (320x240, 480x320) | |||
* в отсутствие eeprom цветовой профиль взять негде, | |||
поэтому скорее всего по умолчанию будут искаженные цвета, | |||
и гамма-коррекцию нужно будет подбирать вручную; | |||
* (обычно) невысокий fps. | |||
* (обычно) драйвер фреймбуфера более кривой и глючный, чем для VideoCore. | |||
Это нишевое решение для панели отображения состояния/управления. | |||
Достоинства: | |||
* компактность | |||
* низкая цена - если не подошло, не жалко выбросить | |||
* бонусом к более крупным экранам обычно идет touchscreen. | |||
* простота вывода изображения. | |||
не нужно явно программировать вывод состояния на экран. | |||
драйвер ядра дает фреймбуфер /dev/fb1, | |||
на нем запускаются обычный X (или Wayland), | |||
с драйвером fbturbo, | |||
под которыми запускается обычное linux приложение. | |||
Также есть модули для Raspberry Pi, которые подключают экран через HDMI, а | |||
через GPIO разьем получают питание и подключают по шине SPI ресзистивный тачскрин. | |||
Еще более дорогие модули GPIO разьем не используют: | |||
подключают экран через HDMI и имеют емкостный тачскрин с мультитач, | |||
который подключают под USB, здесь не рассматриваются, так как это уже не GPIO. | |||
=== Советы начинающему пользователю по выбору железа === | === Советы начинающему пользователю по выбору железа === | ||
Готовый модуль с в виде платы с прикрепленным экраном и разведенной гребенкой контактов. | |||
Если одноплатник с GPIO гребенкой формата Raspberry PI: raspberry pi, banana pi, orange pi,... | |||
* интерфейс подключения - SPI. | |||
дешевое решение: | |||
* если рабочий стол на экран не нужен, достаточно выводить окошко со статусом (темрературой, загрузкой, ...) то модуль низкого разрешения без тачскрина (1.8' ' 240X160 - $3). | |||
* если это панель управления, то нужны размеры от 2.4' ', разрешение от 320X240, и тачскрин. | |||
* если нужна возможность открыть рабочий стол, то нужны размеры от 2.8' ' и разрешение от 320X240. Готовое решение - 10$ c явной поддержкой Raspberry Pi (продавец предоставляет настройки для fbtft, либо клон waveshare модуля) | |||
Модули с подключением по hdmi на порядок дороже. Их не стоит покупать, если вы не планируете | |||
использовать одноплатник как планшет-кирпич. За половину их цены можно купить качественный PVA | |||
монитор б/у и переходник HDMI->DVI, либо, альтернативно, если под рукой есть нерабочий ноутбук | |||
или монитор с целой матрицей, ее можно демонтировать и подключить отдельно к одноплатнику | |||
через подходящий универсальный HDMI-> LVDS конвертер (12-25$) (кроме матриц от старых телефонов и большинства планшетов - там обычно портретное разрешение). | |||
=== Статус поддержки === | |||
==== экран ==== | |||
Поддержка оборудования. Драйвер | |||
[https://github.com/notro/fbtft/wiki 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 | |||
[https://www.willprice.dev/2017/09/16/adventures-with-tft-screens-for-raspberry-pi.html (на 480x320 на стандартной частоте работы SPI было 4fps, разгон SPI дал 7+fps)]. | |||
==== тачскрин ==== | |||
резистивный тачскрин (касание стилусом) на контроллере xpt2046/ads7846 | |||
с подключением по шине SPI | |||
поддерживается модулем ядра ads7846 | |||
подробнее о поддержке см. | |||
https://github.com/notro/fbtft/wiki/Touchpanel | |||
=== тестовое подключение модуля дисплея === | |||
==== экран ==== | |||
Для тестирования | |||
modprobe fbtft <options> | |||
создаст устройство /dev/fb1. | |||
... продолжение следует ... | |||
Для настройки в ALT прописываем опции fbtft в /etc/modprobe.d/ | |||
==== тачскрин ==== | |||
... | |||
== | == 1-wire == | ||
= | /etc/modules | ||
w1-gpio gpiopin=27 | |||
Текущая версия от 03:32, 11 ноября 2020
Настройка систем ALT Linux для поддержки
периферии к одноплатным и другим мини-компьютерам,
которая подключается/подпаивается к разъемам/контактам на плате.
переходник USB to Serial
Позволяет работать с платой без ее подключения к монитору, что особенно удобно при включении / загрузке (пока нет сети) и в случае проблем. Подробнее см. [1]
Советы начинающему пользователю по выбору железа
Поддержка такого железа полная, подойдет практически любой переходник usb2serial (может при продаже называться по разному: USB to UART/TTL/Serial). поэтому не имеет смысла тратить на них больше 0.5-1$.
пробное подключение
Контакты на плате переходника обычно подписаны. Нам нужно только 3 контакта: TX, RX, GND (-, земля). подключаем GND к GND одноплатника, а линии данных перекрещиваем:
TX к RX, RX к TX.
Контакты переходника 5V, 3.3V ни в коем случае не подключаем! Они используются для запитывания подключаемой платы, если у той нет своего питания. Но в нашем случае одноплатник уже со своим блоком питания 10-15W, при соединении питаний легко можно сжечь USB порт, куда втыкаем переходник!
На одноплатнике устройство tty на GPIO может называться, к примеру, /dev/ttyS0 /dev/ttyAMA0
Втыкаем переходник в большой компьютер. Должно появиться устройство tty, к примеру, /dev/ttyUSB0.
Запускаем программу - терминал на большой компьютере и программу - терминал на одноплатнике, указывая в опциях
baudrate 115200. databits 8 flow control none.
обмениваемся данными.
Замечание.
старые древние программы вроде minicom имеют исторически сложившиеся настройки по умолчанию
вроде baudrate 9600. Это имело смысл для RS-232 COM соединений длинными кабелями,
чтобы бороться с наводками и помехами, кроме того, 50 лет назад и типичная частота работы
процессора была не та, что сегодня.
При подключении через GPIO гребенку собственно протокол UART используется только
до микросхемы usb2serial, т. е., практически, 10-20 см. соединительных проводов,
далее данные идут по USB. Поэтому любой, самый дешевый переходник справляется со скоростью 115200 бод.
а большинство поддерживают скорости до 0,5-1 Mbod.
При этом для комфортной работы с ncurses-приложениями (mc) желательна скорость не менее 115200 бод.
Поэтому я лично использую tio, так как у него удобное умолчание baudrate 115200/ databits 8/ flow control none, что упрощает запуск - сразу пишу без опций
$ tio /dev/ttyUSB0
Настройка системы
Основная страница: SerialLogin.
Часы реального времени.
Много одноплатных компьютеров не имеет встроенных часов (rtc clock). Но можно подключить готовый модуль с отсеком для батарейки и микросхемой rtc clock, как правило, подключаемой по шине I2C.
Советы начинающему пользователю по выбору rtc clock
В продаже есть множество готовых модулей rtc clock для Arduino, Raspberry Pi и т.д. от 50р и выше. Модуль можно спаять и самостоятельно, для винтажности взяв отсек для батарейки и часовой кварц со старой нерабочей материнки (кварцы там обычно ставили точнее, чем ширпотреб на готовых модулях). Если нужно качество и точность, я бы рекомендовал модули на микросхеме DS3231 обзор и подключение к Raspberry Pi. Большой модуль ZS-042 DS3231 RTC можно доработать , сбив паяльником резистор цепи подзарядки аккумулятора (не страшно при питании от 3.3V, при подключении к Arduino 5V со временем выводит из строя батарейку).
В общем случае, при выборе модуля для одноплатного компьютера желательно, чтобы
- модуль мог работать от питания 3.3V (выводы GPIO одноплатников, того же Raspberry Pi, не толерантны к 5V). Это микросхемы DS3231, DS1302, pcf8563, ...
- на модуле либо не было подтягивающих резисторов к линиям SDA/SCL, либо их можно было легко отключить джамперами.
Обычно в одноплатнике на линии i2c уже есть подтягивающие резисторы к 3.3V, поэтому в модуле часов подтягивающие резисторы не нужны.
Нужно быть осторожными с готовыми модулями для Arduino на микросхеме DS1307. Они могут соблазнять дешевизной и изобилием предложений. Сама по себе микросхема DS1307 питается от 5 вольт, но общается с одноплатником по шине I2C сигналами с уровнем 30%VDD (Low) и 70%VDD (High), т.е. не больше 3.5V. (В общем случае 5 вольтовые микросхемы c i2c могут требовать и 80%VDD (High), т.е. 4V., т.е. не работать при прямом подключении, только через logic level converter [2]). Таким образом, ее можно безболезненно подключать к выводам, не толерантным к 5V. Но! на плате модуля для Arduino могут быть распаяны подтягивающие резисторы (4K7) к 5V. Через них 5V придет на входы SoC одноплатника. Обычно это не смертельно. Резисторы 4K7 ограничивают ток до 10мА, плюс в SoC на входах может быть встроенная защита от перенапряжения. Но это нештатный режим, ведущий со временем к деградации чипа. [3] Это как в дешевых светодиодных лампочках недобросовестные производители делают из 7W 10W, повышая напряжение на светодиодах, что резко сокращает срок их службы. Поэтому для постоянного подключения к одноплатнику такой модуль нужно доработать, выпаяв из него подтягивающие резисторы.
Пример доработки модуля TinyRTC для Arduino:
Статус поддержки 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.
- 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 еще в разработке[4].
Таким образом, в ALT файл оверлея придется откуда-то взять, адаптировать при необходимости, оттранслировать в .dtbo. Далее, в ALT конфигурации загрузчика не предусмотрена поддержка оверлеев, надо смотреть, как сделано, например, в armbian[5].
Поэтому сейчас в 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/IPS LCD, опционально с тачскрином)
Представляет собой плату, на которой распаян TFT/IPS экран, опционально с тачскрином (тогда на плате также распаян контроллер тачскрина) и, возможно, другой периферией: кнопками, слотом для SD карты и т.д. Для подключения к микроконтроллеру на плате есть одинарная/двойная гребенка (PLS/PLD) либо PBD (для подключения к гребенке). Популярные разьемы подключения рассчитаны на Arduino Uno, Arduino Mega, Raspberry Pi, отладочные платы для микроконтроллеров STM32.
Естественно, если одноплатник с GPIO гребенкой формата Raspberry PI: raspberry pi, banana pi, orange pi,... то готовые модули для Raspberry Pi предпочтительнее. Это модули от Waveshare и их многочисленные китайские клоны.
TFT экран, подключаемый к GPIO, не является альтернативой нормальному монитору, подключаемому через HDMI. Как монитор, он имеет такие недостатки, как
- (обычно) низкое разрешение (320x240, 480x320)
- в отсутствие eeprom цветовой профиль взять негде,
поэтому скорее всего по умолчанию будут искаженные цвета, и гамма-коррекцию нужно будет подбирать вручную;
- (обычно) невысокий fps.
- (обычно) драйвер фреймбуфера более кривой и глючный, чем для VideoCore.
Это нишевое решение для панели отображения состояния/управления. Достоинства:
- компактность
- низкая цена - если не подошло, не жалко выбросить
- бонусом к более крупным экранам обычно идет touchscreen.
- простота вывода изображения.
не нужно явно программировать вывод состояния на экран. драйвер ядра дает фреймбуфер /dev/fb1, на нем запускаются обычный X (или Wayland), с драйвером fbturbo, под которыми запускается обычное linux приложение.
Также есть модули для Raspberry Pi, которые подключают экран через HDMI, а через GPIO разьем получают питание и подключают по шине SPI ресзистивный тачскрин.
Еще более дорогие модули GPIO разьем не используют: подключают экран через HDMI и имеют емкостный тачскрин с мультитач, который подключают под USB, здесь не рассматриваются, так как это уже не GPIO.
Советы начинающему пользователю по выбору железа
Готовый модуль с в виде платы с прикрепленным экраном и разведенной гребенкой контактов.
Если одноплатник с GPIO гребенкой формата Raspberry PI: raspberry pi, banana pi, orange pi,...
- интерфейс подключения - SPI.
дешевое решение:
- если рабочий стол на экран не нужен, достаточно выводить окошко со статусом (темрературой, загрузкой, ...) то модуль низкого разрешения без тачскрина (1.8' ' 240X160 - $3).
- если это панель управления, то нужны размеры от 2.4' ', разрешение от 320X240, и тачскрин.
- если нужна возможность открыть рабочий стол, то нужны размеры от 2.8' ' и разрешение от 320X240. Готовое решение - 10$ c явной поддержкой Raspberry Pi (продавец предоставляет настройки для fbtft, либо клон waveshare модуля)
Модули с подключением по hdmi на порядок дороже. Их не стоит покупать, если вы не планируете использовать одноплатник как планшет-кирпич. За половину их цены можно купить качественный PVA монитор б/у и переходник HDMI->DVI, либо, альтернативно, если под рукой есть нерабочий ноутбук или монитор с целой матрицей, ее можно демонтировать и подключить отдельно к одноплатнику через подходящий универсальный HDMI-> LVDS конвертер (12-25$) (кроме матриц от старых телефонов и большинства планшетов - там обычно портретное разрешение).
Статус поддержки
экран
Поддержка оборудования. Драйвер 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).
тачскрин
резистивный тачскрин (касание стилусом) на контроллере xpt2046/ads7846 с подключением по шине SPI поддерживается модулем ядра ads7846
подробнее о поддержке см. https://github.com/notro/fbtft/wiki/Touchpanel
тестовое подключение модуля дисплея
экран
Для тестирования
modprobe fbtft <options>
создаст устройство /dev/fb1.
... продолжение следует ...
Для настройки в ALT прописываем опции fbtft в /etc/modprobe.d/
тачскрин
...
1-wire
/etc/modules
w1-gpio gpiopin=27
- ↑ https://habr.com/ru/post/109395/
- ↑ https://electronic-products-design.com/geek-area/communications/i2c/i2c-bus-interfacing
- ↑ http://electromost.com/news/raspberry_pi_dlja_domashnej_avtomatizacii_chasy_realnogo_vremeni/2015-09-13-135
- ↑ https://archive.fosdem.org/2018/schedule/event/hwenablement_simplifying_soc_enablement_in_linux/
- ↑ https://docs.armbian.com/User-Guide_Allwinner_overlays