Rzyx Ledge
Rzyx Ledge
120 просмотров1 комментариев

Подключение дисплея SPI LCD ILI9341 к Repka Pi 3. Протокол GPIO SPI0 . Наложения дерева устройств.

Подключение дисплея SPI LCD ILI9341 к Repka Pi 3. Протокол GPIO SPI0 . Наложения дерева устройств. #

Из серии: "Мал, да удал".


Connecting SPI LCD ILI9341 Display to Repka Pi 3. GPIO SPI0 Protocol. Device Tree overlays.

From the series: "Small but mighty".


Хотелось бы выразить благодарность DySprozin aka xjmjk с его статьёй "Подключение дисплея ili9341 к Repka Pi" посредством патча (patch) и сборки нового дерева устройств.

Но как часто бывает когда появилось желание повторить ситуация поменялась и как оказалось в лучшую сторону. В Repka Pi появилась поддержка оверлеев наложения на дерева устройств.

Поиск источника вылился в ещё одну благодарность Anton c его статьёй - которая здесь: "кладезь команд и разъяснений"

А далее адаптация оверлеев под Repka Pi 3 с учётом всяких мелочей (таких как конкретизация в данном случае именно SPI0). С учётом правильно выбранного CS. Выбора оптимальных контактов GPIO, так как есть данные дисплеи и c Тачскрином - отдельным оверлеем в проекте. А также применение двух и более как однотипных так разнотипных oled и tft дисплеев. А именно: ST7789, ST7735, SSD1306. Так же на данном дисплее ili9341 есть в наличие слот для SD CARD (если кто-то будет использовать быть тому место). Ориентировка на GPIO Repka Pi 3.

С учётом этих факторов и были выбраны те контакты (pins), что на макетках и схемах ниже. После выбранного варианта оверлея копировать в блокнот, сохранить с названием предложенным вариантом над кодом с расширением dts

Далее его конвертировать в dtbo

dtc -I dts -O dtb путь/наозвание_файла.dts -o путь/наозвание_файла.dtbo

Размещаем в директорию с оверлеями /boot/overlays/ и прописываем в /boot/repkaEnv.txt Смотреть в разделе ресурса Repka Pi - Документация - Кофигурация устройств

Для удобного тестирования графики и прочего локально при подключённом HDMI дисплее (fb0), а ili9341 дисплей определяется (если всё установлено и соединено правильно) как fb1 и обращаться к нему следует из любых 6 (шести - от: Ctrl + Alt + F1 до Ctrl + Alt + F6) tty-сессий терминала. Вернутся в графический Ctrl + Alt + F7.

Установки зависимостей. Примеры команд запуска графических файлов, mpg (mp4 так-же запустился) а как и startx можно посмотреть в статьях указанных выше.

И собственно адаптированные наложения (overlays). Возможно будут совершенствоваться.

1 Режим постоянного включения дисплея. (SPI0) #

repka-pi3_spi0-ili9341-led-always-on_scheme.png

repka-pi3_spi0-ili9341-led-always-on_layout_hor.png

Код наложения: spi0-ili9341-led-always-on.dts

/* 
*
* Устройство: 2,8-дюймовый SPI-модуль ILI9341 / repka pi 3 
* Device: 2.8 inch SPI Module ILI9341 / repka pi 3 
*
* Передача данных по шине SPI0 - LCD экран в режиме постоянной включённой подсветки.
* Data transfer via SPI0 - LCD screen in constant backlight mode.
* 
* Модуль         Соединитель      Контакт   Repka Pi3    Код pio        Дополнительная информация
* Module         Connector         Pin                   Pio code       Additional information
*
* VCC        <-     3.3V            17       3.3V                       или 1 цифровой вывод  питание 3,3V 
*                                                                       or 1  any digital pin or 3.3V power
* GND        =      GND             25       GND                        или любой другой Ground 6, 9, 14, 20, 30, 34, 39 
*                                                                       or any other Ground 6, 9, 14, 20, 30, 34, 39      
* CS		 <-     PС3             24       SPI0-CS0    (2 3 0)                  
* RESET		 <-     PA9             13       LSD_RESET   (0 9 1)
* DC/RS		 <-     PA10            15       LSD_DC/RS   (0 10 0)
* SDI(MOSI)  <-     PC0             19       SPI0-MOSI
* SCK		 <-     PC2             23       SPI0-CLK 
*
* LED <-resistor->  3.3V             1       VCC                           или 17 возможны также 2 или 4 (если необходима максимальная яркость, то контакт №2 или №4 на 5V)
*      = 56 Ohms                                                        or 17, 2 or 4 are also possible (if maximum brightness is required, then contact №2 or №4 is 5V)
*
* SDO(MISO)	->      PC1             21       SPI0-MISO
*
*/

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h5";    

  fragment@0 {                                  
    target = <&pio>;
    __overlay__ {
      ili9341_pins: ili9341_pins {
        pins = "PA9", "PA10"; /*RESET, DC_RS*/
        function = "gpio_out", "gpio_out" ;
      };
    };
  };
  
  fragment@1 {                                 
    target = <&spi0>;
    __overlay__ {
      status = "okay";      
      cs-gpios = <&pio 2 3 0>; /* PС3 */

      ili9341: ili9341@0 {
        compatible = "ilitek,ili9341";
        reg = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&ili9341_pins>;
        spi-max-frequency = <16000000>;
        rotate = <90>;
        bgr;
        fps = <25>;
        buswidth = <8>;
        reset-gpios = <&pio 0 9 1>; /*RESET=PA9*/
        dc-gpios = <&pio 0 10 0>; /*DC_RS=PA10*/
        /*led-gpios = <&pio 0 19 0>; LED=PA19*/ /*PA19-27 В данном оверлее не применяется так как LED <-resistor-> 3.3V // This overlay does not apply because LED <-resistor-> 3.3V */ 
        debug = <0>;
      };
    };
  };
};

