中華TFT液晶モジュールを動かしてみる(概論)

※今回の記事は適宜追加・修正していきます。

Arduino等のプロトタイプボードを使ってaitendoさんで売ってるようなMCUバスで動
かすタイプのTFT液晶を専用基板起こさずに無理くそうごかそうとするとどうしても
ジャンパ線山盛り配線になってしましますがこれを8bitじゃなくて16bitバスでやって
みるとどういうことになるかというと…
un
こういう地獄絵図になるわけでしてもう二度と横着しないと心に誓う。
さて、上の画像表示に使ったのはコントローラICにILI9327をもつDST9901A-NHと
いう3.2インチ、WQVGA(240x400)の液晶モジュールです。データシートには
コントローラICがHX8352Aとか書かれていますがブツはちゃんとILI9327です。
aitendoさんでも同じのを扱っていますが、私はtaobaoで他の商品と一緒に
まとめ買いした物です。
(ねむいさんはHX8352Aのものもちゃんと持っててこれはDST9901A-NHとくりそつなnです
が8月位に一度ぱ…動かしてるところをお見せしてますね〜…ぬふふ)


データシートや製品紹介に記載されてる内容が現物と全く違うとか言うのは
中華液晶だけでなく中華製品にはよくある話ですが、TFT液晶モジュールを使って
何かを作るのではなくてモジュールそのものを動作させ(ただけで満足して飽き)
ることが目的と化してしまったねむいさんが得た情報をtaobao経由の購入の
事例にからめてお伝えします。




基本的にTFT液晶(とOLED)モジュールは大きく分けてRGB,MCU,シリアルの3つの
接続方法があります。MCUバスとシリアルバスで接続できるモジュールはフレーム
バッファを内蔵したコントローラICを必ず持っていて、AVR等のメモリ資産が無い
小規模のマイコンでも簡単に扱うことができます。
今回はそのMCUバスとシリアルバス接続方式のモジュールついて説明します。

●MCUバス接続方式について

マイコンとモジュールを繋げる基本構成は下図のようになっています。
un
↑i8080タイプのMCUバスの場合
ほとんどのモジュールはi8080タイプの8bit若しくは16bitのMCUバスとして
アクセスを行います。一部のモジュールではM68kタイプのアクセス方式を選択
できるものがありますが一般的にi8080タイプのアクセス方式の方が圧倒的
多数となっています(例外的にHD44780とかはM68kタイプですね)。
中規模のマイコンが持っている外部バスで接続したときは、マイコンからは
アドレスが2つだけあるSRAMに見えることになります。

このi8080タイプの方式はMIPI AllianceDBI(Display Bus Interface) Type B
に相当します。

また、データバス幅はコントローラICのデータバス幅選択ピン、ILI系列のICならIMx
に当たるピンをモジュールへのリセット信号入力時に信号レベルを確定しておくこと
によって選択されます。モジュールによっては外部まで出ておらず、FPC上のチップ
抵抗の配置によって決定しなければならない物や16bit幅に固定されてしまっている
ものがあります。
逆に低解像度でサイズが小さいものはFPCの面積的に8bitに固定されていたりします。

以下にaitendoさんでも購入できるモジュール達のビット幅変更箇所等を。
STM025QVT-001はソフトウエアからビット幅が変更可能な逸品なので
おきぱにあるソースコードを参照のこと…。

un
YHY024006A
un
EGO028Q02
上二つはFPC上のジャンパ抵抗(0ohm)の配置でバス幅を決定。
un
un
WBX280V009
FPC上のジャンパ抵抗(0ohm)を画像の位置に移すとIM0ピンが外部に出る。
…と以前書きましたが最近出回ってるのは少し違う模様。
なんと写真に示すとおりFPC上のパタンで16bitバス固定になっていました。
8bitバスで使ってる方や、Ardunio使いの方は別のTFT液晶モジュールを
使用しましょう。
un
DST9901A-NH
ビット幅選択ピンは外部に出ている。FPC上に抵抗を実装できるパタンはあるが、
前途の理由でFPC上で作業は不要。

