打造自己的硬件仿真平台8 - 仿真FLASH并移植一个FAT文件系统在仿
最近LZ心情不是很爽,一半由于晚上睡不好觉,一半由于公司动荡对我们这块定位不是很清楚,有点看不到前景,干的比较郁闷 今天讲讲如何在仿真平台上实现仿真Flash元器件,严格说是NVRAM,掉电能保存的存储单元。这应该是嵌入式里面最常用的元器件,包括Nand Flash,Nor Flash,EEPROM,FRAM,MRAM等等,我们希望平台能提供各种大小,控制方式的NVRAM给firmware应用使用。 先看一个firmware的应用实例,我在仿真平台上创建了一块64 K的FRAM (不需要擦写扇区),然后写了个firmware应用移植了一个FAT的文件系统在这块仿真的64K FRAM上,如下图, 我创建的仿真FRAM Firmware应用FAT文件系统跑在这块仿真NVRAM的效果 从图上我们可以看出, 1 - 在仿真平台上,我们能看到原始的Flash 的raw data,能看到在我们格式化FAT12之后,NVRAM的0扇区被写入了Fat文件的magic number (xxxMSDOS5xxxx),证明已经在仿真的FLASH格式化成功。 2 - 写个简单的fat文件系统应用来测试我们的移植的文件系统,从上图我们可以看到我创建了3个1.txt 2.txt 3.txt在0:/目录,然后打开1.txt写入5个字节0x5a,然后打开1.txt读出5个字节,控制台显示5a 5a 5a 5a 5a证明我们刚才打开文件,写入文件操作是成功。 3 - 有了这个利器,我们就可以在没有开发板,没有实际硬件的时候,直接可以调试应用,移植文件系统进行文件操作或者任何你想要掉电保存的数据。 首先来看看如何在仿真平台实现仿真FLASH元器件, FLASH的元器件的属性有, 1 - 扇区,块,默认数据0xff. 2 - 块,扇区写之前需要先擦除,快速读写的NVRAM不需要 3 - 读写数据按块,扇区操作。 了解到FLASH这些常用属性之后,我们就可以通过软件模拟FLASH元器件的操作达到仿真的目的,我们提供给用户可配置的项如下图: 我们实现FLASH的操作是通过PC文件来做的, 1 - 用户创建好FLASH配置之后,仿真平台为用户创建相应大小的2进制文件保存在软件安装根目录下,以便下次打开之后FLASH (文件)内容不会丢失。 2 - 得到FRIMWARE的读写命令时候,按照上面提到的FLASH行为对2进制文件进行读写擦除操作。 3 - 提供显示GUI读,搜索,查询FLASH内容,如图1所示。 基本上仿真平台这块的大体思路就是这样,也没有太难的地方,需要注意的地方对写操作的临界区保护。 提供给firmware使用的接口用 ////////////////////////////////////////////////////////// // // // Virtual Flash // // // ////////////////////////////////////////////////////////// extern int SimuWriteFlash(int ID,int startAddr,unsigned char *buf,int len); extern int SimuReadFlash(int ID,int len); extern int SimuEraseSec(int ID,int secID); extern int SimuEraseAllSeces(int ID); extern int SimuGetFlashStatus(int ID); Firmware就可以利用这些接口来实现自己的应用,fat文件系统的移植很简单,主要是修改diskio.c文件,将上面的仿真flash接口添加到文件里即可。 任何问题可以通过weibo923@sina.com联系我 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |