ILI9340の2.2インチSPI TFTモジュールを使う


ILI9340チップを使った2.2インチSPI-I/FのTFTモジュールを入手しました。
このモジュールはaitendoで売られている[M-TM022-SPI] と同じものと思 いますが、私はAliExpressから購入しました。




このモジュールをフレームバッファ経由で、Raspberryのコンソールとして使う事例は沢山紹介されていますが、
コンソールとして使うには小さすぎるので、今回はSPI通信を使った単純なグラフィック表示装置として使ってみました。

このモジュールとのSPI通信については以下のページを大いに参考にさせて頂きました。
作者の方にはこの場を借りてお礼申し上げます。
http://imagewriteriij.blogspot.jp/2014/01/raspberry-pi-9-lcd-1.html

上記のページでbcm2835ライブラリを使ったSPI通信が紹介されています。
RaspberryでSPI通信を行う場合、以下の何れかを利用することができます。
@bcm2835ライブラリ
AWiringPiSPIライブラリ
BWiringShiftライブラリ(ソフトウェアSPI)
このモジュールの場合、@でしか正常に動きません。
こちらで SPIのパフォーマンスを比較していますが、おそらくタイミングの問題(wiringPiのSPIは超遅いから)だと思います。

いろいろ探しましたが、上記のページ以外で、このモジュールとSPI通信を行っているページは発見できませんでした。
非常に貴重なページだと思います。
今回紹介するプログラムでは、上記のページで紹介されているコードを(ほぼ)そのまま利用させて頂きました。

このモジュールは240x320の解像度で、座標軸は以下の様に設定しています。
座標軸の設定はTFTの初期化パラメータで変更することができます。


Raspberryとの結線は上記のページで紹介されているままです。
ILI9340 TFT Rpi(Pin#)
SDI/MISO N/C
LED 3.3V(※1)
SCK SCLK(23)
SDO/MOSI MOSI(19)
DC/RS GPIO2(03)(※2)
RESET GPIO3(05)(※2)
CS CS0(24)
GND GND
VCC 3.3V

(※1)バックライトが明るすぎるときは100Ω程度の抵抗を挟んで下さい
(※2)プログラムの以下の箇所を変更することで、好きなピンに変更可能です。
#define D_C  2  // GPIO2=Pin#3
#define RES_ 3  // GPIO3=Pin#5

最初にbcm2835ライブラリをインストールします。
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.42.tar.gz
tar zxvf bcm2835-1.42.tar.gz
cd bcm2835-1.42
./configure
make
sudo make check
sudo make install

次にraspi-configを使ってSPIを有効にします。
Raspberry用のソースはこ ちらで公開して います。
git clone https://github.com/nopnop2002/ili9340spi_rpi
cd ili9340spi_rpi
cc -o demo demo.c fontx.c ili9340.c -lbcm2835 -lm
sudo ./demo



簡単なグラフィック関数が含まれています。




フォントファイルはFONTX形式のファイルを使っています。


複数のフォントを同時に使う事ができます。


ライブラリのソースでは
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0);
で通信していますが
bcm2835_spi_setDataMode(BCM2835_SPI_MODE2);
でも
bcm2835_spi_setDataMode(BCM2835_SPI_MODE3);
でも動きました。

続く...