ILI9325をOrangePiのコンソールとして使う


前回、ILI9325のパラレル接続TFTモジュールを、 RaspberryPiのコンソールとして使う方法を紹介しました。
今回はOrangePi(Armbian)のコンソールとして使う方法を紹介します。
GPIO番号が違うだけで、Raspberryと手順は同じです。



まずはお試しで、コンソールとして使えるかどうか試してみます。
OrangePiとTFTの結線は、以下の様になります。
Raspberryと同じピン番号ですが、GPIOの番号が変わります。
ILI9325 TFT Opi(Pin#)
LCD_RST Pin#7
LCD_CS Pin#3
LCD_RS Pin#5
LCD_WR Pin#26(*1)
LCD_RD Pin#28(*1)
LCD_D0 Pin#29
LCD_D1 Pin#31
LCD_D2 Pin#33
LCD_D3 Pin#35
LCD_D4 Pin#37
LCD_D5 Pin#32
LCD_D6 Pin#36
LCD_D7 Pin#38
5V 5V
3.3V N/C(*2)
GND GND

(※)全てのピンは変更できますが、変更した場合、モジュールロード時に指定するgpiosパラメータが変わります。
(*1)組み合わせによって動かない組み合わせが有ります。何度も確認しましたが、原因不明です。
  WR=Pin#24 RD=Pin#28 → 動く
  WR=Pin#26 RD=Pin#28 → 動く
  WR=Pin#24 RD=Pin#26 → 動かない(原因不明)
(*2)3.3Vではバックライトが点灯しません。

最初に、fbtft_deviceモジュールを読み込みます。
gpiosパラメータが重要です。
sudo modprobe fbtft_device name=flexpfb \
gpios=reset:6,dc:11,wr:21,cs:12,db00:7,db01:8,db02:9,db03:10,db04:20,db05:200,db06:201,db07:198

dmesgには以下のように表示されます。
[   36.142584] fbtft_device:  SPI devices registered:
[   36.142606] fbtft_device:      spidev spi0.0 33000kHz 8 bits mode=0x00
[   36.142617] fbtft_device:  'fb' Platform devices registered:
[   36.142845] fbtft_device:  GPIOS used by 'flexpfb':
[   36.142857] fbtft_device:    'reset' = GPIO6
[   36.142865] fbtft_device:    'dc' = GPIO11
[   36.142873] fbtft_device:    'wr' = GPIO21
[   36.142881] fbtft_device:    'cs' = GPIO12
[   36.142889] fbtft_device:    'db00' = GPIO7
[   36.142897] fbtft_device:    'db01' = GPIO8
[   36.142905] fbtft_device:    'db02' = GPIO9
[   36.142913] fbtft_device:    'db03' = GPIO10
[   36.142926] fbtft_device:    'db04' = GPIO20
[   36.142936] fbtft_device:    'db05' = GPIO200
[   36.142945] fbtft_device:    'db06' = GPIO201
[   36.142953] fbtft_device:    'db07' = GPIO198
[   36.142960] fbtft_device:  'fb' Platform devices registered:
[   36.143004] fbtft_device:      flexpfb id=0 pdata? yes

次に、flexfbモジュールを読み込みます。
この部分はRaspberryと同じです。
sudo modprobe flexfb width=240 height=320 regwidth=16 setaddrwin=1 init=\
-1,0x00E3,0x3008,-1,0x00E7,0x0012,-1,0x00EF,0x1231,\
-1,0x0001,0x0100,-1,0x0002,0x0700,-1,0x0003,0x1030,\
-1,0x0004,0x0000,-1,0x0008,0x0207,-1,0x0009,0x0000,\
-1,0x000A,0x0000,-1,0x000C,0x0000,-1,0x000D,0x0000,\
-1,0x000F,0x0000,-1,0x0010,0x0000,-1,0x0011,0x0007,\
-1,0x0012,0x0000,-1,0x0013,0x0000,-2,200,\
-1,0x0010,0x1690,-1,0x0011,0x0223,-2,50,\
-1,0x0012,0x000D,-2,50,-1,0x0013,0x1200,\
-1,0x0029,0x000A,-1,0x002B,0x000C,-2,50,\
-1,0x0020,0x0000,-1,0x0021,0x0000,-1,0x0030,0x0000,\
-1,0x0031,0x0506,-1,0x0032,0x0104,-1,0x0035,0x0207,\
-1,0x0036,0x000F,-1,0x0037,0x0306,-1,0x0038,0x0102,\
-1,0x0039,0x0707,-1,0x003C,0x0702,-1,0x003D,0x1604,\
-1,0x0050,0x0000,-1,0x0051,0x00EF,-1,0x0052,0x0000,\
-1,0x0053,0x013F,-1,0x0060,0xA700,-1,0x0061,0x0001,\
-1,0x006A,0x0000,-1,0x0080,0x0000,-1,0x0081,0x0000,\
-1,0x0082,0x0000,-1,0x0083,0x0000,-1,0x0084,0x0000,\
-1,0x0085,0x0000,-1,0x0090,0x0010,-1,0x0092,0x0600,\
-1,0x0007,0x0133,-3

最後に表示テストです。
con2fbmap 1 8

表示を横書きにするにはモジュールのパラメータを少し変更します。



sudo modprobe fbtft_device name=flexpfb rotate=90 \
gpios=reset:6,dc:11,wr:21,cs:12,db00:7,db01:8,db02:9,db03:10,db04:20,db05:200,db06:201,db07:198

initパラメータは03hのレジスターを変更し、アドレスの使い方を変更しています。
sudo modprobe  flexfb width=240 height=320 regwidth=16 setaddrwin=1 init=\
-1,0x00E3,0x3008,-1,0x00E7,0x0012,-1,0x00EF,0x1231,\
-1,0x0001,0x0100,-1,0x0002,0x0700,-1,0x0003,0x1018,\
-1,0x0004,0x0000,-1,0x0008,0x0207,-1,0x0009,0x0000,\
-1,0x000A,0x0000,-1,0x000C,0x0000,-1,0x000D,0x0000,\
-1,0x000F,0x0000,-1,0x0010,0x0000,-1,0x0011,0x0007,\
-1,0x0012,0x0000,-1,0x0013,0x0000,-2,200,\
-1,0x0010,0x1690,-1,0x0011,0x0223,-2,50,\
-1,0x0012,0x000D,-2,50,-1,0x0013,0x1200,\
-1,0x0029,0x000A,-1,0x002B,0x000C,-2,50,\
-1,0x0020,0x0000,-1,0x0021,0x0000,-1,0x0030,0x0000,\
-1,0x0031,0x0506,-1,0x0032,0x0104,-1,0x0035,0x0207,\
-1,0x0036,0x000F,-1,0x0037,0x0306,-1,0x0038,0x0102,\
-1,0x0039,0x0707,-1,0x003C,0x0702,-1,0x003D,0x1604,\
-1,0x0050,0x0000,-1,0x0051,0x00EF,-1,0x0052,0x0000,\
-1,0x0053,0x013F,-1,0x0060,0xA700,-1,0x0061,0x0001,\
-1,0x006A,0x0000,-1,0x0080,0x0000,-1,0x0081,0x0000,\
-1,0x0082,0x0000,-1,0x0083,0x0000,-1,0x0084,0x0000,\
-1,0x0085,0x0000,-1,0x0090,0x0010,-1,0x0092,0x0600,\
-1,0x0007,0x0133,-3




2回にわたりパラレル接続のTFTをRaspberryPi/OrangePiのコンソールとして使う方法を紹介しました。
手順をまとめると以下の様になります。

・TFTモジュールに使われているコントローラチップを判定する。
パラレル接続のTFTはUNOのシールドとして多数の製品が出回っています。
こちらで 公開されていますが、一見、同じように見えるシールドでもコントローラチップが違うものが多数存在するので非常に厄介です。
こちらのツールを使って、LCDコン トローラーを特定する必要があります。

・TFTモジュールのピンアサインを求める。
UNOのシールドであれば、ピンアサインは全て同じです。
DCピンはCommandとDataを切り替えるピンですが、RSピンと記載されている場合もあります。

・TFTモジュールの駆動電圧を特定する。
レギュレータが実装されているモジュールは5V駆動、実装されていないモジュールは3.3V駆動です。

・TFTモジュールの初期化シーケンスを求める。
初期化シーケンスについてはArduinoの事例がたくさん公開されています。

これらが分かれば(原則)どのようなパラレルTFTもFrameBufferコンソールとして使うことができるはずです。
(今まで試した中でルネサスのR61509Vチップを使ったTFTだけはどうやっても動きませんでした)

また縦画面/横画面を切り替えるには、初期化パラメータを一部変更する必要が有ります。
ここは、コントローラチップのデータシートと首っ引きになります。

ILI9341とILI9342のパラレル接続TFTを入手しました。
同じように使えるかどうか、こちらで紹介しています。