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


ILI9481のパラレル接続TFTモジュールを入手しました。
背面はこのようなモジュールで、メーカ名や解像度などの情報は皆無です。
チップIDは、いつもの様にこちらの ツールで確認しています。


2.4インチと比べると、3.5インチはさすがに大きいです。
UNOのシールド(8ビットパラレル・インターフェース)としては最大級かと思います。
これ以上大きくなるとMEGAのシールド(16ビットパラレル・インタフェース)が主流となります。


OrangePiとTFTの結線は、今までと同じ、以下の様になります。
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(*2)
3.3V 3.3V(*3)
GND GND

(※)全てのピンは変更できますが、変更した場合、モジュールロード時に指定するgpiosパラメータが変わります。
(*1)組み合わせによって動かない組み合わせが有ります。何度も確認しましたが、原因不明です。
  WR=Pin#24 RD=Pin#28 → 動く
  WR=Pin#26 RD=Pin#28 → 動く
  WR=Pin#24 RD=Pin#26 → 動かない(原因不明)
(*2)5V駆動モデルの時に使います。
(*3)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

次に、flexfbモジュールを読み込みます。
sudo modprobe flexfb width=480 height=320 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0xD0,0x07,0x42,0x18,\
-1,0xD1,0x00,0x07,0x18,\
-1,0xD2,0x01,0x02,\
-1,0xC0,0x10,0x3B,0x00,0x02,0x11,\
-1,0xC5,0x03,\
-1,0x36,0x28,\
-1,0x3A,0x55,\
-1,0x11,-2,120,\
-1,0x29,-2,20,\
-3



横書きを180度回転するには以下のパラメータです。(これ、見つけるのめちゃ苦労しました)
sudo modprobe flexfb width=480 height=320 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0xD0,0x07,0x42,0x18,\
-1,0xD1,0x00,0x07,0x18,\
-1,0xD2,0x01,0x02,\
-1,0xC0,0x10,0x3B,0x00,0x02,0x11,\
-1,0xC5,0x03,\
-1,0x36,0xAA,\
-1,0x3A,0x55,\
-1,0x11,-2,120,\
-1,0x29,-2,20,\
-3



表示を縦書きにするにはモジュールのパラメーターを少し変更します。
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

sudo modprobe flexfb width=480 height=320 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0xD0,0x07,0x42,0x18,\
-1,0xD1,0x00,0x07,0x18,\
-1,0xD2,0x01,0x02,\
-1,0xC0,0x10,0x3B,0x00,0x02,0x11,\
-1,0xC5,0x03,\
-1,0x36,0x48,\
-1,0x3A,0x55,\
-1,0x11,-2,120,\
-1,0x29,-2,20,\
-3



縦書きを180度回転するには以下のパラメータです。
sudo modprobe flexfb width=480 height=320 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0xD0,0x07,0x42,0x18,\
-1,0xD1,0x00,0x07,0x18,\
-1,0xD2,0x01,0x02,\
-1,0xC0,0x10,0x3B,0x00,0x02,0x11,\
-1,0xC5,0x03,\
-1,0x36,0x09,\
-1,0x3A,0x55,\
-1,0x11,-2,120,\
-1,0x29,-2,20,\
-3



RaspberryPiでも試しましたが、やはり動きません。
使用したのはModelB+なので、遅くてタイミングが取れないのかもしれません。
Pi2やPi3では動くのかも知れません。

次回
は非常に高機能なFrameBufferグラフィックライブラリを紹介します。