ピン接続が分からないJTAGピンをFTDIのBitBangで総当たりするプログラムを作ってみました。
同じレポジトリにあるjtagtest.cをベースにしましたが、jtagtest.cはmpsseで作られていたのでBitBangに書き換えました。mpsseに移植したのは自分ですが、FTを使い始めた最初の頃で、今見るとなにやってるのかさっぱり分かりません。mpsseはA0がCKL固定になってしまうのでBitBangで書き換えました。
JTAGの処理はSYNC BitBangでおこなっていて、以下のように2バイトのtms,tdi,tckをFT_WriteしてFT_Readの2バイト目をtdoとして処理してます。
SYNC BitBangではWriteしたデータ変化が反映される直前のデータがReadされるようです。またWriteした数しかReadできません。
Macの雪豹で作りましたが、MacであればFTDIのライブラリの在処をMakefileで書き換えればビルドできると思います。
FT232HのA0からA4までをつなぎ確認できます。誤って拾うケースもあるので、これで特定できたらUrJTAGなどで確認してください。
bash-3.2$ ./jtagscan
Scan Start
3:TCK 1:TDI 4:TDO 2:TMS 0:nTRST
IDCODE: chain -0, 159463d3
tdo sequence 11 found at IR 5
The IR chain length is 4
120通りを人力でやるのはしんどいので、作ってみました。
TCK, TDI, TMS, nTRSTの4本はプルアップされているまたは抵抗のランドが用意されている事が多く、TDOはそのままの事が多いです。
JTAGなターゲットは3.3V系がほとんどなのでFT232Hを使うのが良いです。
昔AVRを使って作っていた人も見つけましたがFT232Hの方がお手軽だと思います。
製品もあるようです。
MacBook AIR Originalの雪豹でスキャンに5分弱かかります。もう少し早くしたいです。あと8本なり16本でスキャンできるようにもしたいです。