完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大佬,我现在有一块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个回答
|
|
首先,NUC029芯片内置的Data Flash可以用来模拟EEPROM功能。且在以下情况被称为Data Flash:
1.数据Flash控制器可以支持高达32KB的容量。 2.可通过读、写、验证方式操作Data Flash。 3.Data Flash最小写入单位是一页(512字节),因此需要将写入的数据分割成适当大小的块进行写入。 为了使用Data Flash作为EEPROM,您可以按照以下步骤进行: 1.首先确定需要保存的数据大小和数据页数。 2.在main函数之前,添加如下代码以配置Data Flash: //指向Data Flash起始地址地址. #define PageBaseAddr (DATA_FLASH_STORAGE_BASE) //虚拟页号计数器 __IO uint8_t u8DFVirtPageNum = 0; //实际页号计数器 __IO uint8_t u8DFRealPageNum = 0; //当前页地址. uint32_t u32Addr; //EEPROM数据结构体。 struct EEPROM_DATA { uint8_t Data[Test_data_size]; }; //EEPROM保存数组。 EEPROM_DATA g_EEPROM[Test_page_amount] __attribute__((at(DATA_FLASH_STORAGE_BASE))); 3.定义一个EEPROM数据结构体和一个保存EEPROM数据的数组。 4.使用g_EEPROM数组进行EEPROM数据读写操作。例如:写入数据 //将数据写入Data Flash for(flash_i=0;flash_i { g_EEPROM[u8DFVirtPageNum].Data[flash_i] = u8Data+flash_i; } //调用DF_Write函数保存Data Flash。 DF_Write(u32Addr, (uint32_t *)(&g_EEPROM[u8DFVirtPageNum]), Test_data_size); 5.使用DF_Read函数来读取EEPROM数据: //从Data Flash中读取数据。 DF_Read(u32Addr, (uint32_t *)(&g_EEPROM[u8DFVirtPageNum]), Test_data_size); for(flash_i=0;flash_i { printf("Read:%drn",g_EEPROM[u8DFVirtPageNum].Data[flash_i]); } 上述代码仅供参考,您还需要根据自己的实际需求进行修改。同时,请注意Data Flash的擦除和写入次数有限,需要谨慎使用。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 0 评论
1132 浏览 1 评论
2512 浏览 5 评论
2846 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2693 浏览 6 评论
684浏览 7评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
996浏览 3评论
198浏览 2评论
如果mmcblk1boot0启动失败可不可以从mmcblk1boot1启动呢
189浏览 2评论
用核心板GPIO直接控制网卡1的复位信号是否会导致液晶屏初始化失败?
231浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 00:50 , Processed in 1.054367 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号