投稿には、人気のある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接続図:
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には、電力線やさまざまなデバイスを接続するための多くのピン(レッグ)があります。
ピンを相互にリンクして、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の実装には、デバイスツリーの分割、構築、パーティショニング、および実行が含まれます。
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画面に表示されます。
連絡先名
すべての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 / fb0はSPILCDデバイスです。HDMIパネルがボードに接続されている場合、2つのデバイス/ dev / fb0と/ dev / fb1が存在する可能性があります。
次のコマンドでグラフィカルインターフェイスを開始します:startxまたはstartxfe4:
グラフィカルインターフェイスに直接移動する必要がある場合は、パッケージを追加でインストールする必要があります。
$ 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のインストールと構成では、ソースからモジュールをコンパイルする必要がないため、インストールが大幅に簡素化されます。主なことは、連絡先を注意深く公開することであり、すべてが箱から出して動作します。設定された目標は正常に達成されました。
ロードマップ
- ILI9488コントローラーに大きな3.5インチディスプレイを接続します。
- Xfeのタッチインターフェイスの構成。
- DockerコンテナのX11サブシステムを使用してSPILCDにグラフィカルアプリケーションを1つだけ表示します(パブリック端末、キオスク、POS端末向けのソリューション)。
ファイル sun50i-a64-spi-ili9341-led -always-on.dtsおよびその他の木製オーバーレイファイルは、カタログGitHub Banana-Pi-BPI-M64 / dt-overlays /で入手できます。