eeprom в Flash
представлять
Этот код реализует простую функцию EEPROM Simple Flash. Вы можете вызвать интерфейс EEPROM на верхнем уровне, просто реализуя базовый интерфейс операции флэш -памяти. Подходит для проектов с меньшим количеством хранения данных EEPROM
принцип
Вспышка, предоставленное для EEPROM, делится на два раздела, каждый раздел может содержать несколько страниц стирания, которые стерли равномерно во время стирания. Какой раздел в настоящее время используется, определяется началом used_mark. Фактические данные и виртуальный адрес EEPROM образуют программное устройство. При написании новые данные записываются в последовательности, и при чтении последнее значение является допустимым значением. Когда один раздел заполнен, данные копируются в другой раздел.
Инструкции по пересадке
- Скопировать eeprom_in_flash.c и eeprom_in_flash.h в проект
- Реализуйте базовый вызова интерфейс EE_ERASEPART, EE_PROGRAMWORD и EE_READWORD. Вы можете обратиться к примеру eeprom_port
- Измените определение макроса в eeprom_in_flash.h, настройка размер адреса флэш -адреса и другие связанные параметры
- EEPROM_NUM_MAX: максимальное количество данных EEPROM, единица - это число 16 -битных данных. Необязательный диапазон ограничен минимальным размером разделения и должен быть меньше (eeprom_part_size_min/4-1)
- Eeprom_part0_size/eeprom_part1_size: размер двух разделов, которые могут быть разных размеров. Каждый раздел может содержать несколько стертых страниц, которые являются целочисленным кратным минимальным стертым страницей.
- EEPROM_START_ADDRESS: используется для моделирования адреса начала вспышки EEPROM
Инструкции для использования
//参数: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 );
Ограничения использования
- Минимальный блок программирования составляет 32 бит или ниже
- Есть как минимум две съемные страницы для использования EEPROM
- Максимальное количество хранимых EEPROM составляет менее четверти доступного вспышки пространства
- Четкое значение после стирания составляет 0xff
Функции
- Очень низкая доля ресурсов, подходящая для небольших проектов микроконтроллера
- Поддержка баланса программирования вспышки.
- Поддерживает безопасные отключения электроэнергии в любое время , с высокой надежностью
- Все данные буферируются в памяти, а скорость чтения и записи быстро
- Программа обновления не влияет на сохраненный контент. Его можно обновлять постепенно или вы можете не использовать старые данные.
- Поддерживает интерфейс печати журнала для легкой отладки
- Поддерживает 8-битный микроконтроллер
- Проверка корректности данных не поддерживается
Что следует отметить
- При вызове интерфейса eEPROM чтение и запись обратите внимание на диапазон адресов и длины и не охватывайте различные диапазоны адресов данных.
- Флэш -адрес Адрес интерфейс ee_programword. Если 32-битный пишет на атомные операции, вы должны сначала написать на 16 бит ниже, а затем написать на 16 бит выше и на 16 бит выше.