EEPROM em flash
introduzir
Este código implementa a função EEPROM de simulação de flash simples. Você pode chamar a interface EEPROM no nível superior, simplesmente implementando a interface de operação flash subjacente. Adequado para projetos com menos armazenamento de dados da EEPROM
princípio
O espaço flash fornecido à EEPROM é dividido em duas partições, cada partição pode conter várias páginas de apagamento, que são apagadas uniformemente durante a apagação. Qual partição é usada atualmente é determinada pelo início usado_mark. Os dados reais e o endereço virtual da EEPROM formam uma unidade de programação. Ao escrever, os novos dados são gravados em sequência e, ao ler, o último valor é o valor válido. Quando uma partição está cheia, os dados são copiados para outra partição.
Instruções de transplante
- Copie eeprom_in_flash.c e eeprom_in_flash.h para o projeto
- Implemente a interface de chamada subjacente de EE_ERASEPART, EE_PROGRAMWORD e EE_READWORD. Você pode se referir ao exemplo do EEPROM_PORT
- Modifique a definição de macro em eeprom_in_flash.h, configure o tamanho do endereço do flash e outros parâmetros relacionados
- EEPROM_NUM_MAX: o número máximo de dados EEPROM, a unidade é o número de dados de 16 bits. O intervalo opcional é limitado pelo tamanho mínimo da partição e deve ser menor que (eeprom_part_size_min/4-1)
- EEPROM_PART0_SIZE/EEPROM_PART1_SIZE: O tamanho de duas partições, que podem ter tamanhos diferentes. Cada partição pode conter várias páginas apagadas, que é um múltiplo inteiro da página Mínima apagada.
- EEPROM_START_ADDRESS: Usado para simular o endereço inicial do Flash da EEPROM
Instruções para 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 );
Limitações de uso
- A unidade de programação mínima é de 32 bits ou abaixo
- Existem pelo menos duas páginas apagáveis para a EEPROM usar
- A quantidade máxima de EEPROM armazenada é menor que um quarto do espaço flash disponível
- O valor claro após a apagamento é 0xff
Características
- Compartilhamento de recursos muito baixo, adequado para pequenos projetos de microcontrolador
- Suporte Flash Apagando a programação do equilíbrio de desgaste
- Suporta queda de energia segura a qualquer momento , com alta confiabilidade
- Todos os dados são tamponados na memória, e a velocidade de leitura e gravação é rápida
- O programa de atualização não afeta o conteúdo armazenado. Pode ser atualizado de forma incremental ou você pode optar por não usar dados antigos.
- Suporta interface de impressão de log para facilitar a depuração
- Suporta microcontrolador de 8 bits
- A verificação de correção de dados não é suportada
Coisas a serem observadas
- Ao chamar a interface de leitura e gravação da EEPROM, preste atenção ao intervalo de endereço e comprimento e não abranja diferentes faixas de endereço de dados.
- Interface de programação de endereço flash ee_programword. Se gravar 32 bits para operações atômicas, você deve primeiro escrever 16 bits e depois escrever 16 bits mais altos e 16 bits mais altos.