ちなみにFPC上の該当のピンにIMxが出ていなくて実質上NC(NoConnect)になって
るモジュールもありますが、UEW等の極細の線でジャンパを飛ばしてやれば無理やり
ですが外部から選択もできます。ていうかこうしておく方がなにかと便利ですよぅ!



●シリアル(SPI)バス接続方式について
マイコンとモジュールを繋げる基本構成は下図のようになっています。
un
今日びの一般的なマイコンではほとんど有しているSPIインターフェースを用いて
接続することができます。基本的にMCUバス接続方式とアクセスの手順は変わらず、
パラレルのデータバスがシリアルになっただけです。
比較的小規模の解像度のTFT液晶/OLEDモジュールがシリアルバスの接続方式を
有しています。一部のモジュールでは外部ピンの設定によりMCUバスも選択できる
ものがあります。
このとき一部のコントローラICではシリアルバス接続だとREADができないものが
あります(よってMISOが不要)。
ST7735は一つのラインがMOSI/MISOを兼ねていたりして制御は少々特殊です。
READもするのならハードウエアSPIよりGPIOのソフトSPIの方が使いやすいです。

この方式はMIPI AllianceDBI(Display Bus Interface) Type Cに相当します。


QVGA以上の解像度ではコントローラICがサポートしているにもかかわらず設定用
ピンが外部に出ていないためシリアルバス接続方式が選択できないものがほとんど
でしたが2023年ではHVGA(320x480)解像度でもSPIインターフェースがありますね…。
逆に大きい解像度のRGBインターフェースをもつパネルにもSPI用のピンが出ている
ことがありますが、これはリフレッシュレートやガンマ値の設定専用という
あくまでRGB_IF(MIPI DPI(Digital Pixel Interface))の補助用です。


以下にシリアルバスで接続できるモジュールたちを。
un
aitendoさんのおなじみ小型OLEDモジュール。バス選択ピンの設定によりMCUバス
接続方式も可能です。このキャリーボードはSPI固定になっています。
コントローラICはSSD1332。少々癖があります。
・CSは8クロック目でD/Cの同期をとるため、下げっぱではだめ。


un
同じくaitendoさんでも売ってるH161T01。これを使ったTFT-LCD Shield」が
MTM06でNetSynth.orgのブースにて販売されました!そうだね宣伝だね。
お問い合わせはshield.ioはねむいさんまで!!

un
taobao経由で購入したシリアルの他にRGB,MCUバスも選択できてQVGAな液晶。
しかし前途のとおりコントローラICがSUCKと言う罠

un
同じくtaobao経由で購入した、シリアルの他にRGB,MCUバスも選択できて
QVGAな液晶。これはコントローラICが馴染みのILI9325なのでさっきのと違って
暴走とかしないで安定して動きます♥♥
…と思ったらdeviceIDを調べるとILI9325フルコンパチのILI9328であることが
分かりました…。まぁこの程度のチャイナリスクは想定済みです。

un
最近ebayを試用したときにego-chinaさんから購入したSPI接続専用タイプの
TFT液晶モジュールJD-T18003-T01。コントローラは皆さんおなじみのST7735です。
高速性は必要なくてちょっとした表示に使いたいなんて時に重宝します♥
un
そして小動物の足。
20110519追:
JD-T18003-T01には型番・外見はまったく同じですが、中のコントローラICが
異なる品種(ST7735R)があります。
ST7735RのものはST7735と初期化手順が異なるのでST7735のコードでは一切
動きません!ご注意ください!

しかもご丁寧にRDIDxで読み出すデバイスIDまで一緒なので私のいつもの
ディスプレイドライバのソースはST7735とST7735Rは分けてあります。
敢えてそうしてあります。
un
↑購入したばかりの状態だと保護シールのはがしタブの色の違いで
 見分けがつきます…


さて、これらのマイコンから簡単に扱える液晶/OLEDモジュールは少し前までは国内
向けのリユース液晶をボッタ価格で購入せざるを得なかったのですが、現在は大陸系の
電子部品屋であるaitendoさんがいわゆる中華TFT液晶モジュールを販売していて、
日本国内でも使いやすく安価な液晶を手に入れることができるようになりました。

