KoboのJTAG配線を引き出してバウンダリスキャンする(2)
さて、KoboのJTAGがどこから出ているかわかったので、Koboの背中に穴をあけて、JTAG信号を筐体の外に取り出します。
取り出した配線を、ホットボンドで固定して、完全に違う目的のガジェットが出来上がりました。
このJTAG対応Koboに対してMITOUJTAGを使ってみて、いろいろわかってきました。
まず、Koboの画面の表示が変わるときにEPDC_*という端子が動きます。EPDC_*のデータバスは8bitのようです。画面が変わらないときには、EPDC_*は全く動きません。Koboのディスプレイパネルを使って別のおもちゃを作りたいときが来たら、さらに解析することにしましょう。
また、Koboを7.5秒間操作しないと、SDRAMの信号が止まってしまうこともわかりました。きっと軽い低消費電力モードに入るのでしょう。
あと、電源スイッチの横にあるLEDは、緑がB3番ピン、赤がB5番ピン、青がF5番ピンにつながっていることもわかりました。筐体表面にある唯一のボタンはD1番ピン(KEY_ROW0)につながっていることもわかりました。
MITOUJTAG上でスクリプトを書いて、このLEDを赤・青・緑・白とチカチカさせることにも成功しました。
といっても、JTAGバウンダリスキャンでできることは、このくらいが限度です。
※Koboの基板上にはNXP製のI2C温度センサがあるので、あとはこれを読むことくらいが精一杯か。
さて、このi.MX507という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禁止モードもあるようです。
KoboをJTAGバウンダリスキャンすることで、端子のI/Oの状態はいろいろわかったけれども、特にこれ以上できることはなさそうです。
もし、Cortex-A8に対応したJTAGデバッガをお持ちの方がいらっしゃいましたら、JTAG_MOD=Lにして、JTAGデバッガをつないでみてください。
| 固定リンク
コメント
DMAがあるってことは、メモリマップ等取得できてアドレスが判ればデバッグモニタ流し込めるんじゃないですか?
投稿: | 2012.08.19 16:00
なるほど!DMAがJTAGで動けば、動いているCPUのメモリ状態が自由自在にできますね!
そういう目的でSDMAにJTAGパスが通っているのかも。
ちょっと調べてみます。
投稿: なひたふ | 2012.08.20 10:46