SPI LCDILI9341ディスプレイをBananaPiBPI-M64シングルボードコンピューターまたはArmbianOS上のその他のコンピューターに接続します

LCD SPIILI9341バナナパイBPI-M64



投稿には、人気のあるILI9341コントローラーのTFT-LCDディスプレイを、タンバリンで踊らずにデバイスツリーオーバーレイを使用して、ArmbianOSベースのシングルボードコンピューターに接続する方法の説明が含まれています。さまざまなLCD画面をRaspberryPiに接続する方法については、インターネット上に多くの資料があります。しかし、Raspberry Piがなく、安価なLCD画面をSPIインターフェイスに接続したい場合はどうでしょうか。必要なのは、Armbian対応のボードだけです。 Armbian OSがサポートするボードカタログには、Asus、Pine64、Hardkernel、Orange Pi、BananaPiなどのボードが含まれています。現在、カタログには114を超えるモデルのボードが含まれており、箱から出してすぐに使用できるさまざまな機器のサポートが発表されています。接続可能:4G / LTEモデム、USB Wi-Fi、USB Bluetooth、USBイーサネット、スキャナーDVBチューナーなど。これらのボードはすべて、SPILCDディスプレイILI9341に簡単に接続できます。猫の下でこれを実装する方法を尋ねます。





多くのシングルボードコンピューターにはHDMI出力がありますが、フルディスプレイをHDMI入力に接続すると、小規模なプロジェクトには十分な費用がかかります。特に、ユーザーとの対話の最小限の機能を実装する必要がある場合は、ドキュメントを印刷するための端末であり、実行中のアプリケーションの現在のステータスを表示します。このようなタスクには、I2CインターフェイスでLCDHD44780文字ディスプレイを使用できます。これらは非常に安価で便利です。ただし、同時に機能が非常に制限されており、LinuxコンソールやアプリケーションのネイティブUIをこれらの画面に表示することはできません。また、LCD画面領域を情報入力パネルとして使用することもできません。 SPIインターフェイスのLCD画面は、これらの問題を解決するのに最適です。抵抗層を備えた3.5インチディスプレイは、9.57ドル(送料込み)で購入できます。LCD画面には、LinuxコンソールとX11サブシステムを表示できます。したがって、SPI LCDの使用は、コストに対する機能の観点から最良のオプションです。



ディスプレイILI93412.2インチ2.2 "SPI TFT



ILI9341コントローラーは、TFTパネルを制御するように設計されています。ILI9341コントローラーの場合、対角2.2〜3.2インチ、解像度240x320のパネルが提供され、一部のLCDには抵抗層が追加されています。

抵抗層のない2.4インチSPILCDILI9341モジュールをBananaPiBPI-M64シングルボードコンピューターに接続します。 SPI LCD ILI93412.4インチ



の特性とピン配置を検討してください



  • 2.4インチカラースクリーン、65K色をサポート
  • 解像度320X240
  • SPI接続インターフェース
  • SDカードスロットが利用可能
  • モジュール電源3.3V〜5V
  • 論理制御電圧3.3V(TTL)


LCD接続ピン

ピンラベル 説明
1 VCC 5V /3.3V電源入力
2 GND 接地
3 CS LCDチップセレクト信号、低レベルイネーブル
リセット LCDリセット信号、低レベルリセット
DC / RS LCD register / data selection signal,high level: register, low level: data
6 SDI(MOSI) SPI bus write data signal
7 SCK SPI bus clock signal
8 LED Backlight control, high level lighting,if not controlled, connect 3.3V always bright
9 SDO(MISO) SPI bus read data signal, if you do not need to the read function, you can not connect it


バックライトを制御するには、接点 番号8-LEDを使用します。3.3Vの最大電圧は、全VCC電源からの最大輝度に対応します。画面の明るさを50%に設定する必要がある場合は、1.65Vの電圧をLEDに印加する必要があります。バックライトの明るさをプログラムで制御するには、LEDピンをシングルボードコンピューターのGPIOアナログ出力に接続する必要があります。デジタル出力のみが使用可能な場合は、画面のバックライトをオンまたは完全にオフにするオプションのみが使用可能です。



