月別アーカイブ: 2010年5月

FT2232CでHJ-Link/USBのソフトを動かす

インターフェース6月号で安価なJATGアダプタとして紹介されているHJ-Link/USBですが
OpenOCD互換であり自分で作ったツール工房のFT2232基板を使ったARM用のアダプタでも
動作するのではないかと試していました。HJ-Link/USBのソフト
ハードはARM用の20pinコネクタからSH用の14pinコネクタの変換基板を作成しました。
とりあえずgccでコンパイルしたファイルをダウンロードして
実行出来るようなったのでそのまとめです。
listexportを(5/30追記 消えていますが同様の処理するlistexp2が利用出来ます。)
使ってftd2xx.dllからソースを生成して以下の処理を追加すます。
2232Hで追加されたコマンドを無視する。
初期化の応答を書き換える
クロックの設定をFT2232Cに合わせて6,4,3,2.4MHzにする(15,10,7.5,6MHzの設定に対応)
オリジナルをftd2xx_org.dllに名前を変え、作成したftd2xx.dllと一緒に
実行ファイルにあるフォルダにコピーすることで動作します。
またFT_GetDeviceInfoの結果を書き換える事でEEPROMの書き換えは必要なくなります。
ソースファイル
コンパイルはbcc32を使っています。VCでも大丈夫だと思います。
ftd2xx.cppの定義を変える事で機能を指定できます。

5/23追記
2chの掲示板でFT2232Hで動かなかったとの書き込みが有ったので
起動時のログ
です。起動しない場合の参考にはなるのでないかと思います。
ソースファイルですがLOG_DATA 0にするとエラーになります。
HJ_LINKで書き換えるのに使っている変数の定義が無効にになるためで
必要なら修正してください。

ftd2xx.dll(3)

昨日
>8aが2232H(まだ資料が見つからない)で追加されたのなら動くようにならないですね。
と書きましたが
AN_108_Command_Processor_for_MPSSE_and_MCU_Host_Bus_Emulation_Modes.pdf
がありました。

>FT_Write:size=6:8a,97,8d,_____8aの説明がない
8a– Disables the clk divide by 5 to allow for a 60MHz master clock.
97– Disable adaptive clocking
8d– Disables 3 phase data clocking.
すべて”6 FT2232H / FT4232H ONLY”でした。

それなら上記3バイトを送らないようにしたところ”Setup Again?”となりました。
ーーーーーーーーーーー2232Hのみのコマンドを送った場合
FT_Purge:3 —–This function purges receive and transmit buffers in the device.
FT_Write:size=3:80,10,1b,
FT_Write:size=3:82,0e,0f,
FT_Write:size=6:8a,97,8d,86,01,00,
FT_Write:size=1:85,
FT_Write:size=2:81,87,
FT_GetQueueStatus:07 —Gets the number of bytes in the receive queue.
この後もFT_GetQueueStatusが続き同じ戻り値
ーーーーーーーーーーー送らない場合
FT_Purge:3
FT_Write:size=3:80,10,1b,
FT_Write:size=3:82,0b,0f,
FT_Write:size=3:86,01,00,
FT_Write:size=1:85,
FT_Write:size=2:81,87,
FT_GetQueueStatus:01
FT_Read:size=1,1:f4,
ーーーーーーーーーーーー
FT_Readを出すようになったので少し進んだようですが期待値と違うようです。
nSRSTで読める値が変わりL=b4,H=f4になっています。
やっぱり駄目みたい。

最初のFT_Readする値を0に書き換えてやると無事起動しました。
プログラムのダウンロードまで成功しますが実行させるとエラーになってしまいました。
開始アドレスを間違えていただけでした。gccでコンパイルしたファイルが無事動きました。

ftd2xx.dll(2)

5/13に判らなかった出力の設定をがわかりました。
FT_writeで書き込んでいるデータがコマンドになっているんですね。
参考:AN2232C-01_MPSSE_Cmnd.pdf
で最初に実行している部分は
FT_Write:size=3:80,10,1b,____Set Data Bits Low Byte
FT_Write:size=3:82,0e,0f,_____Set Data Bits High Byte
FT_Write:size=6:8a,97,8d,_____8aの説明がない
_______________86,01,00,_____Set TCK/SK Divisor(クロックの設定を変えるとここが変わる)
FT_Write:size=1:85, ___________Disconnect TDI/DO to TDO/DI for Loopback
FT_Write:size=2:81,___________Read Data Bits Low Byte
_______________87,___________Send Immediate
Set Data Bitsは、0xValue,0xDirection順のデータになります。
nTRST,nSRSTのゲート部分がHで出力はHi-Zになっているようです。
SH-2A側でプルダウンしているので当然Lレベルで現象とも一致します

8aが2232H(まだ資料が見つからない)で追加されたのなら動くようにならないですね。