楽天Koboのバウンダリスキャン
平成24年8月17日
Koboという電子ブックリーダがあります。
ARM9 Cortex-A8 のSoC i.MX507やi.MX508が乗っていて、末端価格7900円くらいで売られているのでとてもお得なボードです。このKoboをARM Cortex-A8 評価ボードにするため、基板を解析してJTAG配線を引き出すことにします。
Koboを分解しよう
まず、ジャンクで構わないのでとりあえずKoboを入手します。
最初の1台目は動かなくても映らなくても結構です。
蓋を開けて、基板を眺めてみます。
次に、基板を取り外します。基板上にはJTAGと書かれたコネクタはありませんので、どこにJTAGの端子が出ているかはわかりません。
じっくりとCPUを眺めます。IMX507と書いているので、きっと507なのでしょう。購入した時期によっては508が乗っていることもあるようです。
このCPUはこれで見納めです。心置きなくみておいてください。
CPUをはがす
ヒートガンを用意して、CPUをあぶります。
少し焦げたけれど、CPUは無事外れました。
ちょっとあぶりすぎたので基板がこげてしまいましたが、問題ありません。
基板を少し綺麗にして、i.MX507/i.MX508のデータシートを見ながら、JTAGの端子が基板上のどの配線につながっているかを解析します。難しく考えず、テスターを使って導通チェックをすればよいでしょう。
解析した結果は次のとおりでした。
2台目のKoboを用意する
次に2台目のKoboを用意し、先ほど解析したJTAGの信号にJTAGケーブルをつなぎます。
電源の2.8Vは3端子レギュレータの部分から取り出します。
MITOUJTAGを使ってみる
MITOUJTAGを起動して、自動認識させます。すると・・
ちゃんとIDCODE=02D0101Dのデバイスが認識されました。
ここで、iMX50のBSDLファイルを割り当てると、
このとおり、端子の状態が可視化できました。
Kobo起動時のLEDの点滅の状態や、
Kobo起動時のSDRAMの状態も見えました。
ちなみに、KoboのSDカード自体には何も手を加えていないので、Koboのデフォルトのソフトウェアがそのまま動いています。
Koboをi.MX508の評価ボードにするために・・・
さて、KoboのJTAGがどこから出ているかわかったので、Koboの背中に穴をあけて、JTAG信号を筐体の外に取り出します。
取り出した配線を、ホットボンドで固定して、完全に違う目的のガジェットが出来上がりました。
EPDC_*端子の動き
このJTAG対応Koboに対してMITOUJTAGを使ってみて、いろいろわかってきました。
まず、Koboの画面の表示が変わるときにEPDC_*という端子が動きます。EPDC_*のデータバスは8bitのようです。画面が変わらないときには、EPDC_*は全く動きません。Koboのディスプレイパネルを使って別のおもちゃを作りたいときが来たら、さらに解析することにしましょう。
SDRAMのシャットダウンが見えた!
また、Koboを7.5秒間操作しないと、SDRAMの信号が止まってしまうこともわかりました。きっと軽い低消費電力モードに入るのでしょう。
KOBOのLEDをJTAGで操作する
電源スイッチの横にあるLEDは、緑がi.MXのB3番ピン、赤がB5番ピン、青がF5番ピンにつながっていることもわかりました。筐体表面にある唯一のボタンはD1番ピン(KEY_ROW0)につながっていることもわかりました。
MITOUJTAG上でスクリプトを書いて、このLEDを赤・青・緑・白とチカチカさせることができました。
といっても、JTAGバウンダリスキャンでできることは、このくらいが限度です。
※Koboの基板上にはNXP製のI2C温度センサがあるので、あとはこれを読むことくらいが精一杯か。
i.MX507/508のJTAG_MODについて
i.MX507/508というCPUには、JTAG_MODという端子があります。この端子の状態によって、i.MX507のJTAGの機能は大きく変わります。
一般的にARM系のデバイスは、SoCといって、ARMのコアと、周辺のペリフェラルの部分が別々に設計されて、1つのチップに乗っかっています。i.MX507をi.MX507たらしめている様々な周辺ペリフェラル部分はFreeScaleが設計して、Cortex-A8の部分はARMが設計しています。
このように、複数のデバイスが複合されたものなので、JTAGのチェーンは、FreeScaleの部分(SJC)だけを通るか、ARMの部分を通るか、という選択ができるようになっています。それが、JTAG_MODという端子の役割です。
JTAG_MODがLレベルの場合は、SJC(System JTAG Controller)というFreeScaleの部分と、SDMA(Smart Direct Memory Access Controller)と、DAPという3つのデバイスが内部でチェーン接続されます。
JTAG_MODがHレベルの場合は、SJCだけがチェーン接続されます。
(i.MX50リファレンスマニュアルより引用)
謎デバイスについての考察
先日のiW-RainboW-G13Sというi.MX508評価ボードでは、「SJC」と「謎デバイス」と「DAP」が見えていると書きましたが、おそらくこの基板でのJTAG_MODはLだったのでしょう。KoboではデフォルトではSJCだけが見えているので、JTAG_MODはHなのでしょう。
そこで、JTAG_MODをLにすると、ちゃんと3つのデバイスが見えるようになりました。真ん中のSDMAというデバイスは、i.MX507のDMAコントローラなのですが、これをJTAGで操作すると何が起こるかというのはわかりません。また、本物のSDMAが見えているのではなく、alternateな物が見えているという話も、ハードウェアマニュアルに書かれています。
さて、JTAGでこんなことができると、セキュリティ的に大丈夫なのかと疑問を持たれるかもしれません。調べたところ、i.MX507のJTAGのセキュリティには3段階あって、
① デバッグ不可。最大セキュリティ
② セキュアJTAG。チャレンジ・レスポンスによって第三者のアクセスを排除する。
③ JTAG許可。低セキュリティ。常にデバッグ許可。
が選択できるようになっています。選択といっても、eFUSEという内蔵のヒューズを焼き切ることで行います。eFUSEは一度設定すると元に戻せませんから、工場でプログラムを書き込んだときにデバッグ禁止に設定できるわけです。
ここで禁止されるJTAGというのは、ARMのCPUのICE(実行中の命令を置き換えたり、メモリやレジスタの中を覗き見る機能)を意味しています。つまり、CPUに内蔵されたヒューズを焼き切ってしまえば、JTAG ICEをつないでもデバッグができなくなります。ただし、プログラム上から一時的にJTAGデバッグを可能にするレジスタもあるようですので、開発した会社なら製品出荷後もデバッグできるような方法を残しておくことも可能です。
バウンダリスキャン(I/O端子の状態をのぞき見る機能)は、このセキュリティ制限の対象外ですので、JTAG ICEが禁止されている状態でも使えるようです。ただし、バウンダリスキャンも禁止するような完全なJTAG禁止モードもあるようです。