« Trenz社製品ページの検索機能が動くようにしたった | トップページ | Spartan-7のLUT使用率が100%近くなるとどうなる? »

2020.03.21

MPSSE-JTAGで一応バウンダリスキャンに成功

FTDI社のFT2232HにあるMPSSEを用いたUSB-JTAGをMITOUJTAGから使うためのプラグインを作りました。

一応、このように動いています。

Mpsse_jtag

分かってきたことは、DigilentのUSB-JTAGもMPSSEとしてオープンできるということです。Digilent USB-JTAGはMPSSEの上に1枚ラッパを掛けたものなのでしょう。

FTDIのアプリケーションノートAN_129では

ftStatus |= FT_SetLatencyTimer(ftHandle, 16);

と、LatencyTimerを16msに設定していますが、この値にすると毎秒20回くらいのバウンダリスキャンしかできず、遅くなります。

実際にはFT_SetLatencyTimer(ftHandle, 1)で十分なようです。1に設定すると1.6msに1回くらいのバウンダリスキャンができるようになります。Digilentのライブラリも1に設定しているように見えます。

これを0にすると、なぜだかキュルキュルーという音が聞こえるようになります。PCが鳴っているのかFTDIのチップが鳴っているのわかりませんが、0は良くないのでしょう。

MPSSEで苦労することは、FT_ReadでTDOから受信したデータを読み取るときに、最後の1バイトは配列の最後にシフトされた形で入っていますが、それを1つ前のバイトにコピーしてやらねばならないことです。しかも、JTAGのデータ長(bit)が8の倍数かどうかでシフトさせるかどうかが変わるので、

if(len & 7) {
    rx_buffer[bytelen-2] = rx_buffer[bytelen-1] >> (8 - (len & 7));
}
else {
    rx_buffer[bytelen-2] = rx_buffer[bytelen-1];
}

となります。

厄介ですね。

おそらくFT2232Hの中ではシンプルなステートマシンでJTAGの信号を作り出しているためなのでしょう。

 

一応、バウンダリスキャンができるようにはなったのですが、まだまだ不安定なので、データシートとにらめっこしながらデバッグを進めていくことにします。

|

« Trenz社製品ページの検索機能が動くようにしたった | トップページ | Spartan-7のLUT使用率が100%近くなるとどうなる? »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Trenz社製品ページの検索機能が動くようにしたった | トップページ | Spartan-7のLUT使用率が100%近くなるとどうなる? »