LCD画面の特性に基づいて、シングルボードコンピューターには次の要件が課せられます。



  • SPIインターフェースの可用性
  • ピン3.3Vの論理電圧(ほとんどのボード)
  • さらに2つの(RESET、DC / RS)空きGPIOピンが必要になります


あなたはどんな種類のArmbian獣であり、どのような種類のシングルボードコンピューターが必要ですか



armbian.com/downloadページに 、さまざまなシングルボードコンピューターが含まれています。接続のしやすさの観点から、Raspberry Pi 3と互換性のある40ピンGPIOコネクタを備えたボードを選択することをお勧めします。たとえば、SPI LCD ILI93412.4インチをBananaPiBPI-M64ボードに接続する場合Orange Pi PCの場合、物理的に接続されたGPIOピンの数は同じになります(プロセッサの接点の名前と混同しないでください。異なるため、構成にさらに必要です)。シングルボードコンピューターがAllwinnerプロセッサー上に構築されていない場合は、ファイル内のパラメーターをさらに変更する必要がある場合があります:sun50i-a64-spi-ili9341-led-always-on.dts(本文でさらに詳しく説明します)。



ArmbianARMプロセッサをベースにしたシングルボードコンピュータで最も人気のあるLinuxディストリビューションであり、サポートされているボードのリストは膨大です:Orange Pi、Banana Pi、Odroid、Olimex、Cubieboard、Roseapple Pi、Pine64、NanoPiなど。ArmbainディストリビューションはDebianに基づいていますおよびUbuntu。



Raspberry Piが世界に登場した後、中国のメーカーはオープンハードウェアソース運動にも参加することを決定し、さまざまなボードを作成しました。しかし、ソフトウェアのサポートは非​​常に弱く、この問題を解決するためにArmbianプロジェクトが誕生しました。現在、Armbianはすでに7歳で、114モデルのボードがサポートされており、さまざまな機器のサポートが発表されています。接続可能:4G / LTEモデム、USB Wi-Fi、USB Bluetooth、USBイーサネット、スキャナーDVBチューナーなど。



シングルボードコンピューターでArmbianを実行するには、サイトからイメージをダウンロードし、それをmicroSDカードにコピーする必要があります。このカードから、後で起動する必要があります。ボードに十分なeMMCメモリがある場合は、armbian-configユーティリティを使用して、オペレーティングシステムをmicroSDカードからブートローダーとともにeMMCメモリに簡単に転送できます。



Raspberry Piとは対照的に、Armbianを使用してIoTプロジェクトを作成すると、パフォーマンスと周辺機器のセットが異なるボードを選択できます。たとえば、RaspberryPiのすべてのバージョンにはイーサネットポートが1つしかありません。ただし、複数のイーサネットポートを備えたルーターを作成する必要がある場合は、サポートされているArmbianボードのリストから、Helios64、Espressobin、BananapiR2などのモデルが適しています。



サポートされているSoC



  • Allwinner A10、A20、A31、H2 +、H3、H5、H6、A64
  • Amlogic S805およびS905(Odroidボード)、S802 / S812、S805、S905、S905XおよびS912(@ balbes150によるフォーク)
  • Actionsemi S500
  • フリースケール/ NXP iMx6
  • マーベルアルマダA380
  • Rockchip RK3288 / RK3328 / RK3399
  • サムスンExynos5422


配線図SPILCD ILI93412.4インチからBananaPi BPI-M64(Raspberry Pi 3 GPIOポート)



LCD画面のSPIインターフェースは、Banana PiBPI-M64のSPI1に接続されています。CS、RESET、DC / RS接点は任意のデジタルピンに接続できます。



接続ピンテーブル:

