È possibile creare un'interfaccia JTAG con un arduino?


14

Se è così, si potrebbe indirizzarmi verso un sito che dice come farlo? Credo di aver trovato un modo , ma non sono sicuro che funzionerebbe ancora (è necessario trovare qualcosa su cui testarlo).

Questa domanda è collegata a una mia precedente domanda che si trova qui.

Nel caso siano necessarie ulteriori informazioni di base.


JBailey Mi sono appena imbattuto nella tua domanda sull'utilizzo di arduino per creare un convertitore JTAG-USB e mi chiedevo come hai fatto a distinguerlo? \

Risposte:


14

Sì, è possibile trasformare un Arduino in un adattatore ARM JTAG.

Esistono tre problemi: tensione, velocità e driver.

L'Arduino funziona nativamente a 5 V. La maggior parte dei microcontrollori ARM non tollerano 5 V sui pin JTAG e richiedono 3,3 V. La soluzione più semplice è far funzionare il tuo Arduino a 3.3V, in mancanza del fatto che avrai bisogno di una sorta di conversione di livello (vedi idee di conversione da I2C 3.3 a 5.0 V per idee).

Arduino è collegato a un PC tramite un collegamento seriale. Dubito che possa andare più velocemente di 115200 bps, il che renderà molto lente le attività interattive come passare attraverso il codice in un debugger. Ma sarai in grado di caricare dispositivi di codice e reflash.

JTAG è un protocollo di alto livello, specifico per ogni famiglia di processori, che utilizza un'interfaccia simile a SPI per scambiare dati. La maggior parte dei dongle JTAG fornisce solo un'interfaccia SPI su USB, quindi lascia il resto del lavoro a un'applicazione per PC. OpenOCD e URJTag sono scelte popolari. Avrai bisogno di un driver in uno di questi per il tuo protocollo Arduino JTAG.

Il Bus Pirate è molto simile all'Arduino (microcontrollore a bassa velocità + chip FTDI). Supporta JTAG con OpenOCD, quindi è certamente possibile.

Se si utilizza una scheda Teensy / Opendous o altra scheda AVR-USB, è possibile utilizzare eStick-JTAG .

Ma, a costo perso JTAG, consiglierei uno dei dongle basati su FTDI2232. Sono economici e ben supportati da OpenOCD.


5

È possibile ma molto difficile. Non mi piacciono i JTAG basati su FTDI, perché i chip FTDI sono scatole nere già pronte e non si impara davvero a usarle.

Se volessi costruire un USB-JTAG con AVR ne avrei uno con almeno il supporto USB a piena velocità nel chip. Quindi ottieni lo stack USB AVR (codici sorgente c) e guarda un esempio da seriale a usb. Poiché il bitbanging su USB è una cattiva idea (alta latenza), deve essere convertito in comandi di livello superiore che indicheranno all'MCU di eseguire il bitbanging stesso (o utilizzare SPI se possibile) e restituire il risultato di alto livello su usb (byte completi ). Ma poi arriva la necessità di scrivere i driver affinché l'IDE supporti il ​​nuovo dispositivo JTAG per eseguire il debug su di esso. OpenOCD e URJTag hanno il codice sorgente dei driver per molti dispositivi jtag, quindi dovrai recuperarne uno per il tuo dispositivo appena inventato. Scopri come alcune persone hanno svolto un lavoro simile: http://code.google.com/p/estick-jtag/


1

Guarda openocd. I backend si basano principalmente sull'approccio bit bang della porta parallela, penso che si spinga fino a cambiare solo un bit alla volta. È abbastanza semplice prendere quello che penso che chiamino il finto backend che è un esempio. Invia qualsiasi comando di bit di scrittura all'arduino e impostalo o cancella quel bit. Quando viene chiesto di leggere il bit di input, inviare un comando all'arduino per eseguire tale attività e restituire i risultati.

Ho fatto esattamente questo con successo, ma non con un arduino, ho avuto conversazioni openocd da un host in un core arm simulato in esecuzione in un simulatore HDL.

Si noti che alcune specifiche di jtag sono chiuse, ad esempio la corteccia-m3 è una sorta di numero ridotto serializzato di pin jtag che l'ultima volta che ho visto non era disponibile senza un NDA. questo potrebbe non importare perché openocd si prende cura di tutto ciò per te fintanto che stai usando un'interfaccia jtag supportata da openocd, il back end bit sbattuto è dove il tuo arduino e qualunque interfaccia usi per arrivare a / da esso entrano in gioco .

Come già notato da Joby, è necessario fare attenzione alle tensioni (non tutti i tipi di arduino sono 5 V e non tutti i controller di braccio sono 3,3 V) e il condizionamento e la messa a terra del segnale e tutto il resto. Se la tua scheda target è alimentata da un alimentatore di livello diverso rispetto a quello con cui alimenti il ​​tuo arduino, potresti sciogliere qualcosa quando colleghi i due.


Si noti che l'utilizzo di un'interfaccia seriale (o peggio, USB con il suo pacchetto di trasporto) per il proxy del bit banging può essere estremamente lento. È molto più efficiente che il microcontrollore esegua operazioni complete e comunichi con esso a un livello superiore, ovvero che gli dica di leggere questo registro, scriverne uno o addirittura programmare questo blocco di dati.
Chris Stratton,

1

È possibile, e in realtà l'ho implementato e spiegato tutto qui .

C'è una libreria su github qui che consiste di due parti: il programma che gira su arduino e uno script python che invia i file XSVF all'arduino.

Molto probabilmente avrai bisogno di alcuni resistori per convertire da 5 V a 3,3 V, poiché la maggior parte degli FPGA e CPLD utilizzano questo livello di tensione.

Ho anche fatto alcune esperienze scrivendo un assemblatore / disassemblatore per i file XSVF, il codice è nella stessa libreria github ed è spiegato in questo post qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.