Come fa un microcontrollore a "ricordare" un programma?
Questo è qualcosa che mi ha davvero infastidito da quando mi sono laureato. Abbiamo programmato i microcontrollori PIC16f877a in classe, ma non siamo mai entrati nel modo in cui funziona, solo per farlo funzionare. Quindi diciamo che scrivo un programma che fa lampeggiare i LED in un ordine specifico e invio questo programma al microcontrollore attraverso questo speciale adattatore ai pin giusti. Cosa sai, i LED iniziano a lampeggiare come indicato. Ora scollego l'alimentazione e rimuovo il PIC dalla breadboard. Rimetto il PIC nella sua posizione corretta, collego l'alimentazione e il LED lampeggia ancora come programmato in precedenza senza doverlo riprogrammare. Come sta succedendo? In che modo questo microcontrollore essenzialmente "ricorda" quello che gli ho detto di fare?
Risposte
Il PIC include un tipo di memoria non volatile chiamata " Flash EEPROM ". Quando "mandi il tuo programma al microcontrollore", l'apposito adattatore sta infatti programmando il tuo codice in questa memoria. La memoria fisica è un tipo speciale di transistor con un gate flottante che può immagazzinare una carica più o meno indefinitamente, anche senza alimentazione applicata. Nella maggior parte dei dispositivi, "addebitato" = 0, "nessun addebito" = 1.
Ogni volta che il PIC viene resettato o acceso, inizia a eseguire il codice, recuperandolo direttamente da questa memoria.
Sul PIC, questa memoria è integrata nello stesso chip che contiene la CPU e il resto della logica (periferiche, ecc.). Lo stesso tipo di memoria viene utilizzato per contenere il BIOS nel PC desktop / laptop, ma è un chip separato dalla CPU. Le prime schermate che vedi quando accendi il PC provengono dal BIOS, che quindi carica il tuo sistema operativo dal disco rigido o SSD e lo esegue.
Ci sono parecchie parti per far funzionare la magia della programmazione di un microcontrollore.
La tua toolchain di sviluppo (compilatore, assemblatore, linker ecc.) Traduce il tuo programma dal codice sorgente a una serie di istruzioni della macchina che saranno memorizzate sul microcontrollore.
Il microcontrollore normalmente memorizza il programma nella memoria flash (esistono anche microcontrollori cancellabili UV e programmabili una tantum). Questo è un tipo speciale di memoria progettato per conservare i dati anche quando l'alimentazione è spenta. Questi si basano su una struttura nota come "mosfet a gate flottante". Essenzialmente ogni mosfet nell'array di memoria ha un minuscolo condensatore in serie con il suo gate e la carica su questo condensatore cambia il comportamento del transistor.
La floating gate è circondata da materiale isolante e quindi in condizioni normali la carica non può né entrare né uscire dalla floating gate. Ciò consente al floating gate di mantenere la carica e quindi le informazioni anche quando il circuito è spento.
Tuttavia, quando vengono applicate tensioni sufficientemente elevate, gli elettroni possono attraversare lo strato isolante. Ciò consente di aggiungere o rimuovere la carica dal gate flottante. Generalmente il meccanismo per caricare i gate (noto come "programmazione") può essere eseguito su una base di bit individuali, ma il metodo per rimuovere la carica (noto come "cancellazione) può essere eseguito solo per un intero blocco di memoria alla volta.
Quando si collega l'adattatore di programmazione e si dice al software di programmare il microcontrollore, questo mette il microcontrollore in una speciale "modalità di programmazione". I dettagli di questo variano tra i diversi microcontrollori, ma sul tuo PIC16f877a è normalmente fatto applicando 13V alla linea Vpp / MCLR. Sui vecchi chip flash Vpp fornirebbe effettivamente la potenza necessaria per la programmazione, ma sul tuo PIC è solo una linea di segnale con tutte le tensioni necessarie per programmare l'array flash generato internamente. Una volta in modalità programma, il processore interrompe l'esecuzione delle normali istruzioni e risponde invece a comandi speciali inviati tramite l'interfaccia di programmazione. Sui PIC si tratta di un'interfaccia seriale sincrona con una linea di clock unidirezionale PGC e una linea dati bidirezionale PGD.
Una volta in modalità di programmazione, il software di programmazione invierà una serie di comandi seriali tramite l'adattatore di programmazione per scrivere il programma nella flash. Sono possibili due diversi approcci, in un approccio vengono utilizzati i comandi "cancella e programma" per cancellare e riprogrammare un blocco alla volta. Nell'altro approccio l'intero chip viene cancellato con un comando "bulk erase", quindi i comandi "solo programma" possono essere utilizzati per programmare i nuovi dati. In entrambi i casi, prima di emettere un comando "cancella e programma" o "solo programma", i dati devono essere prima caricati nei registri di staging. Puoi trovare i dettagli cruenti inhttp://ww1.microchip.com/downloads/en/devicedoc/39589b.pdf
Per prima cosa ... capisci come funziona una memoria fusibile programmabile una tantum? Come se avessi un miliardo di piccoli fili e ognuno scelga di connettersi a + V per una logica HI (ONE) e GND per una logica LO (ZERO), hai capito come questo memorizza un programma in sé di uno e zero ? Potresti prendere un voltmetro e per ogni filo potresti misurare se è collegato a + V o GND per capire se il bit in quella posizione è HI o LO. Un microcontrollore fa la stessa cosa.
Tutto il resto è una versione fantasia e più flessibile di questo concetto: come funziona la ROM?
Questo tende a portare alla domanda: "In che modo un microcontrollore prende il programma di uno e zero e fa cose con esso Cosa succede a livello hardware quando alimentiamo un codice?
Il codice del programma è memorizzato nella memoria ROM dei microcontrollori (in questo caso flash). I dati memorizzati in tale memoria vengono conservati dopo lo spegnimento. Il tuo microcontrollore ha 14KB di memoria flash, il codice risiede dopo la programmazione.
Questa memoria si basa su strutture MOSFET, che conservano i dati dopo che l'alimentazione è stata scollegata. Per maggiori informazioni su come funziona la memoria flash ti consiglio di leggere l' articolo wiki .
A seconda dell'annata del microcontrollore, è dotato di EPROM cancellabile UV in un pacchetto di ceramica con finestra di vetro, EPROM 'programmabile una volta' in confezione di plastica (per la produzione) o memoria Flash (tipica dei dispositivi più attuali). Alcuni possono anche essere acquistati con ROM programmata con maschera per la produzione di quantità elevate.
Alcuni programmatori supportano vari microcontrollori o il produttore del dispositivo potrebbe avere un EVB dedicato o altro. Per alcuni chip è supportata anche la programmazione seriale tramite SPI, USB, porta seriale (vecchia scuola) o porta parallela.
Mi piace piuttosto la "programmazione in circuito".