ArduinoとJTAGインターフェースを作成することは可能ですか?


14

もしそうなら、私はこれを行う方法を教えてくれるサイトに私を向けることができますか?私は方法を見つけたかもしれないと信じていますが、それがまだ機能するかどうかはわかりません(テストするものを見つける必要があります)。

この質問は、ここにある私の以前の質問に関連しています。

より多くの背景情報が必要な場合。


JBailey私はちょうどJTAG-USBコンバータを作るためのArduinoを使用することについて、あなたの質問に出くわしたと私はあなたが作るんでしたか不思議でした\?

回答:


14

はい、ArduinoをARM JTAGアダプターに変えることができます。

電圧、速度、ドライバーの3つの問題があります。

Arduinoはネイティブで5Vで動作します。ほとんどのARMマイクロコントローラーは、JTAGピンで5Vに対応しておらず、3.3Vを必要とします。最も簡単な解決策は、Arduinoを3.3Vで実行することで、何らかのレベル変換が必要になりません(アイデアについてはI2C 3.3から5.0 Vへの変換を参照してください)。

Arduinoは、シリアルリンクを介してPCに接続されます。115200bpsよりも高速に実行できるとは思えません。これにより、デバッガーでコードをステップ実行するようなインタラクティブなアクティビティが非常に遅くなります。ただし、コードをアップロードしてデバイスを再フラッシュすることはできます。

JTAGは、各プロセッサフ​​ァミリに固有の高レベルプロトコルであり、SPIのようなインターフェイスを使用してデータを交換します。ほとんどのJTAGドングルは、USB経由でSPIインターフェースを提供するだけで、残りの作業はPCアプリケーションに任せます。OpenOCDとURJTagは一般的な選択肢です。Arduino JTAGプロトコルには、これらのいずれかのドライバーが必要です。

Bus PirateはArduino(低速マイクロコントローラー+ FTDIチップ)に非常に似ています。OpenOCDでJTAGサポートしているので、確かに可能です。

Teensy / Opendousまたは他のAVR-USBボードを使用する場合は、eStick-JTAGを使用できます

ただし、JTAGのコストを下げるために、FTDI2232ベースのドングルのいずれかをお勧めします。それらは安価であり、OpenOCDによって十分にサポートされています。


5

可能ですが、非常に困難です。FTDIチップは既製のブラックボックスであり、それらを使用しても実際には学習しないため、FTDIベースのJTAGは好きではありません。

AVRでUSB-JTAGを構築したい場合は、チップで少なくともUSBフルスピードサポートを備えたUSB-JTAGを取得します。次に、AVR usbスタック(cソースコード)を取得し、usb-to-serialの例を見てください。usbを介したビットバンギングは悪いアイデア(高レイテンシ)であるため、ビットバンギング自体を実行する(または可能であればSPIを使用する)MCUに指示し、usbを介して高レベルの結果を返す(完全なバイト)高レベルのコマンドに変換する必要があります)。しかし、新しいJTAGデバイスをサポートするIDEのドライバーを作成してデバッグする必要があります。OpenOCDとURJTagには、多くのjtagデバイス用のドライバーのソースコードがあるため、新しく開発されたデバイス用にドライバーを入手して作り直す必要があります。一部の人々が同様の作業をどのように行ったかをご覧ください:http : //code.google.com/p/estick-jtag/


1

openocdを見てください。バックエンドの大部分は、パラレルポートビットバンアプローチに基づいています。一度に1ビットのみを変更することになると思います。私が彼らが例とするダミーバックエンドと呼んでいると思うものをとることはかなり簡単です。任意の書き込みビットコマンドをarduinoに送信し、そのビットを設定またはクリアします。入力ビットを読み取るように求められたら、そのタスクを実行して結果を返すコマンドをarduinoに送信します。

私はこれを成功させましたが、arduinoではなく、ホストからHDLシミュレータで実行されているシミュレートされたアームコアへのopenocdの話をしました。

一部のjtag仕様は閉じられていることに注意してください。たとえば、cortex-m3は、シリアル番号を減らしたピンjtagのようなもので、前回見たものはNDAなしでは利用できませんでした。openocdがサポートするjtagインターフェイスを使用している限り、openocdがすべてを処理するので、それは問題ではないかもしれません。 。

Jobyが既に述べたように、電圧(すべてのarduinoフレーバーが5Vであるわけではなく、すべてのアームコントローラーが3.3ボルトであるわけではありません)および信号調整と接地などに注意する必要があります。ターゲットボードが、arduinoの電源とは異なるレベルの電源で動作している場合、2つを接続すると何かが溶けてしまう可能性があります。


シリアル(またはさらに悪いことに、パケット化されたトランスポートを備えたUSB)インターフェースを使用してプロキシビットバンギングを行うと、非常に遅くなること注意してください。マイクロコントローラーに完全な操作を実行させ、より高いレベルでそれと通信させる、つまり、このレジスターの読み取り、そのレジスターの書き込み、またはこのデータブロックのプログラミングを指示する方がはるかに効率的です。
クリスストラットン

1

それは可能であり、実際にそれを実装し、すべてをここで説明しました

githubの上のライブラリがあり、ここでプログラムのArduinoとArduinoのにXSVFファイルを送信Pythonスクリプトで実行されていることを次の2つの部分から構成されています。

ほとんどのFPGAおよびCPLDはこの電圧レベルを使用するため、5 Vを3.3 Vに変換するためにいくつかの抵抗が必要になる可能性が高いでしょう。

また、XSVFファイル用のアセンブラー/ディスアセンブラーを作成した経験もいくつかありました。コードは同じgithubライブラリにあり、この投稿説明されています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.