通常の電子工作に使用するならば入手性・価格性・資料性・ユーザともにaitendoさん
で扱っている商品で十分なのですが、もっとマニアックなのを使いたいとかあやしい
液晶モジュールををあえて動かしたいとかいう奇特な人にはtaobaoで購入することを
お勧めします。こっからが今日の本題です!



●taobaoで売っている商品を買う
先ずtaobaoのメインサイトで欲しい商品を検索して探します。検索のときには当然
ひらがなカタカナはNGです。TFT液晶モジュールを探すなら"液晶屏"とかのキーワー
ドを絡めてみましょう。

めぼしいものを幾つか見つけたら買いたいものをいったんリストアップしましょう。
国を跨ぐので中国国内送料に加えて国際送料がかかります。小種類・少数だと効率
が悪いのでよく考えて買う物を決めましょう。

買いたいものが決まったら日本国内で購入代行をしてくれる業者さんに依頼します。
日本国内から業者挟まないで直接購入するのは日本住みでなおかつ故郷にも生きた
銀行口座を持ってる中国人くらいしか無理だと思います。
購入代行業者さんも業務形態・料金の計算方法などはさまざまですので説明をよく読
んだり質問した上で自分が購入する予定の物・値段・量・そして店舗数を考慮して
最適なところを選びましょう。料金の支払いは、落札作業前と日本に発送される前の
2回にわけて請求されることがほとんどです。

業者さんを選んだら購入依頼のやり取りを行いますが出来るだけ詳細を伝えるように
してください。こちらでは周知のことでも担当の人は基本的に部品知識は無いので
意図が伝わらないことが有ります。これこれこういう理由でこうしてくれ・こう伝え
てくれとお願いしましょう。また、購入は現地の落札担当の人が相手先店舗の人とや
りとりを行うことがほとんどです。その際に不明な点がある時は質問が返ってくると
きがあるので丁寧に分かりやすく返答しましょう。また価格が半導体部品で1元とか
異様に安い値段設定されているものもありますが、これはたいてい万個単位で購入し
た場合の価格のことで、**個なら一つ**元だがそれでもいいか?と返事がきます。
逆に他の店舗と比べて2/3くらいの微妙に安い値段で取り扱ってるのはリマーク品や
フェイク品がまぎれている可能性があるためよく吟味してください。


それと超重要な事柄ですが相手先店舗が製品紹介文に"資料は配布する"と明記され
てある時は落札時に必ずもらうようにお願いしましょう。言わないとブツだけが
来て解析に大幅に時間がかかります。もらえるものは全部もらってください!
20110404追:
taobao代行王さんで購入代行依頼した際に上記のお願いしても無視されます。
自力解析出来るor過去に動かした経験がある物じゃないとお勧めできません


しかしこれだけよく考えてやりとりしてもお国柄とんちんかんになりがちですが…

…っというわけで落札が終わりお目当ての商品が届きます…物や地域にもよりますが
2010.12現在だと購入代行依頼してから早くて3週間弱で手元につきます。
いていEMSで届けられます。


●実際に解析して動かしてみる
un
↑2.2寸の液晶モジュール。
落札時にデータシートを送ってくれと何度も頼みましたが対応してくれませんでしたorz
こういうことは非常によくあります。仕方なく自分で解析を行います。
解析の流れは以下の手順で進めます。

 ピン配置の推定
    ↓
 コントローラICの推定
    ↓
 初期化手順の決定
    ↓
 基本動作確認


TFT液晶モジュールを数種類以上触られてる人はご存知かと思いますが、FPCの
ピン配置はメーカーが違えどほぼ同様の"定番"なパタンのものがあります。
たとえばEGO028Q02とWBX280V009はピン配置が全く同じでキャリーボードが
使い回しできたりします(YHY024006Aもピッチは違いますがピン配置は同じです)。
そのことから同じピクセルサイズ&インチ数の液晶モジュールの中でデータシートが
手に入るものを調べ、記載されているピン配置から詳細不明のモジュールの
ピン配置を推定することができます。

幸いにもこのモジュールは一目しただけでわかるレベルでパタンが別れていて
容易にピン配置を推定することができました。
un

