オリジナル16ビットCPUコアMoscoviumで使用しているSPI-TFT表示器をアップグレイドしたつもりが、筆者にとって必須とも言える、グラフィックRAMからの読み出し機能が使えないモジュールであることが判明したSPI-TFT(ST7789V)について、その状況を打破する方法が無いか?もがいてみたいと思います。
状況を打破できなければ、お蔵入り(使い道無し、ごみ箱🗑️行き)となる瀬戸際です……。
データシートなどから明らかなのは、SPI-TFT(ST7789V)のドライバチップST7789Vから引き出されたSDA端子は、SPI通信線のMOSI/MISOが多重化された双方向信号だという事です。
ただし、モード設定端子IM3=LOWの場合に限ります。IM3=HIGHの場合は、SDA端子がMOSI、SDO端子がMISOと、各々単方向の端子となります。
グラフィックRAMからの読み出しが機能しないという事は、基板上で何か余計な回路が形成されているのでしょう。
インターネットで手を尽くして探してみたのですが、残念ながらSPI-TFT(ST7789V)の物と思われる回路図は見つかりませんでした。
止むを得ず、SPI-TFT(ST7789V)の基板パタンを観察して、追跡して見ることにしました。
と言っても、基板表面はTFTパネルの下に隠れてしまって、配線パタンを確認することができません。ドライバチップST7789Vも、TFTパネルの下に実装されているらしく、IM3端子の状態は確認できません。
もし、IM3=HIGHに設定されていた場合は、もうお手上げです。よってIM3=LOWである事に賭けて、先に進めようと思います。
目視で追えるのは裏面一層だけです。それでも幸いな事に、ピンヘッダによる信号線の引き込みから、初段回路素子までの結線を確認できました。
追跡すべきはST7789Vのデータ線SDAであり、SPI通信線のMOSI/MISOが多重化された端子です。基板のピンヘッダにシルクで表示されたSDA端子から配線パタンを追跡すると、以下の様な素子を通っていました。
ピンヘッダ(SDA) → ダイオード(D4) → 抵抗(R2)
ダイオードと抵抗は面実装のチップタイプで、かつ、もの凄く小さいです。小さすぎてマークは視認できません。よって、ダイオードの型名や種類・極性に至るまで不明ですし、抵抗値も不明です。それどころか、シルクの素子記号D4,R2からの類推なので、そもそも、ダイオードと抵抗かどうかも不確定です……(ここは信じるしかない)。
基板裏面には他にも、シルクでQ1と記された3端子の素子が見えました。この素子にはピンヘッダからVCCとGNDが繋がっているため、三端子レギュレータの類だと推測しました。
これを頼りに、VCC−GND間に通電して各所の電圧値を測定し、もう少し回路構成の把握に努めようと思いました。Arduino UNO+Logiscopeを使い、以下接続表の装置を組み立てて観測してみます。
| Arduino UNO | 接続 | SPI-TFT(ST7789V) |
| 5V | → | VCC |
| GND | ⇔ | GND |
| D10 | → | SDA |
| A0 | ← | 各所、測定点へ接触 |
A0端子へ引き入れたジャンパ線の反対側をSPI-TFT(ST7789V)の各所に接触した状態で以下の様に電圧値を計測して行きます。
実験サンプル:【 】内はLogiscopeからの送信データ
【ina,0】 …… UNOの5V端子を計測した例
OK: analogRead(0)=1023, 4.995V
その結果を下図に示します。SPI-TFT(ST7789V)裏面の写真に、各測定点の電圧値を記入してみました。

色々ツッコミどころがあるので、以下に考察します。
考察:
さて、ここまでにSDA入力回路に接続された素子の配置が判りました。
基板上に三端子レギュレータが存在する事から、入力段の回路(D4およびR2)は恐らく、クランプ回路か、レベルシフタ回路の類であろうと推察しました。
以降、入力段の素子(D4およびR2)がレベルシフタ回路と仮定して解析を続けます。
ダイオードを使ったレベルシフタ回路例を以下図に示します。

入力端子Viから追っていくと、まず、ダイオードD4を通って、抵抗R2を抜け、電源Voutに到達しています。SPI-TFT(ST7789V)基板の観察や各所電圧測定結果と比較して矛盾の無い回路だと考えられます。
続いて、LTspiceによるシミュレーション結果を下図に示します。

縦軸に電圧、横軸に時間経過を取ったspiceシミュレーション波形です。Vi側の5V信号(緑色線)が、Vo側で3.3Vに制限され(赤色線)、レベル変換されたことが解ると思います。なお、Vi=LOW側では、Vout → R2 → D4 → GNDと電流が流れるため、Vo端子はダイオードの順方向電圧Vfに相当する浮きが見られます。
※こちらの回路例では、普通のPN接合シリコンダイオード1N4007を使用しました。もし、LOWレベル側の浮きを低減したいなら、D4にVfの小さいショットキバリアダイオードを選択するのが吉です。
ダイオードには、電流が流れる方向と、流れない方向があることは周知の事です。この特性によって、上図の回路はVi側からVo側へ信号が伝わりますが、逆向きのVo側からVi側へは信号が伝わりません。つまりこれは、単方向(入力専用)のレベルシフタなのです。
※本HPでいつも使っている、双方向レベルシフタ(L/S)については、こちらをご覧ください。
本来双方向の信号線である、SDA端子(MOSI/MISO多重化)に単方向レベルシフタが適応されているので、SPI-TFT(ST7789V)からの読み出しができない基板となっている様です。
犯人見っけ(容疑)。
ついに犯人の尻尾を捉まえました。次回衝撃の展開!……って言うほどではない(1^_^;)。スミマセン、大げさでした。次回をお楽しみに。