LCD番号 LCDラベル Banana Pi BPI-M64(Raspberry Pi 3 GPIOポート)のピン番号
1 VCC 1または2(最大の明るさが必要な場合は、5Vで2番に連絡してください)
2 GND 39、またはその他のグラウンド
3 CS 24
リセット 18
DC / RS 22
6 SDI(MOSI) 19
7 SCK 23
8 LED 1または3.3Vの無料GPIO
9 SDO(味噌) 21


LEDピンがGPIOデジタル出力に接続されている場合、バックライトを手動でオンにするには、論理的な「1」(オンにする)または「0」(画面をオフにする)を指定する必要があります。



SPI LCD ILI9341接続図:

LCD SPIILI9341バナナパイBPI-M64



Banana PiBPI-M64シングルボードコンピューター



Banana Pi BPI-M64 は、オープンソースソリューションとして提供される64ビットクアッドコアミニシングルボードコンピューターです。システムのコアは、周波数1.2GHzの4つのCortex-A53コアを備えたAllwinnerA64プロセッサです。ボードには、2GB DDR3 SDRAM 733MHzRAMと8GBeMMCが搭載されています。



SPI LCD接続を成功させるための最も重要なことは、SPIインターフェイスの接点の名前を知ることです。それらの番号と名前はプロセッサモデルによって異なります。このタスクには、AllwinnerA64データシートが必要です。 バナナパイBPI-M64 WikiページのPD2、PD3、など:私たちは、ピンの名前を学び、そこからショー40ピンGPIOコネクタのピン配置、

Banana piBPI-M64の40PIN GPIO
GPIOピン名 デフォルト機能 機能2:GPIO 機能3
CON2-P18 PD4 PD4
CON2-P19 SPI1-MOSI PD2 UART4-TX
CON2-P21 SPI1-味噌 PD3 UART4-RX
CON2-P22 PC0 PC0
CON2-P23 SPI1-CLK PD1 UART3-RX
CON2-P24 SPI1-CS PD0 UART3-TX


連絡先の名前に加えて、プロセッサレッグのこの連絡先のシリアル番号を見つける必要があります。これは次の式で簡単に計算できます:(アルファベットの文字の位置-1)* 32+出力位置。PD2ピンのレッグ番号を計算してみましょう。最初の文字はカウントされません。P-PORT、アルファベットの文字Dの位置= 4、(4-1)* 32 + 2 = 98を取得します。PD2ラベルとの  接触はプロセッサの98番目の足に対応するため、必要になります。デバイスツリーを構成します。



Linuxのデバイスツリー(DT)



デバイスツリー(DT)は、ハードウェアのポーリングでは検出できないハードウェアを記述する名前付きノードとプロパティで構成されるLinuxデータ構造です。ツリーには、コアプロセッサの名前、そのメモリ構成、および周辺機器(内部および外部)が含まれている必要があります。 DTはソフトウェアの説明には使用されませんが、ハードウェアモジュールを一覧表示すると、ドライバーモジュールがロードされます。



開発ボードまたはシングルボードコンピューターの心臓部はSoCです。 SoCには、電力線やさまざまなデバイスを接続するための多くのピン(レッグ)があります。



Allwinner V3s



ピンを相互にリンクして、MIPI DSI(MIPIディスプレイシリアルインターフェイス)などのインターフェイスを形成できます。 MIPI DSIインターフェースは、LCDパネルを接続するように設計されており、スマートフォンやタブレットで積極的に使用されています。ただし、MIPI DSIを介してディスプレイをデバイスに接続する予定がない場合は、DTを変更することにより、これらのラインを他の目的に使用できます。 x86アーキテクチャとは異なり、SoCベースのシステムには、プラグアンドプレイモードのすべてのデバイスを完全に識別する機能はありません。したがって、どのピンがインターフェイスに使用され、どのデバイスがこれらのインターフェイスに接続されているかを明示的に宣言する必要があります。