次に、液晶のコントローラICの推定を行います。ピン配置の推定した時と
同じように似たサイズモジュールのデータシートより候補とするコントローラICの
型番を控えます。
2.2寸のものは176x220ピクセルの品種が多いようですね。176x220ピクセル対応の
品種をあらかじめ絞り込んでおきましょう。これをもとにコントローラ内の
レジスタの値を読み出し、コントローラICの決定を行います。大抵は00h番地の
レジスタにコントローラ固有の"device code"をもっています。

ILITEK系列のものはほとんどこれでコントローラの種類を判別できます。電源電圧は
LED用電源を除いて3.3Vでほぼ事足りますが、一般的にはLCDモジュールでは標準的な
2.85Vが作れたらそれに越したことは無いです。


しかしこの液晶モジュールは読みだしても0x00が帰って来るだけでした。違う番地の
レジスタに値を放り込んで読むと放り込んだ値が正しく返ってくることから読み書き
はきちんとできていることが分かります(これができていない時はピン配置の推定まで
戻って調査しなおしです)。

私は上の結果から、176x220ピクセル対応で特定のレジスタ番地にdevice codeが無い
品種のものとして"HX8340B"がこの液晶モジュールに使用されていると推定しました。
ここまで絞りこめたら後はネットでこの型番を検索して初期化手順を調べます。
たいてい中華サイトから見つかるでしょう。なんせ中華液晶モジュールですから…。


ところでコントローラICのレジスタの値を読み出すとか言ってるけど具体的にどうすれば
いいの?という話になりますが、私の場合は動作実績があるILI9325系列のプログラム
を使用し読み出しを行っています。これはChan氏が公開しているOLEDテスト用の
プログラムをベースに各液晶モジュールにも対応できるように構造化させたものです。
またchan氏のFatFsのテストプログラムも兼ねています。
おき
上のおきにあるコードで実践していますが、"汎用で使える抽象的なレベル"と"
デバイス固有のレベル"なコードとを分ける、プログラムのライブラリ化/モジュール化
をしておくようにすると、未知の液晶/OLEDモジュールを調査する時やトラブル
シューティング時の問題の切り分けにも役に立つかと思いますので、コードサイズや
速度を気にしない方に強くお勧めします。


話は脱線しましたが、HX8340Bの初期化手順を作り、確認用プログラムを走らせます。
un
おっし!
こんな感じで上手くいけたら目的達成です。画面が真っ白でうんともすんとも言わない
場合はピン配置やコントローラICの推定まで戻って解析を進めましょう。
この液晶、大きすぎず小さすぎずで手軽に扱える掘り出し物を引き当てたみたいで、
ねむいさん的にはとても気に入ってます♥
次構想してる基板に載せちゃおうかな見たいな
20110824追:
その後の調査で宇顺电子のS95329というS95215Aを改変したモジュールである
ことが確定しました。

20111110追:
さらにその後改訂版のデータシートを手に入れ"Read HIMAX Device ID"
コマンド(0x93)でDeviceIDを読み出すことに成功しました。


データシートや資料が手に入ればここまで苦労することは無いのですが、何せ相手は
大陸なので資料が手に入ったとしてもまだ安心はできません。ふつーに全く違うデバ
イスの資料付けてきたり素で勘違いしてたりなんて日常茶飯事で私が経験してるもの
だとコントローラICがILI9320ものを指定して購入したつもりが実際に動かしてみると
"ハズレ"のLGDP4531で、資料として送ってくれた"ILI9320"の初期化ルーチンとやらも
見比べるとLGDP4531のものだったとかあってもう勘弁してくだち…
もしLGDP4531のものを引いてしまったら奇声上げながら窓から投げ捨てる以外にない
とおもいますね…(←本気でやっちゃだめよ!)

というわけでオチが無い話をつらつらと書き殴ってしまいましたが、そこまでしてチ
ャイナリスク負いたくない人は中華液晶モジュールばっかいじってる奇特な人と仲良く
なって動作が保証されてるのを譲ってもらうのがいちばんだとおもいまし た!
それといつまでも液晶デバイスばっかいじってても進歩がないので次はまぢで新しい
別の試みに手を出していこうと思います。


