chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

DN-G200にJTAG(HJ-LINK/USB)をつなぐ(その2)

JTAGで何か操作するには、内部接続状況を定義したBSDLファイルが必要だけど、PPC405のBSDLはどうやっても手に入らず*1PPC405にJTAGを繋ぐのはあきらめかけていた。そんな中、たまたま見かけた、UrJTAGというツールでは、BSDLと完全に同一ではないけど、同じような意味を持つUrJTAG Data Filesというのがあって、ファイル群の中にPPC405の定義が含まれていた。これを見ると、405内部でバウンダリスキャンがどう繋がっているか、コマンドのBIT列がどうなっているか知ることができる。
JTAGの情報を得ることができたので今後の進め方は二つあって、、UrJTAGのDataFileから逆に 405用のBSDLを捏造するか、あるいは、この情報をベースにPPC405専用のJTAG制御ソフトを作るか。。
理解できないままに当てずっぽうにBSDLを作ってもわけわからんままに終わりそうなので、PPC405専用のJTAG制御ソフトを作ってみることにした。
要は、、ライブラリ経由でFT2232を叩いて任意の波形を出せばいいのだ。FTDIが提供するライブラリとして、FTCJTAG.dllというのと、FTD2XX.dllというのがある。FTCJTAG.dllの方がレイヤー高いようなのでこれを使ってJTAGを制御してみることにした。幸いに、FTCJTAG.dllの資料やサンプルソースは容易に入手可能である。といいつつ、基本的な事柄を押さえず、しかも部分的にしか集まらない情報を繋ぎ合わせながらプログラムを作っているのでいろんなトラップに落ちた。。が、まぁなんとかHJ-LINK/USBのハードからTCK、TMS、TDIを出力するところまではこぎつけた。左のオシロの画像は、TMS(赤)とTCK(黄)を確認しているところ。なんとなく状態遷移を辿っているようには思える。それらしい出力が可能になったのてPPC405内部の情報を取ってみようと思い、デバイスIDを取得しようとJTAG_READ関数を試みた。が、、データは取れるには取れるがランダムの数値の羅列のような状態。。やっぱりJTAGをちゃと勉強しないと、そもそも状態遷移が正しいのか、どうやってTAPを動かしたらいいのか全く分からず。。

■追記 Web上に公開されたコードを用いてデバイスIDが読めるようになった
いろんな情報を集めてなんかデバイスIDを読んでみようと試みたがうまくいかなかった。あれこれぐぐっている中で、酔漢電子工作手帳さんがFTCJTAGのサンプルとしてデバイスIDを読むC#コードを掲載しておられ、その通り*2に書いてみた。結果、さっくりとPPC405のデバイスIDが読めました。Thanks!! ちなみに、、PPC405GPのデバイスIDは 0x42050049。。 これでハードは出来上がったので、あとはソフト(ロジックの世界)だけの問題になる。。ちょっとゆっくり寝られるのだ。PPC405用のJTAG制御ソフトが今の時代にどれだけ有用なのかわかりませんが、Flash Memoryが書き換えられるレベルまで仕上げられたらソース公開します。

■追記
JTAGを理解するために電子書籍を購入。。(1500円。。まぁ安いといえば安いか。。?)
JTAGテストの基礎と応用【PDF版】
http://cc.cqpub.co.jp/lib/system/doclib_item/1033/

■ご参考URL
酔漢電子工作手帳さん::IDコード読めた
http://ecrafts.g.hatena.ne.jp/suikan/20070902#1188712948

■追記(120901)
バイスIDが安定して読めるようになったので、あとはコマンドやらシーケンスを実装すればいいだけかと思ったけど、どうも意図したピンを上下できないようである。一度に複数上下しているのか、あるいは別のピンが上下しているのかすらわかっていないけど、、とにかく、A0/D0とかをL/Hしようとしてもそのピンはレベルが変わらない。。やっぱり情報が間違っているのか、あるいは、JTAGコマンドの呼び出しかたを間違えているのか。。引き続き迷路は続く。。

■追記(120926)
BeagleBoneがやってきたり、もうすぐRaspberryPiが届く(はず)予定だったりで、このケモノミチを歩むネタはちょっとお休みです。

*1:現在の製造元であるAppliedMicroのCSにBSDLが欲しいとメール送ったけどスルー。。

*2:自分はCだけどまぁAPIの呼び方は同じ