La memoria flash del programma microcontrollore può essere utilizzata per memorizzare la configurazione utente?


9

Molti microcontrollori, ad es. PIC18F , dispongono di memoria programma flash: "La memoria programma Flash è leggibile e scrivibile durante il normale funzionamento". Questo significa che posso memorizzare alcune configurazioni utente nella memoria del programma?

Risposte:


12

Si, puoi. L'ho fatto molte volte.

Tuttavia, ci sono alcuni svantaggi relativi all'utilizzo di EEPROM separata:

  1. Il numero di scritture a vita per programmare la memoria flash è significativamente inferiore alla EEPROM dei dati.

  2. Il processore uscirà a pranzo durante i tempi di cancellazione e scrittura.

  3. Il flash del programma viene cancellato in blocchi. Non puoi semplicemente aggiornare un singolo byte. Di solito utilizzo uno schema di memorizzazione nella cache a blocchi per gestirlo.


Perfetto, sembra che tu sappia in qualche modo che la mia domanda è davvero "perché la necessità di EEPROM mentre puoi usare la memoria del programma sia per il programma che per i dati utente" :)
student1

Olin, tutto il Flash viene cancellato quando la nuova versione del firmware viene masterizzata nel PIC? Esiste un buon modo per impedire la cancellazione della configurazione utente (o dei dati di calibrazione) in Flash durante il download del firmware? Si tratta di convenienza durante lo sviluppo del firmware. Immagino che la configurazione dell'utente venga memorizzata nell'ultimo blocco o Flash.
Nick Alexeev

6
@Nick: dipende dal programmatore PIC che stai utilizzando. Molti, inclusi tutti i miei, eseguono una cancellazione in blocco, quindi i dati di calibrazione verrebbero cancellati. In alcune occasioni ho scritto un'app di programmazione speciale che legge i dati di calibrazione, ha cancellato in blocco, quindi ha riscritto i dati di calibrazione come parte del normale processo di programmazione. Alcuni programmatori di Microchip potrebbero essere in grado di aggiornare solo parti della memoria del programma. Nota che se hai attivato la protezione del codice, il programmatore deve eseguire una cancellazione in blocco.
Olin Lathrop,

Su processori non Harvard (sto pensando a MSP430) puoi copiare il codice nella RAM, saltare nella RAM ed eseguire mentre avviene la scrittura / cancellazione del flash. L'ho usato per un bootloader, per scrivere e ricevere contemporaneamente nuovi dati da una radio.
Markrages l'

@mark: Sì, funziona anche su PIC32, dove è anche possibile eseguire da RAM. In effetti, è più veloce.
Olin Lathrop l'

6

Molti PIC18 hanno memoria EEPROM, fino a 1K di dimensione. Sfortunatamente il PIC18F46J50 di riferimento non lo fa. Se EEPROM è disponibile, è una scelta molto migliore se è abbastanza grande per i tuoi dati, poiché la EEPROM ha un minimo di 1.000.000 di cicli di cancellazione / scrittura e il flash è solo 10.000.

Il PIC18, come la maggior parte degli altri microcontrollori, utilizza quella che viene chiamata architettura di Harvard, il che significa che ci sono aree indirizzabili fisicamente separate per programmi e dati (cioè puoi avere un indirizzo di programma 4 e un indirizzo di dati 4, e non sono gli stessi). Pertanto non è possibile leggere o scrivere la memoria flash utilizzando i metodi normali in linguaggio C o assembly.

Invece, sulla famiglia PIC18, si imposta un indirizzo iniziale in un registro a 22 bit chiamato TBLPTR. Per leggere i byte dal flash, si utilizza un'istruzione TBLRD. C'è un'opzione per incrementare o decrementare automaticamente l'indirizzo dopo una lettura che non è necessario eseguire manualmente.

Per scrivere nella memoria flash, è necessario cancellare prima uno o più blocchi di memoria flash a 64 byte che verranno sovrascritti. Dopo aver impostato nuovamente l'indirizzo iniziale in TBLPTR e i valori in alcuni altri registri per inizializzare l'operazione di cancellazione, gli interrupt vengono disabilitati e quindi è necessario scrivere 0x55 immediatamente seguito da 0xAA in un registro; questo sblocca il comando di cancellazione ed è necessario per impedire al codice errato di cancellare accidentalmente la memoria. Alla fine viene eseguito il comando per eseguire effettivamente la cancellazione, seguito dalla riattivazione degli interrupt.

La scrittura nella memoria flash è simile alla cancellazione, tranne per il fatto che la dimensione del blocco è inferiore. La scrittura viene effettivamente eseguita utilizzando un'istruzione TBLWT, che consente anche l'incremento / decremento automatico come l'istruzione TBLRD.

Oltre a salvare i dati di configurazione, la scrittura nella memoria flash consente di aggiornare il proprio firmware sul campo utilizzando quello che viene chiamato "firmware over the air". È necessario disporre di un blocco fisso di firmware, in genere all'inizio della memoria del programma, in grado di ricevere l'aggiornamento da un modulo Bluetooth, Wi-Fi, modulo cellulare o persino una connessione cablata e aggiornare il flash sopra un certo punto in il programma (ad es. una "recinzione") con un nuovo codice. Al termine dell'aggiornamento, viene avviato un ripristino e viene utilizzato il nuovo codice.

Molti altri microcontrollori oltre alla famiglia PIC hanno la possibilità di aggiornare la propria memoria flash; la maggior parte utilizza una combinazione di registri di configurazione, un puntatore di indirizzo e istruzioni speciali per eseguire l'attività.


Quel metodo "firmware over the air" sembra molto interessante. Rimuove la necessità di In System Programming (ISP)?
studente1

@ student1 Non elimina la necessità di programmare inizialmente il chip tramite un'interfaccia ISP, perché è necessario inserire un po 'di firmware sul chip per poter gestire gli aggiornamenti in seguito. I microcontrollori ATmega utilizzati sulle schede Arduino dispongono già di questo tipo di firmware, chiamato Bootloader, motivo per cui non è necessario utilizzare un'interfaccia ISP per scaricare gli schizzi su un Arduino. Tuttavia, se si desidera aggiornare il Bootloader stesso, ciò richiede un'interfaccia ISP. Questo Bootloader gestisce solo gli aggiornamenti tramite USB, quindi non è veramente "firmware over the air".
Tcrosley,
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.