Viele Mikrocontroller, zB PIC18F , haben Flash-Programmspeicher: "Der Flash-Programmspeicher ist während des normalen Betriebs lesbar und beschreibbar". Bedeutet dies, dass ich einige Benutzerkonfigurationen im Programmspeicher speichern kann?
Ja, du kannst. Ich habe dies viele Male getan.
Es gibt jedoch einige Nachteile in Bezug auf die Verwendung eines separaten EEPROM:
Viele PIC18 haben einen EEPROM-Speicher mit einer Größe von bis zu 1 KB. Leider ist dies bei dem PIC18F46J50, auf den Sie verweisen, nicht der Fall. 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 hat und der Flash nur 10.000 beträgt.
Der PIC18 verwendet, wie die meisten anderen Mikrocontroller, eine sogenannte Harvard-Architektur, was bedeutet, dass es physisch getrennte adressierbare Bereiche für Programme und Daten gibt (dh Sie können eine Programmadresse 4 und eine Datenadresse 4 haben, und sie sind nicht gleich). Daher können Sie den Flash-Speicher weder mit den normalen Methoden in C noch in der Assemblersprache lesen oder schreiben.
Stattdessen richten Sie bei 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 gibt eine Option, um 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 Werten in einigen anderen Registern zum Initialisieren der Löschoperation werden Interrupts deaktiviert, und dann müssen Sie 0x55 unmittelbar gefolgt von 0xAA in ein Register schreiben; Dies entsperrt den Löschbefehl und wird benötigt, um zu verhindern, 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. Der Schreibvorgang wird tatsächlich unter Verwendung eines TBLWT-Befehls ausgeführt, der ebenso wie der TBLRD-Befehl eine automatische Inkrementierung/Dekrementierung ermöglicht.
Zusätzlich zum Speichern von Konfigurationsdaten ermöglicht das Schreiben in den Flash-Speicher das Aktualisieren der Firmware vor Ort unter Verwendung von sogenannter "Firmware over the air". Sie benötigen einen festen Firmware-Block, normalerweise am Anfang des Programmspeichers, der das Update von einem Bluetooth-Modul, Wi-Fi, Mobilfunkmodul oder sogar einer Kabelverbindung empfangen und den Flash über einen bestimmten Punkt hinaus aktualisieren kann das Programm (zB ein "Zaun") mit neuem Code. Nachdem die Aktualisierung abgeschlossen ist, wird ein Reset initiiert und der neue Code wird verwendet.
Viele andere Mikrocontroller neben der PIC-Familie haben die Möglichkeit, ihren Flash-Speicher zu aktualisieren; Die meisten verwenden eine Kombination aus Konfigurationsregistern, einem Adresszeiger und speziellen Anweisungen, um die Aufgabe auszuführen.
Schüler1
Nick Alexejew
Olin Lathrop
Markierungen
Olin Lathrop