Domanda:
Raspberry Pi come programmatore JTAG?
John Burton
2012-12-10 15:58:55 UTC
view on stackexchange narkive permalink

A parte il problema ovviamente non banale della scrittura del software, c'è qualche motivo pratico per cui la porta GPIO di un Raspberry Pi non può essere utilizzata come programmatore JTAG? Lo chiedo perché sto facendo un hobby con l'interfacciamento di un CPLD al mio Raspberry Pi e sarebbe conveniente poterlo programmare direttamente piuttosto che utilizzare un dispositivo JTAG e un computer separati.

Ce ne sono problemi con tensioni, tempi, ecc ...?

È probabile che il bit bang jtag dalla modalità utente sotto Linux sia un po 'lento, ma è fattibile. Potresti prendere in considerazione la funzionalità di un adattatore jtag esterno e inserirla in un modulo del kernel per una maggiore efficienza. Sfortunatamente, i dettagli della gpio del raspberry pi non sono documentati così a fondo nella letteratura pubblica come quelli della maggior parte dei processori usati per questo tipo di attività, ma probabilmente puoi trovare abbastanza informazioni per farlo funzionare fondamentalmente.
Grazie, per i CPLD che mi interessano la lentezza è accettabile in quanto i file sono molto piccoli ma è una buona idea.
Ah, ho trascurato la menzione del CPLD, che dovrebbe renderlo più ragionevole dei grandi FPGA o dei loro flash di configurazione. Potresti cercare esempi di porte parallele per PC come punto di partenza. Oppure prendi la sorgente del lettore JAM o SVF o qualunque cosa il fornitore offra e creala con uno stadio di output modificato.
Tre risposte:
Paul Fertser
2014-03-02 11:18:40 UTC
view on stackexchange narkive permalink

OpenOCD ha un driver sysfsgpio generico e ha avuto uno specifico driver Raspberry Pi BCM2835 per un bel po 'di tempo, e AFAICT la velocità va bene (ad esempio, il flash di STM32F1 è limitato dalla velocità del suo flash) - circa 4 MHz sono facilmente ottenibili e per molti casi non è necessaria alcuna circuiteria esterna. C'è anche il supporto per SWD, ma non è ancora upstream.

Dovresti clonare l'attuale Git HEAD e compilarlo in modo nativo con --enable-bcm2835gpio , quindi usa la configurazione da interface/raspberrypi-native.cfg.

Per le specifiche, fai riferimento al manuale README e Texinfo ufficiale.

Per quanto riguarda la parte hardware della domanda: se la tensione di destinazione è uguale o molto vicina a 3,3 V puoi collegare i pin del Raspberry Pi direttamente all'interfaccia di destinazione, altrimenti potresti (non sempre sono necessari tanti moderni i microcontrollori hanno pin "5 V-tolerant", quindi possono essere collegati a sorgenti con tensioni superiori alla loro V cc senza alcun danno, ma controlla prima la documentazione!) è necessario aggiungere una conversione di tensione appropriata buffer.

Per fornire una migliore corrispondenza dell'impedenza, si consiglia di avere resistori in serie da 47-100 ohm su ogni linea di segnale, vicino al connettore Raspberry Pi. Per maggiori dettagli, consulta la spiegazione dettagliata di Michael Schwingen, Re: capacità di azionamento ad alto rendimento in Raspberry Pi .

supercat
2013-02-08 22:21:00 UTC
view on stackexchange narkive permalink

Una cosa che prenderei in considerazione è che anche se l'I / O bit-bang è lento, potresti essere in grado di programmare (lentamente) un CPLD che potrebbe essere utilizzato per eseguire altre operazioni molto più rapidamente. Ad esempio, se avessi dieci pin di uscita D0-D9 che erano tutti sulla stessa porta I / O, insieme a un pin di ingresso, potresti usare D9 come ingresso "trigger", dove un cambiamento di stato (crescente o decrescente) dopo un breve ritardo (abbastanza a lungo da consentire a tutti gli altri pin di stabilizzarsi), il CPLD fa scattare qualcosa. D8 poteva selezionare se "qualcosa" doveva essere "emettere i dati su D0-D7" o qualcos'altro. D4-D7 potrebbe quindi selezionare una delle 16 operazioni da eseguire (abilitare / disabilitare una modalità in cui le uscite seguono semplicemente gli stati di D0-D2, configurare una modalità di accelerazione boundary-scan in cui ogni bit fornito dall'ARM eseguirà il clock di un gruppo di tre bit, che possono essere fissati alti, fissi bassi o seguire lo stato ARM, ecc.) Non sono sicuro del tipo di temporizzazione che normalmente ti aspetteresti di ottenere dall'I / O del Raspberry Pi, ma anche un relativamente piccolo CPLD potrebbe essere in grado di accelerare notevolmente le cose.

Saad
2012-12-10 17:04:54 UTC
view on stackexchange narkive permalink

È possibile creare un piccolo circuito di interfaccia che legge i dati che arrivano sui pin GPIO e rinviarli con i livelli di tensione, i tempi, ecc. corretti. Potrebbe essere necessario modificare la tensione se il Raspberry Pi funziona a una tensione inferiore / superiore al CPLD, ma non ho idea della tempistica.

È proprio quello che sto chiedendo. Dato che sono principalmente un programmatore che fa un po 'di elettronica per un hobby, immagino che potrei probabilmente scrivere il codice necessario per farlo, ma volevo solo sapere se era pratico prima di sprecare il mio tempo su di esso. Se ha bisogno di un adattatore aggiuntivo, allora potrei anche usare il mio programmatore esistente.
Bene, forse se entrambi funzionassero agli stessi livelli di tensione, potrebbe essere possibile.
Ok grazie, sembra che tu possa eseguire il jtag con una gamma di tensioni sul cpld incluso 3.3v anche se penso che potrebbe usare 1.8v sulla scheda che ho


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...