嵌入式学习小组
直播中

贾虎世

7年用户 1671经验值
私信 关注

请问怎么利用data flash模拟EEPROM?

各位大佬,我现在有一块NUC029的芯片,现在想将全部的程序都放到EEPROM中去,将相当于芯片复位之后程序不会丢,开机之后依旧可以运行。不知道模仿EEPROM可不可以实现?如果可以的话,我按照例程那样的,直接将相关的的配置代码放到main()之内,while()之前行不行?

#define Test_data_size 8
#define Test_page_amount 4


int main(void)
{
        uint32_t flash_i;
        uint8_t u8Data;
        
        int instant_sec,last_sec;
        uint8_t key;

        SYS_UnlockReg();
        SYS_Init();
        SYS_LockReg();
        
        /***********************************
        利用data flash模拟EEPROM
        ************************************/
        /* Test Init_EEPROM() */
        Init_EEPROM(Test_data_size, Test_page_amount);
        
        /* Test Search_Valid_Page() */
        Search_Valid_Page();
        
        /* Test Write_Data() */
        for(flash_i = 0; flash_i < 254; flash_i++)
        {
                Write_Data(flash_i%Test_data_size, flash_i%256);
        }
        
        /* Test Write_Data() contain Manage_Next_Page() */
        Write_Data(flash_i%Test_data_size, 0xFF);
        
        /* Test Read_Data() */
        Read_Data(0x7, &u8Data);
        
        /* Test Write over 20000 times */
        while(Get_Cycle_Counter() < 20000)
        {        
                for(flash_i = 0; flash_i < 247; flash_i++)
                {
                        Write_Data(flash_i%Test_data_size, flash_i%256);
                }                 
        }

...........

        while(1)
       {
       ......
        ......
         ......
        }

}



回帖(1)

万物死

2023-11-1 10:35:36
利用data flash模拟EEPROM是可行的。以下是一个基本的实现步骤:

1. 首先需要确定使用的data flash页数和每一页的大小。在例程中,Test_data_size表示每个数据的大小,Test_page_amount表示需要使用的页数。

2. 根据需要使用的页数来进行分配。例如,如果需要使用4个page,可以将第1页分配给地址0,第2页分配给地址Test_data_size*Test_page_amount,以此类推。

3. 写入数据时,需要注意每个page的擦除和编程操作。具体来说,先将需要写入的数据进行保存,然后查找要写入的数据应该存储在哪个page中。如果page未擦除,则先擦除。然后将数据编程到相应的地址处。

4. 读取数据时,需要根据存储位置计算出地址,然后直接从该地址处读取数据。

5. 在使用data flash时,需要关闭长时间操作保护位(LBPRAM),否则程序可能无法读取或写入data flash。

至于相关配置代码的放置位置,可以将其放在main()中的任何位置,只要能保证程序正确执行就可以。不过将其放在while()之前是一个比较好的选择,因为这可以让程序更快地启动并开始执行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分