Perché abbiamo bisogno di programmatori hardware?


22

Uso un Boarduino e una breadboard da 30 file per programmare il mio ATtiny. Carico uno schizzo non troppo complicato chiamato ArduinoISP (incluso per impostazione predefinita ora nell'IDE di Arduino) e improvvisamente ho un programmatore funzionante. Atmel vende un bel programmatore tra $ 30 e $ 40, e ci sono molti kit per renderli più economici.

Sono stato molto contento quando ho ottenuto il mio programmatore di lavoro e fatto un piccolo battito di ciglia a dei led. Tuttavia, ora il mio povero boarduino è bloccato sul dovere del programmatore.

Per quanto ne so, questo programmatore tiene premuto il pulsante di reset, quindi trasmette e riceve sui pin MOSI e MISO. Penso che SCK sia inutilizzato o almeno non necessario. (SCK è necessario in base al foglio dati ATtiny, il mio programmatore non funziona senza di esso e non riesco a trovare il posto che pensavo di leggere non fosse necessario.)

Perché ho bisogno di un programmatore hardware per la trasmissione seriale? Voglio dire, supponiamo che io sia disposto a tenere premuto il pulsante di reset con il dito invece di usare un IC. Tutto ciò che rimane è l'invio e la ricezione in serie, quindi tutto ciò di cui ho bisogno sono tre fili GND, RXD e TXD. Diamine, se ho la linea "DTR" o qualsiasi altra cosa, puoi persino tenere premuto il pulsante di reset con il cavo seriale.

Perché ci sono tutte queste soluzioni hardware che richiedono anche software sofisticato (come AVRdude, o AVR studio, o altro)?

Voglio dire, potrei capire un piccolo cavo USB che presentava il microcontrollore come un dispositivo di archiviazione di massa e ti permetteva di trascinare i file binari per la programmazione (come questa scheda di sviluppo ARM ). Solo hardware, utilizzando driver software standard.

Potrei anche comprendere una soluzione esclusivamente software (modulo che collega i cavi dall'USB al chip, usando qualcosa come il chip FTDI per semplificare ciò che scende). Tutto il protocollo di programmazione elaborato sarebbe gestito da software sul computer e l'hardware sarebbe solo alcuni fili.

Perché sono coinvolti software e hardware (complicati)? Voglio dire, per quanto ne so, programmare i microcontrollori è piuttosto facile, ma quando stavo entrando in questo argomento ero davvero preoccupato di come avrei mai comprato un chip da Mouser o Digikey senza pagare un guru per programmare un bootloader per me.

Sono sicuro che ci sia una buona ragione (non è come se avessi scritto il software o iniziato a produrre il programmatore USB drag-and-drop), ma come nuovo arrivato, non ho idea di cosa sia.


Il programmatore hardware home-brew consente il debug? Potresti programmare bene da solo, ma avresti bisogno di un programmatore hardware se volessi eseguire il debug su chip (impostare punti di interruzione nel codice e interrompere l'esecuzione quando raggiungi quel punto) poiché quell'operazione potrebbe fare cose divertenti con la linea di reset.
Gioele B

1
Qualcosa di cui potresti essere divertito, hackaday.com/2013/05/10/…
binarysmacker

Risposte:


18

Hai ragione, programmare gli AVR è abbastanza semplice. È solo un protocollo personalizzato implementato su SPI, che funziona a bassa tensione. SCK è necessario.

Tuttavia, la programmazione di PIC meno recenti (e la programmazione AVR non ISP) richiede alte tensioni e un protocollo personalizzato diverso. Ciò richiede un programmatore hardware speciale.

Altri dispositivi sono più complessi. La maggior parte dei microcontrollori ARM deve essere programmata tramite JTAG, qui la memoria viene scritta direttamente e al processore viene richiesto di scrivere sul flash. Ancora una volta, ogni dispositivo è diverso.


Qualche idea sul perché siano molto più complessi? Il modo AVR (bassa tensione, protocollo standard) sembra molto più sensato che richiedere un programmatore personalizzato (come questo ragazzo con un bisogno di programmatore 8051/8052 - aiuto desiderato, rappresentante disponibile! Electronics.stackexchange.com/questions/4104 )
Kevin Vermeer,

2
Non c'è davvero niente di speciale o costoso nei programmatori PIC; molti progetti sono disponibili online e la maggior parte dei nuovi PIC può essere programmata a bassa tensione.
akohlsmith,

4
I produttori di circuiti integrati non si preoccupano davvero di quanto sia complesso usare qualcosa per gli appassionati. Finché può essere utilizzato nella produzione di grandi quantità, si tratterà altrimenti di costi.
endolith

2
La programmazione ad alta tensione era prima di tutto, era il modo di programmare EPROM cancellabili ai raggi UV negli anni ottanta (e microcontrollori contenenti tali EPROM).
Starblue,

Risolto il reclamo SCK. Mi piace l'idea che sia necessaria solo SPI, ma poiché i computer non hanno una porta SPI (e diamine il cavo FTDI ha già un chip da $ 4 !!) potremmo anche concederci una pazzia su un microcontrollore da $ 2. L'argomento JTAG di upload e debug mi ha venduto sui vantaggi di una scheda di sviluppo in generale, e penso che endolith abbia un buon punto sul fatto che a nessuno importa cosa spendo per i miei $ 20; ai produttori importa su quali veri ingegneri (e dei loro datori di lavoro) spenderanno il loro budget.
Jack Schmidt,

5

Ho fatto molte ricerche e mi sto preparando a iniziare a giocare con gli AVR, ma non ne ho mai usato uno, quindi potrebbe essere sbagliato, ma:

I programmatori più economici non supportano la programmazione ad alta tensione AVR. È necessario se il controller non è programmabile tramite bit di fusibile o se in qualche modo sono stati apportati alcuni bug gravi e è necessario ripristinarlo ai valori predefiniti e così via.


2
I programmatori a bassa tensione come AVRISP mkII [1] o USBtinyISP [2] possono essere utilizzati per impostare fusibili con avrdude o altri programmatori, ma non possono salvare un chip AVR che è stato reso non avviabile o è stato trasformato la sua linea di ripristino in un GPIO. Hai bisogno di un programmatore ad alta tensione per questo genere di cose. [1] mouser.com/search/… [2] ladyada.net/make/usbtinyisp
blalor

@blalor Alla luce di queste informazioni, modificherò la mia risposta.
AndrejaKo,

Ho visto alcune istruzioni su come creare un programmatore ad alta tensione (e il foglio dati per il chip sembra avere istruzioni piuttosto dettagliate sulla progettazione di uno), ma sto aspettando fino a quando non avrò un mattone dei miei chip fino a quando non lo provo. I miei oscillatori arriveranno domani, quindi brucerò le micce e tenterò presto la fata dei mattoni!
Jack Schmidt,

È da notare che avrdude controlla due volte i bit dei fusibili per evitare questo problema. Un problema leggermente più comune è l'impostazione del chip sull'orologio esterno.
Yann Vernier,

4

I programmatori AVR più economici sono solo sincronizzare le interfacce seriali con una linea di reset. È possibile utilizzare un FT232 per estrarre bit dall'interfaccia periferica seriale (SPI). FT232 è progettato per la sincronizzazione asincrona seriale, quindi è tutto fatto nel software.

Potresti semplicemente caricare un bootloader come Arduino che ti consentirebbe di caricare il codice tramite l'interfaccia seriale asincrona usando l'ft232 in modalità normale o qualsiasi interfaccia seriale asincrona usando i convertitori di livello secondo necessità. Non dimenticare di usare il bootloader giusto per la tua velocità di clock e di impostare correttamente i byte dei fusibili.


1

Molti dispositivi programmabili hanno richiesto storicamente di essere programmati utilizzando sequenze di segnali temporizzate relativamente precise. In molti casi, se si volesse programmare solo un particolare tipo di dispositivo, l'hardware richiesto sarebbe stato piuttosto semplice, ma poiché dispositivi diversi avevano requisiti diversi, costruire un programmatore più generico era un po 'più difficile.

Oggi, si potrebbe probabilmente programmare più del 50% dei dispositivi programmabili utilizzando nient'altro che un cavo USB I / O e software per PC, ma i programmatori "hardware" hanno ancora un notevole vantaggio in termini di velocità. Perché il PC reagisca a un segnale ricevuto da un dispositivo USB e invii una risposta richiede in genere un minimo di 1-2 millisecondi. Se una sequenza di programmazione richiede di chiedere ripetutamente a un dispositivo quando è pronto per il prossimo blocco di dati e quindi di inviarlo, l'uso di un semplice cavo I / O aggiungerebbe un millesimo di secondo in più al tempo necessario per gestire ciascun blocco. A seconda della natura del dispositivo in questione, ciò potrebbe aumentare il tempo complessivo richiesto per la programmazione di un ordine di grandezza rispetto a un programmatore che potrebbe essere detto, mentre aspetta che un dispositivo sia pronto, cosa dovrebbe fare una volta che lo è.

Personalmente, mi piace l'approccio di avere i dispositivi dotati di flash spediti dalla fabbrica con un caricatore di avvio in memoria che può essere utilizzato con un minimo di hardware di programmazione. Se il dispositivo supporta la programmazione flash sotto il controllo del software, un tale approccio può semplificare la produzione senza aggiungere nulla al costo del silicio oltre il tempo marginale molto piccolo necessario per avere il programma del dispositivo di test di fabbrica nel boot-loader dopo aver fatto tutto il resto .

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.