EEPROM in Flash
einführen
Dieser Code implementiert die einfache Flash -Simulation EEPROM -Funktion. Sie können die EEPROM -Schnittstelle auf der oberen Ebene aufrufen, indem Sie einfach die zugrunde liegende Flash -Operation -Schnittstelle implementieren. Geeignet für Projekte mit weniger EEPROM -Datenspeicherung
Prinzip
Der für EEPROM bereitgestellte Blitzraum ist in zwei Partitionen unterteilt. Jede Partition kann mehrere Löschseiten enthalten, die während des Löschens gleichmäßig gelöscht werden. Welche Partition derzeit verwendet wird, wird durch den Anfangsgebrauch bestimmt. Die tatsächlichen Daten und die virtuelle EEPROM -Adresse bilden eine Programmiereinheit. Beim Schreiben werden die neuen Daten nacheinander geschrieben, und beim Lesen ist der letzte Wert der gültige Wert. Wenn eine Partition voll ist, werden Daten in eine andere Partition kopiert.
Transplantationsanweisungen
- Kopieren Sie eeprom_in_flash.c und eeprom_in_flash.h in das Projekt
- Implementieren Sie die zugrunde liegende Anrufschnittstelle von EE_ERASEPART, EE_PROGRAMWORD und EE_READWORD. Sie können sich auf das Beispiel eeprom_port beziehen
- Ändern Sie die Makrodefinition in eeprom_in_flash.h, konfigurieren Sie die Flash -Adressgröße und andere zugehörige Parameter
- EEPROM_NUM_MAX: Die maximale Anzahl von EEPROM -Daten ist die Anzahl der 16 -Bit -Daten. Der optionale Bereich ist durch die minimale Partitionsgröße begrenzt und muss geringer sein als (EEPROM_PART_SIZE_MIN/4-1)
- EEPROM_PART0_SIZE/EEPROM_PART1_SIZE: Die Größe zweier Partitionen, die unterschiedliche Größen haben können. Jede Partition kann mehrere gelöschte Seiten enthalten, nämlich ein ganzzahliges Mehrfach der minimalen gelöschten Seite.
- EEPROM_START_ADDRESS: Wird verwendet, um die Flash -Startadresse von EEPROM zu simulieren
Anweisungen zur Verwendung
//参数:eeprom初始化值,NULL则无初始值
int EEPROM_Init ( void * default_data );
int EEPROM_Format ( void * default_data );
//参数Address:eeprom的地址,一个地址保存16bit数据,范围0 - (EEPROM_NUM_MAX-1)
//参数length:读写buf的长度,为16bit数据的个数
uint16_t EEPROM_Read ( uint16_t Address );
int EEPROM_Write ( uint16_t Address , uint16_t Data );
int EEPROM_Read_Buf ( uint16_t Address , uint16_t * buf , uint16_t length );
int EEPROM_Write_Buf ( uint16_t Address , uint16_t * buf , uint16_t length );
//参数addr:eeprom存储空间的地址,单位byte,与上面eeprom的参数呈2倍关系,地址空间不可重复,必须2字节对齐,范围0 - (EEPROM_NUM_MAX-1)*2
//参数length:读写buf的长度,单位字节长度,必须2字节对齐
int Config_Read_Buf ( uint16_t addr , void * buf , uint16_t length );
int Config_Write_Buf ( uint16_t addr , void * buf , uint16_t length );
Einschränkungen der Nutzung
- Die minimale Programmiereinheit beträgt 32bit oder weniger
- Es gibt mindestens zwei löschbare Seiten, die EEPROM verwenden können
- Die maximale Menge an gespeicherten EEPROM beträgt weniger als ein Viertel des verfügbaren Flash-Raums
- Der klare Wert nach dem Löschen beträgt 0xff
Merkmale
- Sehr niedriger Ressourcenanteil, geeignet für kleine Mikrocontroller -Projekte
- Unterstützung der Programmierung von Flash -Löschungen für Programmierkleidung
- Unterstützt jederzeit einen sicheren Stromausfall mit hoher Zuverlässigkeit
- Alle Daten werden im Speicher gepuffert, und die Lese- und Schreibgeschwindigkeit ist schnell
- Das Update -Programm wirkt sich nicht auf den gespeicherten Inhalt aus. Es kann schrittweise aktualisiert werden oder Sie können wählen, ob Sie keine alten Daten verwenden können.
- Unterstützt die Protokolldruckoberfläche für ein einfaches Debuggen
- Unterstützt 8-Bit-Mikrocontroller
- Die Verifizierung der Datenkorrektheit wird nicht unterstützt
Dinge zu beachten
- Achten Sie beim Aufrufen von EEPROM -Lesen und Schreiben der Schnittstelle auf die Adresse und den Längenbereich und decken Sie keine verschiedenen Datenadressenbereiche ab.
- Flash -Adress -Programmierschnittstelle EE_PROGRAMWORD. Wenn 32-Bit in Atomoperationen schreibt, müssen Sie zuerst 16 Bit niedriger schreiben und dann 16 Bit höher und 16 Bit höher schreiben.