Risposte:
Si, puoi. L'ho fatto molte volte.
Tuttavia, ci sono alcuni svantaggi relativi all'utilizzo di EEPROM separata:
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à.