回答:
はい、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によって十分にサポートされています。
可能ですが、非常に困難です。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/
openocdを見てください。バックエンドの大部分は、パラレルポートビットバンアプローチに基づいています。一度に1ビットのみを変更することになると思います。私が彼らが例とするダミーバックエンドと呼んでいると思うものをとることはかなり簡単です。任意の書き込みビットコマンドをarduinoに送信し、そのビットを設定またはクリアします。入力ビットを読み取るように求められたら、そのタスクを実行して結果を返すコマンドをarduinoに送信します。
私はこれを成功させましたが、arduinoではなく、ホストからHDLシミュレータで実行されているシミュレートされたアームコアへのopenocdの話をしました。
一部のjtag仕様は閉じられていることに注意してください。たとえば、cortex-m3は、シリアル番号を減らしたピンjtagのようなもので、前回見たものはNDAなしでは利用できませんでした。openocdがサポートするjtagインターフェイスを使用している限り、openocdがすべてを処理するので、それは問題ではないかもしれません。 。
Jobyが既に述べたように、電圧(すべてのarduinoフレーバーが5Vであるわけではなく、すべてのアームコントローラーが3.3ボルトであるわけではありません)および信号調整と接地などに注意する必要があります。ターゲットボードが、arduinoの電源とは異なるレベルの電源で動作している場合、2つを接続すると何かが溶けてしまう可能性があります。