JTAGについて

お約束ですが、このページのいかなる記載においても著者は一切の責任をおいません。

JTAGをいじり始めたのは、MIPSなルータのHACKのためだったんですが、いろいろな ところにメモが分散しているので、JTAG関係はここにまとめたいと思います。 JTAGについてはいろいろなところに説明のページがあるので、細かい話はそちらを 参考にしてみてください。

JTAGケーブルはパラレルポートを使ったものとUSBポートを使ったものの二種類に 分類される。Macには昔からパラレルポートはないので、USBのタイプしか使えない。 USBのタイプではFTDIのチップを利用したものが 多いようです。FTDIのチップの中でもmpsseという機能があるチップが使われています。 これはFT2232系や最近の232Hなどでもサポートされています。昔の232Rなどでは 使えません。

JTAGのオープンソースにはOpenOCDやUrJTAGなどがある。OpenOCDはデバッガで 大掛かりなシステムで、UrJTAGは比較的簡単なツールとライブラリの提供になって いる。

Flashを焼くことにも使えますが、JTAGの機能ではなくてJTAGを使ってできることに なります。焼けるFlashはCFIなタイプでSPIなFlashは焼けません。

ByteBlasterMV Parallel Port Download Cableを作ってurjtagを 我が家で、現役で唯一パラレルポートがあるFreeBSD/amd64 マシンのFreeBSD 10.2で試してみた。最初BIOSでパラレルポートがDisableに なっていて、EPP 1.9に設定してみたところ/dev/ppi0がでてきた。このデバイスを chmod a+rwにして、確認したところケーブルは認識されているようだが、ターゲット が認識されない。 あまり試していないがパラレルポートをつかったこの手のツールは機種依存で動かない ことも多いようだ。たまたま思い立ってもう一度確認してみたら、ボードが間違い だらけで、それを直しても動かない。しかたなくコードを見たらppi_set_control()で PPIGCTRLしているのを見つけてPPISCTRLにしたら動いた。

% ./jtag

UrJTAG 0.10 #1502
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

WARNING: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

jtag> cable ByteBlaster ppi /dev/ppi0
Initializing on ppi port /dev/ppi0
jtag> detect
IR length: 5
Chain length: 1
Device Id: 00000000000000000000000000000001 (0x0000000000000001)
Cannot open /usr/local/share/urjtag/MANUFACTURERS
  Unknown manufacturer!
chain.c(149) Part 0 without active instruction
chain.c(200) Part 0 without active instruction
chain.c(149) Part 0 without active instruction
jtag>

AR2313のFlashの焼き替えを試していたが160K程度に2時間近くかかり、早くできないか 調べてみた。urjtag 0.10のftdiドライバは2232Dの6MHzになっています。2232Hでは30MHz が使えるので、試しにOpcodeを追加してみたところ認識できない。いろいろ試したら TCKを1に設定して15MHzであれば認識や焼き込みが動作できた。ところがまったくはやく ならない。コードをみてみたところ、Flashのパラメータにより、一つず焼くか、 まとめて焼くか切り替えていていてターゲットにしているMX29LV320CTでは一つずつ しか焼けないので遅いようだ。

AR2313のflashmemは遅いのだが、すこぶる安定している。数十回は書き込みを行ったが 一度もエラーがなかったように思う。

PowerPCなボードで試してみているのだがFlashが認識できない。いろいろ試してみたと ころ0xffc000aaに0x98を書いてみると、0xffc00020からそれっぽいデータが読める。 同じ操作をしても必ず読める訳ではなく、たまに読めるのだ。 ところがすべてのデータで最下位ビットが化けて1増えているデータがある。 そもそもなんで0xffc00010からでないのかも謎?

0000020 51 51 53 53 59 59 03 03 01 01 41 41 01 01 01 01
0000030 01 01 01 01 01 01 23 23 37 37 01 01 01 01 05 05
0000040 01 01 0b 0b 01 01 05 05 01 01 05 05 01 01 17 17
0000050 03 03 01 01 05 05 01 01 03 03 07 07 01 01 21 21
0000060 01 01 7f 7f 01 01 01 01 01 01 ff ff ff ff ff ff
0000070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0000080 51 51 53 53 49 49 31 31 31 31 01 01 03 03 01 01
0000090 01 01 05 05 01 01 01 01 01 01 85 85 95 95 03 03
00000a0 01 01 ff ff ff ff ff ff ff ff ff ff ff ff 05 05
00000b0 11 11 31 31 31 31 17 17 ff ff ff ff ff ff ff ff
00000c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

秋葉のエレクトリックパーツで、ノートPC用のメモリを買ってきて、WN-G54/R3に 貼付けてみた。最初に貼付けたものは、スピードが遅いもので、次はいろいろやって いるうちにブリッジさせてしまいまたはがし、もう一回トライしてみて、どうにか なった。どうにかなったといってもかなり手こずったのだが、UrJTAGでpokeで 0x00000000にデータを書き込みpeekで拾ったところ1ビットの化けくらいでちゃんと 読めたので、何度も足の半田をなぞったところうまくいった。結局2日くらいかかり よっぽど暇なときにやるのがいいなと思った。

ルータのSDRAMは案外高速なものが使われていて、PC用のメモリはおそかったりする。 また使われているチップもほとんど16MByteなものがおおく32MByteなものはほとんど 見当たらない。チップのバス幅も8,16,32とかあり、ブートの作りによっては変えて しまうと動かなくなることも考えられ、SDRAM張り替えはあまりやらない方がいいの かもしれない。



Copyright (C) 2016 Hiroki Mori All Rights Reserved.