EEPROM EN FLASH
introducir
Este código implementa la función EEPROM de simulación de flash simple. Puede llamar a la interfaz EEPROM en el nivel superior simplemente implementando la interfaz de operación flash subyacente. Adecuado para proyectos con menos almacenamiento de datos de EEPROM
principio
El espacio flash proporcionado a EEPROM se divide en dos particiones, cada partición puede contener múltiples páginas de borrado, que se borran de manera uniforme durante el borrado. Qué partición se usa actualmente está determinada por el comienzo Used_mark. Los datos reales y la dirección virtual EEPROM forman una unidad de programación. Al escribir, los nuevos datos se escriben en secuencia y al leer, el último valor es el valor válido. Cuando una partición está llena, los datos se copian a otra partición.
Instrucciones de trasplante
- Copiar Eeprom_in_flash.c y eeprom_in_flash.h al proyecto
- Implemente la interfaz de llamadas subyacente de EE_ERASEPART, EE_PROGRAMWORD y EE_READO. Puede consultar el ejemplo de EEPROM_PORT
- Modifique la definición de macro en EEPROM_IN_FLASH.H, configure el tamaño de la dirección flash y otros parámetros relacionados
- EEPROM_NUM_MAX: el número máximo de datos EEPROM, la unidad es el número de datos de 16 bits. El rango opcional está limitado por el tamaño mínimo de partición y debe ser menor que (EEPROM_PART_SIZE_MIN/4-1)
- EEPROM_PART0_SIZE/EEPROM_PART1_SIZE: el tamaño de dos particiones, que pueden ser de diferentes tamaños. Cada partición puede contener múltiples páginas borradas, que es un múltiplo entero de la página mínima borrada.
- Eeprom_start_address: se usa para simular la dirección de inicio flash de EEPROM
Instrucciones de uso
//参数: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 );
Limitaciones de uso
- La unidad de programación mínima es de 32 bits o menos
- Hay al menos dos páginas de borrables para que EEPROM use
- La cantidad máxima de EEPROM almacenada es inferior a una cuarta parte del espacio flash disponible
- El valor claro después de borrar es 0xff
Características
- Muy bajo participación de recursos, adecuado para pequeños proyectos de microcontroladores
- Soporte de la programación de flash de la programación Desgaste Balance
- Admite un interrupción de energía segura en cualquier momento , con alta confiabilidad
- Todos los datos se almacenan en la memoria, y la velocidad de lectura y escritura es rápida
- El programa de actualización no afecta el contenido almacenado. Se puede actualizar incrementalmente o puede elegir no usar datos antiguos.
- Admite la interfaz de impresión de registro para una fácil depuración
- Admite un microcontrolador de 8 bits
- La verificación de la corrección de datos no es compatible
Cosas a tener en cuenta
- Cuando llame a la interfaz de lectura y escritura de EEPROM, preste atención al rango de dirección y longitud, y no cubra diferentes rangos de direcciones de datos.
- Interfaz de programación de direcciones flash EE_ProgramWord. Si los 32 bits escriben en operaciones atómicas, primero debe escribir 16 bits más bajo y luego escribir 16 bits más altos y 16 bits más altos.