ちなみにおきで今もメンテを行っているSTM32F4向けTFT液晶モジュール表示
サンプル
は以下のコントローラICに対応しています。いろんなサイト巡って集めて
きて、すべて動作確認を取っています。
当エントリは何気に当ぶろぐの一番人気のメインコンテンツの一角となってます!

20161028追:
現在、液晶ブームはひと段落したのか今度はESP-WROOM-02関連の記事が仏契です。
次点はブラウザベンチマークとか日本の自然歩道です。

20230801追:
ESP32やRaspi関連の絡みで液晶関連で参照数と問い合わせが
増えてきました…このエントリもだいぶ追い上げてます…!


↓以下、動作確認済みのTFT-LCDコントローラICです↓

*ILITEK
ILI9160
ILI9163B
ILI9163C
ILI9132
ILI9220
ILI9222
ILI9225
ILI9225B
ILI9225C
ILI9225G
ILI9320
ILI9325
ILI9325C
ILI9326
ILI9327
ILI9328
ILI9331
ILI9335
ILI9338B
ILI9340
ILI9341
ILI9341V
ILI9342
ILI9481
ILI9486L
ILI9488
ILI9806H(HALF-RAMモデルのためMCUバスには向かない)
ILI9806G

*Renesas
BD663474
HD66772
HD66773
R61514S
R61503U
R61505
R61505U
R61505V
R61505W
R61509
R61509V
R61526
R61580
R61581
R61581B0
R61408

*Himax(奇景光電)
HX8309A
HX8310A
HX8312A
HX8340A
HX8340B(T)
HX8340B(N)
HX8345A(T)
HX8346A
HX8347A
HX8347D
HX8347G
HX8352A
HX8352B
HX8352C
HX8353C
HX8353D
HX8357A
HX8357B
HX8357C
HX8357D
HX8369A
HX8369A-00
HX8369A-01

*NEC
uPD161704A

*Solomon Systech (International) Limited
SSD1332(OLED)
SSD1339(OLED)
SSD1351(OLED)
SSD1283A
SSD1286A
SSD1289
SSD1297
SSD1298
SSD2119
SSD1963(外付けタイプ)

*EPSON
S1D19122
S1D19105

*Sitronix
ST7735
ST7735R
ST7732
ST7781
ST7785(ST7787とまったく同じコードで動く/バスアクセスはかなり遅くすべし)
ST7787(バスアクセスはかなり遅くすべし)
ST7789V2

*MagnaChip
MC2PA8201(Nokia6300 & NokiaE51)
D51E5TA7601(HALF-RAMモデルのためMCUバスには向かない!)

*LG
LGDP4511
LGDP4531(←VCCヲ2.8V以下にしないと不安定になります!!!)
LGDP4535
LGDP4522
LGDP4524
LG4538(LGDP4538の誤字ではない)
LGDP4525
LGDP4551

*Samsung
S6E63D6(OLED)
S6B33B6(CSTN)
S6D0117
S6D0128
S6D0129
S6D0144
S6D0151
S6D0154
S6D0164X1
S6D1121
S6D05A1
S6D02A1
S6D04D1

*Raydium(瑞鼎科技股份有限公司)
RM68050(ILI9325と全く同じ)
RM68070(ILI9335と全く同じ)
RM68042
RM68090
RM68110
RM68120
RM68130
RM68180


*Orise Tech(旭曜科技)

SPFD5420A
SPFD54124B
SPFD54126B
SPFD5408A
SPFD5408B
OTM3225(ILI9325とまったく同じ)
OTM8009A(STM32F769I-discoveryでDSIにも対応)
OTM8012A(HALF-RAMモデルのためMCUバスには向かない!)
OTM4001A(R61509Vと全く同じ)

*統宝光電
C1L5-06
C1E2-04


*Novatek Microelectronics(聯詠科技股份有限公司)

NT3915
NT39106
NT39116B
NT35510
NT35516
NT35702
NT35582

*Tomato LSI Inc
TL1793
TL1771


*その他

SEPS525(OLED)
REL225L01
FT1505C











おまけ
駄目押しチャイナリスク
un
↑ワーィ USB3.0のExpressCardだ〜!
un
↑ウボァー!

Go to top of page