Antworten:
Ja, du kannst. Ich habe das schon oft gemacht.
Es gibt jedoch einige Nachteile bei der Verwendung eines separaten EEPROM:
Viele PIC18 verfügen über einen EEPROM-Speicher mit einer Größe von bis zu 1 KB. Leider verweist der PIC18F46J50, auf den Sie verweisen, nicht. Wenn ein EEPROM verfügbar ist, ist es eine viel bessere Wahl, wenn es groß genug für Ihre Daten ist, da das EEPROM mindestens 1.000.000 Lösch- / Schreibzyklen aufweist und der Flash nur 10.000 beträgt.
Der PIC18 verwendet wie die meisten anderen Mikrocontroller eine sogenannte Harvard-Architektur, dh es gibt einen physisch getrennten adressierbaren Bereich für Programme und Daten (dh Sie können eine Programmadresse 4 und eine Datenadresse 4 haben, und diese sind nicht identisch). Daher können Sie Flash-Speicher weder mit den normalen Methoden in C noch in Assemblersprache lesen oder schreiben.
Stattdessen richten Sie in der PIC18-Familie eine Startadresse in einem 22-Bit-Register namens TBLPTR ein. Um Bytes aus dem Flash zu lesen, verwenden Sie eine TBLRD-Anweisung. Es besteht die Möglichkeit, die Adresse nach einem Lesevorgang automatisch zu erhöhen oder zu verringern. Sie müssen dies nicht manuell tun.
Um in den Flash-Speicher zu schreiben, müssen Sie zuerst einen oder mehrere 64-Byte-Blöcke des Flash-Speichers löschen, die überschrieben werden. Nach dem erneuten Einrichten der Startadresse in TBLPTR und der Werte in einigen anderen Registern zum Initialisieren des Löschvorgangs werden Interrupts deaktiviert. Anschließend müssen Sie 0x55 unmittelbar gefolgt von 0xAA in ein Register schreiben. Dadurch wird der Löschbefehl entsperrt und verhindert, dass fehlerhafter Code versehentlich den Speicher löscht. Schließlich wird der Befehl zum tatsächlichen Löschen ausgeführt, gefolgt von der erneuten Aktivierung von Interrupts.
Das Schreiben in den Flash-Speicher ähnelt dem Löschen, außer dass die Blockgröße kleiner ist. Das Schreiben wird tatsächlich unter Verwendung eines TBLWT-Befehls ausgeführt, der auch ein automatisches Inkrementieren / Dekrementieren wie der TBLRD-Befehl ermöglicht.
Das Schreiben in den Flash-Speicher spart nicht nur Konfigurationsdaten, sondern ermöglicht es auch, die Firmware vor Ort mithilfe der sogenannten "Firmware over the Air" zu aktualisieren. Sie benötigen einen festen Firmware-Block, normalerweise zu Beginn des Programmspeichers, der das Update von einem Bluetooth-Modul, Wi-Fi, Mobilfunkmodul oder sogar einer Kabelverbindung empfangen und den Flash über einem bestimmten Punkt in aktualisieren kann das Programm (zB ein "Zaun") mit neuem Code. Nach Abschluss des Updates wird ein Reset eingeleitet und der neue Code verwendet.
Viele andere Mikrocontroller neben der PIC-Familie können ihren Flash-Speicher aktualisieren. Die meisten verwenden eine Kombination aus Konfigurationsregistern, einem Adresszeiger und speziellen Anweisungen, um die Aufgabe auszuführen.