DTが登場する前は、Linuxのデバイス情報はカーネルの不可欠な部分であり、周辺機器の構成が変更された場合は、システムイメージを再構築する必要がありました。これは非常に不便だったため、周辺機器の説明は、ツリーの論理レベルで収集される構成ファイルに移動されました。ここで、ブランチは、このデバイスの操作に必要なドライバーを示すデバイスです。



DTを使用した後は、周辺機器のセットごとに個別のイメージを作成する必要はありませんでした。これで、1つのイメージを作成し、さまざまなデバイス用のドライバーセットを含め、デバイスごとに独自のDTを作成するだけで十分です。



デバイスツリーオーバーレイ



デバイスツリーオーバーレイ-DTにデバイスレイヤーのオーバーラップの原則を追加します。構成でBluetoothが接続されているUARTインターフェイスが記述されており、BluetoothをGPSモジュールに置き換える必要がある場合、既存のBluetooth設定を削除することはできませんが、GPSモジュールに以前の設定を上書きするレイヤーを追加します。



次の用語は、DTを使用するために使用されます。

DT デバイスツリー
DTB(* .dtb) デバイスツリーバイナリファイル
DTBO(* .dtbo) オーバーレイ用のデバイスツリーバイナリ
DTC デバイスツリーコンパイラ
DTO デバイスツリーオーバーレイ
DTS(* .dts) デバイスツリーのソースファイル
FDT フラット化されたデバイスツリー、.dtbファイルに含まれるバイナリ形式


ハードウェア構成はDTソースファイル(.dts)で記述され、システムで最終的に使用するためにDTバイナリ(.dtb)にコンパイルされます。*を逆コンパイルするための逆の手順を実行することもできます。dtbから*。dts、コンパイラ/逆コンパイラがシステムに存在します。 DTOの実装には、デバイスツリーの分割、構築、パーティショニング、および実行が含まれます。



Linuxデバイスツリーブートローダー







DT共有



DTは2つの部分に分かれています。



  • メインDT(メインデバイスツリー)SoC開発者によって提供され、デフォルト設定です。この場合、AllwinnerはAllwinnerA64プロセッサの開発者によって提供されます。
  • オーバーレイDT(オーバーレイデバイスツリー)ボードメーカーの特定の構成には、ボード上にある周辺機器が含まれます。Banana Pi BPI-M64ボードは、SinoVoipCo。から提供されています。


Linuxでのデバイスツリーオーバーレイのトピックは、投稿をレーニンによるマルチボリューム作品に変えられないほど大きいです。バナナパイBPI-M64の例を使用したGPIOの操作の出版物で詳細を読むことができます パート2。デバイスツリーオーバーレイ。



SPI LCD ILI93412.4インチ用のDTSシェーピング



テストは、Ubuntu 18.04.5 LTS(Bionic Beaver)、Linuxカーネル5.8.6に基づいて、Armbian_20.08.2_Bananapim64_bionic_current_5.8.6_minimal.img.xzイメージ実行されました uname:Linux bananapim64 5.8.6-sunxi64#20.08.2SMP金9月4日08:52:31CEST 2020 aarch64 aarch64 aarch64 GNU / Linux。



ArmbianにはすでにILI9341のドライバーがあるため、必要なのはDTSデバイス記述ファイルを作成し、それをDTBO形式にコンパイルして、SBCを再起動することだけです。ことわざにあるように簡単です!



DTSファイルを生成するには、SPIインターフェイスが配置されているgpiochipへのリンクを見つける必要があり ます。これを行うには、Armbianターミナルを開き、コマンドcat / sys / kernel / debug / gpioを実行し ます。



root@bananapim64:~# cat /sys/kernel/debug/gpio
gpiochip1: GPIOs 0-255, parent: platform/1c20800.pinctrl, 1c20800.pinctrl:
 gpio-120 (                    |bananapi-m64:red:pwr) out hi
 gpio-142 (                    |bananapi-m64:green:u) out lo
 gpio-143 (                    |bananapi-m64:blue:us) out lo
 gpio-166 (                    |cd                  ) in  lo ACTIVE LOW
 gpio-233 (                    |usb0_id_det         ) in  hi IRQ