2 Режим задействования подсветки только во время работы самого дисплея. (SPI0) #

В данной схеме задействован отдельный контакт GPIO для подсветки LED

repka-pi3_spi0-ili9341-led-always-main_and_backlight-on-off_scheme.png

Параметры rotate = <90> можно и менять если собираетесь использовать дисплей вертикально. Что можно увидеть на следующей макетке.

repka-pi3_spi0-ili9341-led-always-main_and_backlight-on-off_layout_ver.png

Код наложения: spi0-ili9341-led-always-main.dts

/* 
*
* Устройство: 2,8-дюймовый SPI-модуль ILI9341 / repka pi 3 
* Device: 2.8 inch SPI Module ILI9341 / repka pi 3 
*
* Передача данных по шине SPI0 - Подсветка LCD экрана включится только во время инициализации и выключится вместе с устройством. Подсветка только во время работы самого дисплея.
* Data transfer via SPI0 - The LCD backlight will only turn on during initialization and will turn off when the device turns off. Backlight only when the display itself is on.
* 
* Модуль         Соединитель      Контакт   Repka Pi3    Код pio        Дополнительная информация
* Module         Connector         Pin                   Pio code       Additional information
*
* VCC        <-     3.3V            17       3.3V                       или 1 цифровой вывод  питание 3,3V 
*                                                                       or 1  any digital pin or 3.3V power
* GND        =      GND             25       GND                        или любой другой Ground 6, 9, 14, 20, 30, 34, 39 
*                                                                       or any other Ground 6, 9, 14, 20, 30, 34, 39      
* CS		 <-     PС3             24       SPI0-CS0    (2 3 0)                  
* RESET		 <-     PA9             13       LSD_RESET   (0 9 1)
* DC/RS		 <-     PA10            15       LSD_DC/RS   (0 10 0)
* SDI(MOSI)  <-     PC0             19       SPI0-MOSI
* SCK		 <-     PC2             23       SPI0-CLK 
*
* LED <-resistor-><-PA19            27                   (0 19 0)
*      = 56 Ohms
*
* SDO(MISO)	->      PC1             21       SPI0-MISO
*
*/

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h5";    

  fragment@0 {                                  
    target = <&pio>;
    __overlay__ {
      ili9341_pins: ili9341_pins {
        pins = "PA9", "PA10"; /*RESET, DC_RS*/
        function = "gpio_out", "gpio_out" ;
      };
    };
  };
  
  fragment@1 {                                
    target = <&spi1>;
    __overlay__ {
      status = "okay";      
      cs-gpios = <&pio 2 3 0>; /* PС3 */

      ili9341: ili9341@0 {
        compatible = "ilitek,ili9341";
        reg = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&ili9341_pins>;
        spi-max-frequency = <16000000>;
        rotate = <90>;
        bgr;
        fps = <25>;
        buswidth = <8>;
        reset-gpios = <&pio 0 9 1>; /*RESET=PA9*/
        dc-gpios = <&pio 0 8 0>; /*DC_RS=PA10*/
        led-gpios = <&pio 0 19 0>; /*LED=PA19*/ 
         debug = <0>;
      };
    };
  };
};

