ILI9341/9342をOrangePiのコンソールとして使う


こちらで、ILI9325のパラレル接続TFTモジュールを、 OrangePi(Armbian)のコンソールとして使う方法を紹介しました。
その後、ILI9341 ILI9342のパラレル接続TFTモジュールを入手しましたので試してみました。
右がILI9341 左がILI9342






写真の様に、これらも完全にArduino UNOのシールド用のTFTです。
見た目はそっくりですが、大きな違いが2つあります。
・コントローラーがILI9341と9342
これはこちらのツールを使って調べま した。

・駆動電圧が5Vと3.3V
これはレギュレータが実装されているかどうかで判断できます。
レギュレータが実装されていれば5V駆動、実装されていなければ3.3V駆動です。

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モジュールを読み込みます。ILI9341も9342もこの部分は同じです。
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モジュールを読み込みます。
ILI9341と9342では、微妙に違います。
どちらの初期化コードもArduinoのライブラリから拝借しています。
ILI9341の初期化コードはこちらで紹介している初期化コー ドと同じです。

ILI9341

sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x38,\
-1,0x3A,0x55,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3




横書きを180度回転するには以下のパラメータです。
rotationパラメータを指定しても回転しません。
sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0xF8,\
-1,0x3A,0x55,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3

上の写真と比べるとTFTの向きが180度回転します。



ILI9342

データシートを見る限り、ILI9341とILI9342はほとんど同じパラメータです。
なぜか0x21(Display Inversion ON)のコードが必要です。
どうもTFT内部で反転のラインがONになっているようです。
また、0x36は文字の向きを決めるパラメータで、ILI9341もILI9342も全く同じコマンドのはずです。
ILI9341と同じパラメータでは動かないところを見ると、X,Yの信号線がTFT内部で逆に接続されているみたいです。
この辺りは、データシートを見ながら片っ端からパラメータを変えて試すしかないです。
sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x08,\
-1,0x3A,0x55,\
-1,0x21,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3



横書きを180度回転するには以下のパラメータです。
sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0xC8,\
-1,0x3A,0x55,\
-1,0x21,\
-1,0x11,-2,100,\
-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

ILI9341

sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x58,\
-1,0x3A,0x55,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3



縦書きを180度回転するには以下のパラメータです。
rotationパラメータを指定しても回転しません。
sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x98,\
-1,0x3A,0x55,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3

上の写真と比べるとTFTの向きが180度回転します。



ILI9342

sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0x68,\
-1,0x3A,0x55,\
-1,0x21,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3



縦書きを180度回転するには以下のパラメータです。
sudo modprobe flexfb width=320 height=240 buswidth=8 init=\
-1,0x01,-2,5,\
-1,0x28,\
-1,0x36,0xA8,\
-1,0x3A,0x55,\
-1,0x21,\
-1,0x11,-2,100,\
-1,0x29,-2,20,\
-3



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

次回
は比較的大型のILI9481モジュールを紹介します。