gpiochip0: GPIOs 352-383, parent: platform/1f02c00.pinctrl, 1f02c00.pinctrl:
 gpio-354 (                    |reset               ) out hi ACTIVE LOW
 gpio-356 (                    |shutdown            ) out hi
 gpio-357 (                    |host-wakeup         ) in  lo
 gpio-358 (                    |device-wakeup       ) out hi

gpiochip2: GPIOs 510-511, parent: platform/axp20x-gpio, axp20x-gpio, can sleep:

      
      





このコマンドは、オペレーティングシステムで使用可能なすべてのgpiochipデバイスと影響を受けるピン番号を一覧表示します。前のセクションでは、PD2ピンの名前である SPI1-MOSIピンについて、プロセッサレッグ番号が決定されました-98。得られた結果に基づいて、番号98はGPIOの範囲0〜255に該当し、これはgpiochip1チップ :GPIO 0〜255、親:プラットフォーム/1c20800。pinctrl、1c20800.pinctrlさらに、DTSファイルを生成するには、1c20800.pinctrlへのリンクを見つける必要があります



次の名前のDTSファイルを作成しましょう: sun50i-a64-spi-ili9341-led-always-on.dts(Orange Pi PCボードのdtsファイルに基づく):



/dts-v1/;
/plugin/;

/ {
	compatible = "allwinner,sun8i-h3";	

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

      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 3 4 1>; /*RESET=PD4*/
        dc-gpios = <&pio 2 0 0>; /*DC_RS=PC0*/
        /*led-gpios = <&pio 2 4 0>; LED=PC4*/
        debug = <0>;
      };
    };
  };
};

      
      





内容を検討してください:



  • fragment@0/soc/pinctrl@1c20800, &pio. GPIO PD4", «PC0 gpio_out .
  • &pio — GPIO /soc/pinctrl@1c20800, . Armbian : /boot/dtb-5.8.6-sunxi64/allwinner/sun50i-a64-bananapi-m64.dtb.  DTS, : $ dtc -I dtb -O dts sun50i-a64-bananapi-m64.dtb -o sun50i-a64-bananapi-m64.dts
  • fragment@1 — /soc/spi@1c69000, &spi1.
  • status = „okay“ —   SPI1
  • cs-gpios = <&pio 3 0 0>; /* PD0 */ — CS SPI1.
  • <&pio 3 0 0>  — , &pio gpioiochip1 , P , PORT, D — 3 (: — 1), 0 3 , 0 PD0, 0 — , 0 (  0 — , 0; 1 — , 1).
  • compatible = „ilitek,ili9341“
  • pinctrl-0 = <&ili9341_pins>fragment@0
  • spi-max-frequency = <16000000> -SPIインターフェース周波数
  • 回転= <90> -ディスプレイの配置方法に応じて、画像の向き、90度回転。
  • fps = <25> -1秒あたりのフレーム数
  • reset-gpios = <&pio 3 41> -RESETピン= PD4
  • dc-gpios = <&pio 2 00> -DC_RSピン= PC0


パス/ブート/ dtb / allwinner /オーバーレイにファイルを配置しましょう。次に、.dtsファイルを.dtboにコンパイルします。



$ dtc -O dtb -o sun50i-a64-spi-ili9341-led-always-on.dtbo sun50i-a64-spi-ili9341-led-always-on.dts

      
      





ボード構成ユーティリティを起動しましょう:$ armbian-config。メニュー:[システム]> [ハードウェア]に移動し、レイヤーをオンにします(オーバーレイ): spi-ili9341-led-always-onボードを再起動すると、LinuxコンソールがSPILCD画面に表示されます。



LCD SPIILI9341バナナパイBPI-M64