Реализована подсветка экрана при выводе на него изображения.

3 Режим возможности управления подсветкой выключать/включать подсветку во время работы. (SPI0) #

Схема такая же как и во втором варианте. Рекомендуется во всех вариантах схем применять резистор на 56 Ohms. В макетках сидят отлично. :)

resistor_56_Onms.jpg

Код наложения: spi0-ili9341-backlight-on-off.dts

/* 
*
* Устройство: 2,8-дюймовый SPI-модуль ILI9341 / repka pi 3 
* Device: 2.8 inch SPI Module ILI9341 / repka pi 3 
*
* Передача данных по шине SPI0 - Подсветка LCD экрана режим: выключать/включать подсветку во время работы дисплея. 
* Data transfer via SPI0 - LCD screen backlight mode: turn the backlight on/off while the display is on.            
* 
* Модуль         Соединитель      Контакт   Repka Pi3    Код pio        Дополнительная информация
* Module         Connector         Pin                   Pio code       Additional information
*
* VCC        <-     3.3V            17       3.3V                       или 1 цифровой вывод  питание 3,3V 
*                                                                       or 1  any digital pin or 3.3V power
* GND        =      GND             25       GND                        или любой другой Ground 6, 9, 14, 20, 30, 34, 39 
*                                                                       or any other Ground 6, 9, 14, 20, 30, 34, 39      
* CS		 <-     PС3             24       SPI0-CS0    (2 3 0)                  
* RESET		 <-     PA9             13       LSD_RESET   (0 9 1)
* DC/RS		 <-     PA10            15       LSD_DC/RS   (0 10 0)
* SDI(MOSI)  <-     PC0             19       SPI0-MOSI
* SCK		 <-     PC2             23       SPI0-CLK 
*  
* LED <-resistor-><-PA19            27                   (0 19 0)
*      = 56 Ohms
*
* SDO(MISO)	->     PC1              21       SPI0-MISO
*
*/

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h5";    

  fragment@0 {                                 
    target = <&pio>;
    __overlay__ {
      backlight_pin: backlight_pin {
        pins = "PA19"; 
        function = "gpio_out";
      };
    };
  };
  
  fragment@1 {                                
    target-path = "/";
    __overlay__ {
      backlightlcdtft: backlightlcdtft {
        compatible = "gpio-backlight";
        pinctrl-names = "default";
        pinctrl-0 = <&backlight_pin>;
        gpios = <&pio 0 19 0>; /*PA19-27*/
        default-on;
      };            
    };
  };

  fragment@2 {                                 
    target = <&pio>;
    __overlay__ {
      ili9341_pins: ili9341_pins {
        pins = "PA9", "PA10"; /*RESET, DC_RS*/
        function = "gpio_out", "gpio_out" ;
      };
    };
  };
  
  fragment@3 {                              
    target = <&spi1>;
    __overlay__ {
      status = "okay";      
      cs-gpios = <&pio 2 3 0>; /* PС3 */

      ili9341: ili9341@0 {
        compatible = "ilitek,ili9341";
        reg = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&ili9341_pins>;
        spi-max-frequency = <16000000>;
        rotate = <90>;
        bgr;
        fps = <25>;
        buswidth = <8>;
        reset-gpios = <&pio 0 9 1>; /*RESET=PA9*/
        dc-gpios = <&pio 0 10 0>; /*DC_RS=PA10*/
        backlight = <&backlightlcdtft>;
        /*led-gpios = <&pio 0 19 0>; LED=PA19*/ /*PA19-27  В данном наложении контакт реализован в рамках gpio-backlight выше. // In this overlay the pin is implemented within the gpio-backlight framework above. */
        debug = <0>;
      };
    };
  };
};

/* echo "1" > /sys/class/backlight/backlightlcdtft/brightness */ 
/* echo "0" > /sys/class/backlight/backlightlcdtft/brightness */

Включить подсветку:

echo "1" > /sys/class/backlight/backlightlcdtft/brightness

Выключить подсветку:

echo "0" > /sys/class/backlight/backlightlcdtft/brightness

Внутри тела наложения оставлены комментарии и маленькие пояснения.

Это наше первое познание в дереве устройств и является сухим дополнением в виде наложений для Repka Pi, к разным материалам созвучных данной теме и более широко раскрытыми диапазонами.


GSG (с)2025 (☼)7533



Комментарии (1)

Для участия в обсуждении Вы должны быть авторизованным пользователем
anatoly_ryabov
anatoly_ryabov  

Очень полезная статья, Спасибо большое!

Темы

Навигация

ВойтиРегистрация