Eeprom dalam flash
memperkenalkan
Kode ini mengimplementasikan fungsi EEPROM simulasi flash sederhana. Anda dapat menghubungi antarmuka EEPROM di tingkat atas dengan hanya menerapkan antarmuka operasi flash yang mendasarinya. Cocok untuk proyek dengan lebih sedikit penyimpanan data EEPROM
prinsip
Ruang flash yang disediakan untuk EEPROM dibagi menjadi dua partisi, masing -masing partisi dapat berisi beberapa halaman penghapus, yang dihapus secara seragam selama penghapusan. Partisi mana yang saat ini digunakan ditentukan oleh awal bekas_mark. Data aktual dan alamat virtual EEPROM membentuk unit pemrograman. Saat menulis, data baru ditulis secara berurutan, dan ketika membaca, nilai terakhir adalah nilai yang valid. Ketika satu partisi penuh, data disalin ke partisi lain.
Instruksi transplantasi
- Salin EEPROM_IN_FLASH.C dan EEPROM_IN_FLASH.H ke proyek
- Terapkan antarmuka panggilan yang mendasari EE_ERASEPART, EE_PROGRAMWORD, dan EE_READWORD. Anda dapat merujuk ke contoh EEPROM_PORT
- Ubah Definisi Makro di EEPROM_IN_FLASH.H, Konfigurasikan ukuran alamat flash dan parameter terkait lainnya
- EEPROM_NUM_MAX: Jumlah maksimum data EEPROM, unit ini adalah jumlah 16 bit data. Kisaran opsional dibatasi oleh ukuran partisi minimum dan harus kurang dari (EEPROM_PART_SIZE_MIN/4-1)
- EEPROM_PART0_SIZE/EEPROM_PART1_SIZE: Ukuran dua partisi, yang dapat memiliki ukuran yang berbeda. Setiap partisi dapat berisi beberapa halaman yang dihapus, yang merupakan kelipatan bilangan bulat dari halaman yang dihapus minimum.
- EEPROM_START_ADDRESS: Digunakan untuk mensimulasikan alamat start flash EEPROM
Petunjuk Penggunaan
//参数: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 );
Keterbatasan Penggunaan
- Unit pemrograman minimum adalah 32bit atau di bawah
- Setidaknya ada dua halaman yang dapat dihapus untuk digunakan EEPROM
- Jumlah maksimum EEPROM yang disimpan kurang dari seperempat dari ruang flash yang tersedia
- Nilai yang jelas setelah dihapus adalah 0xff
Fitur
- Berbagi sumber daya yang sangat rendah, cocok untuk proyek mikrokontroler kecil
- Dukungan Flash Menghapus Programing Wear Balance
- Mendukung pemadaman listrik yang aman kapan saja , dengan keandalan yang tinggi
- Semua data buffered dalam memori, dan kecepatan baca dan tulis cepat
- Program pembaruan tidak mempengaruhi konten yang disimpan. Ini dapat diperbarui secara bertahap atau Anda dapat memilih untuk tidak menggunakan data lama.
- Mendukung antarmuka pencetakan log untuk debugging yang mudah
- Mendukung mikrokontroler 8-bit
- Verifikasi kebenaran data tidak didukung
Hal -hal yang perlu diperhatikan
- Saat memanggil EEPROM membaca dan menulis antarmuka, perhatikan alamat dan rentang panjang, dan jangan mencakup rentang alamat data yang berbeda.
- Antarmuka pemrograman alamat flash ee_programword. Jika 32-bit menulis ke operasi atom, Anda harus terlebih dahulu menulis 16 bit lebih rendah dan kemudian menulis 16 bit lebih tinggi dan 16 bit lebih tinggi.