SPILCDの真夜中の司令官とHtop
Midnight Commander

LCD SPI ILI9341 Banana Pi BPI-M64



Htop

LCD SPI ILI9341 Banana Pi BPI-M64





連絡先名

すべてのAllwinnerプロセッサの場合、連絡先の記録形式はcs-gpios = <&pio 3 0 0>の形式に対応し、 他のプロセッサの場合、連絡先の記録形式は異なります。



問題の解決



画像がLCDに表示されない場合は、コマンドを実行して次のことを確認します。$ dmesg | grep -E'ili9341 '。



コンソールには、次の情報が含まれている必要があります。



root@bananapim64:/boot/dtb-5.8.6-sunxi64/allwinner# dmesg | grep -E 'ili9341'
[    5.733989] fb_ili9341: module is from the staging directory, the quality is unknown, you have been warned.
[    5.734718] fb_ili9341 spi0.0: fbtft_property_value: buswidth = 8
[    5.734731] fb_ili9341 spi0.0: fbtft_property_value: debug = 0
[    5.734737] fb_ili9341 spi0.0: fbtft_property_value: rotate = 90
[    5.734744] fb_ili9341 spi0.0: fbtft_property_value: fps = 25
[    6.119287] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=25, spi0.0 at 16 MHz

      
      







XfceGUIおよびX11サブシステム用のSPILCDの構成



Linuxコンソール出力の場合はDTSファイルを追加するだけで十分ですが、グラフィックス出力の場合はそれだけでは不十分です。



1)XORGとXFCEをインストールします。



$ sudo apt-get update
$ sudo apt-get install xorg
$ sudo apt-get install xfce4

      
      





2)Allwinnerプロセッサの場合、GPUドライバを追加でインストールする必要があります-fbdev:



$ sudo apt-get install xserver-xorg-video-fbdev

      
      





3)パス/etc/X11/xorg.conf.dに沿ってすべての構成ファイルを削除します(ファイルがない場合は素晴らしいです)



4)パス/usr/share/X11/xorg.conf.dに沿って構成ファイルを作成します/99-fbdev。confし、その中に次のスニペットを配置します。



Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb0"
EndSection

      
      





ここで、 / dev / fb0SPILCDデバイスです。HDMIパネルがボードに接続されている場合、2つのデバイス/ dev / fb0と/ dev / fb1が存在する可能性があります。



次のコマンドでグラフィカルインターフェイスを開始します:startxまたはstartxfe4:



LCD SPIILI9341バナナパイBPI-M64





グラフィカルインターフェイスに直接移動する必要がある場合は、パッケージを追加でインストールする必要があります。



$ sudo apt-get remove tasksel
$ sudo apt-get remove xubuntu-desktop

      
      





コンソールのみの起動を返すには、display-manager.serviceサービスの自動起動を無効にする必要があり ます



$ sudo systemctl disable display-manager.service

      
      





問題の解決



グラフィカルインターフェイスが起動しない場合、問題を解決するには、次のコマンドを使用してX11イベントログを確認する必要があります。



$ cat /var/log/Xorg.0.log

      
      





結果



SPI LCDのインストールと構成では、ソースからモジュールをコンパイルする必要がないため、インストールが大幅に簡素化されます。主なことは、連絡先を注意深く公開することであり、すべてが箱から出して動作します。設定された目標は正常に達成されました。



ロードマップ



  1. ILI9488コントローラーに大きな3.5インチディスプレイを接続します。
  2. Xfeのタッチインターフェイスの構成。
  3. DockerコンテナのX11サブシステムを使用してSPILCDにグラフィカルアプリケーションを1つだけ表示します(パブリック端末、キオスク、POS端末向けのソリューション)。


ファイル sun50i-a64-spi-ili9341-led -always-on.dtsおよびその他の木製オーバーレイファイルは、カタログGitHub Banana-Pi-BPI-M64 / dt-overlays /で入手できます。



All Articles