在有联网需求的嵌入式项目中经常有场景需要本地能够保存一些掉电不丢失的消息,比如区分冷热启动或者保存离线数据等等。
在需要保存数据的量比较小的时候为了节约成本,可以不用外部FLASH或EEPROM,使用主控的内部空间。
下面介绍周星星在新唐单片机开发之旅中的景点FMC。
基础操作
打开FMC驱动的头文件,找到我需要的四个基础函数:
1、使能函数;
2、读函数;
3、写函数;
4、擦除函数。
然后我先封装了一个任意地址写任意数量数据再验证。
嗯,失败了。
应该是封装的函数有问题吧。
这里提醒某些小伙伴一句千万不要像阿星一样驱动函数都没验证OK,先把应用代码敲完了。
有这个习惯的小伙伴可能认为反正驱动函数有问题后面再调,开发顺序正反都一样,况且官方的库函数怎么可能有问题呢。但是领导看见你搞了半天没有进度,他可是会着急的哦。
封装的函数验证失败后,我用库文件的3个元函数重新验证。伪代码如下:
fmc_open();
fmc_write(addr,data);
if(data == fmc_read(addr))
printf(“ok !\r\n”);
else
printf(“err !\r\n”);
打印结果是err。
当时阿星如下图所述
使能,写,读。
这个流程有问题吗?
我找到官方的例程,下载进去,验证OK。
我把自己的代码放到例程的初始化后面,验证OK。
有问题,初始化的问题!
可是例程初始化跟FMC相关的只有