中華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等の極細の線でジャンパを飛ばしてやれば無理やり
ですが外部から選択もできます。ていうかこうしておく方がなにかと便利ですよぅ



●シリアルバス接続方式について
マイコンとモジュールを繋げる基本構成は下図のようになっています。
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がサポートしているにもかかわらず設定用のピン
が外部に出ていないためシリアルバス接続方式が選択できないものがほとんどです。
逆に大きい解像度のRGBインターフェースをもつパネルにもSPI用のピンが出ている
ことがありますが、これはリフレッシュレートやガンマ値の設定専用というあくまで
RGB_IF(MIPI DPI(Digital Pixel Interface))の補助用です。


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

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のコードでは一切
動きません!注意!

しかもご丁寧にデバイスIDまで一緒なので私のいつもののディスプレイドライバの
ソースはST7735とST7735Rは分けてあります。敢えてそうしてあります。




↑購入したばかりの状態だと保護シールのはがしタブの色の違いで
 見分けがつきます…


さて、これらのマイコンから簡単に扱える液晶/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関連の記事がぶっちぎりです。
次点はブラウザベンチマークとか日本の自然歩道です。

*ILITEK
ILI9160
ILI9163B/C
ILI9132
ILI9222
ILI9225/B/C/G
ILI9320
ILI9325/C
ILI9326
ILI9327
ILI9328
ILI9331
ILI9335
ILI9338B
ILI9340/C
ILI9341
ILI9342
ILI9481
ILI9486L
ILI9488
ILI9806H(HALF-RAMモデルのためMCUバスには向かない)
ILI9806G

*Renesas
HD66772
HD66773
R61514S
R61503U
R61505U/V/W
R61509/V
R61526
R61580
R61581/B0

*Himax
HX8309A
HX8310A
HX8312A
HX8340A
HX8340B(T)
HX8340B(N)
HX8345A(T)
HX8346A
HX8347A/D/G
HX8352A/B/C
HX8353C/D
HX8357A/B/C/D
HX8369A/-00/-01

*NEC
uPD161704A

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

*EPSON
S1D19122
S1D19105

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

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

*LG
LGDP4511
LGDP4531(←VCCの立ち上げを遅くしないと発熱して暴走します!!!)
LGDP4535
LGDP4522
LGDP4524
LG4538(LGDP4538の誤字ではない)
LGDP4525
LGDP4551

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

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

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

*統宝光電
C1L5-06
C1E2-04

*朋億股份有限公司(NOVA TECHNOLOGY)
NT3915
NT35510
NT35702
NT35582

*Tomato LSI Inc
TL1793
TL1771


*その他
SEPS525(OLED)
REL225L01
FT1505C


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

Comments

( ´△`)あぁー
最後のやつは中で繋がってるだけのヤツですね、多分…
ご愁傷様的な感じ。

Expressカードスロットが空いててUSBコネクタが欲しい時、
に使えるパーツかとw

aitomo様、はじめまして
ねむいです。

幸い(?)にもUSB2.0のHI-SPEEDは使えたので普通の
USBハブ代わりに使います…。

Post a Comment








Go to top of page