FPGA和Nios II软核的SD卡文件系统实现方法
3 znFAT32文件系统的嵌入和SD卡的挂载
3.1 znFAT32文件系统概述
znFAT32是于振南为小型嵌入式设备完全独立编写,且开放源代码的FAT32文件系统解决方案。znFAT32能够支持众多的存储设备(SD卡、CF卡、Flash、U盘等),支持多个存储器共同工作,可以支持同时访问多个存储器对文件的操作。对硬件资源要求低,能够轻松地移植到51单片机、AVR、ARM、DSP、Nios II等处理器上,占用资源极少(仅占用800字节左右的RAM),非常适合嵌入式开发中文件系统的嵌入。其代码完全由C语言编写,能够轻松阅读,移植方便。其代码结构如图6所示。本文引用地址:https://www.eepw.com.cn/article/189745.htm
由图6可知该文件系统包含两层。
文件系统代码层——主要提供对存储设备进行操作的各种函数。
存储设备接口层——主要是为了挂载不同的存储设备。
3.2 文件系统SD卡的挂载
znFAT32文件系统挂载需要SD卡驱动层提供的扇区读写函数。将编写的扇区读写函数SD_Read_Sector、SD_Write_Sector取代文件系统中的FAT32_ReadSector与FAT32_WriterSector两个函数即可。根据需要的处理器编写SD卡驱动程序十分重要,只有保证驱动程序的正确性,才能进行文件系统的正确挂接,才能在挂接完成后对SD卡进行文件操作。
znFAT32文件系统的挂接需要对znFAT32文件系统提供的用于标定存储设备的全局变量Dev_No设备号进行处理,znFAT32文件系统给我们提供的存储设备宏定义如下:
对不同设备进行文件操作,需要通过设备号来选择不同的设备驱动函数。对SD卡操作需将Dev_NO定义为SDCARD。
4 文件系统在Nios II中的应用实例
完成SOPC系统的创建后,在生成的Nios II系统上通过Nios II EDS编程,便可将SD卡与文件系统挂接。
4.1 znFAT32文件系统的使用
znFAT32文件系统为用户提供的对文件的基本操作函数让我们能够轻松地对文件进行操作。下面列举了几个基本函数:
通过上面的函数,可以完成对SD卡的文件读写、删除、数据添加、目录创建、文件拷贝、文件重命名等操作。
4.2 SOPC系统对SD卡文件读写操作的验证
为了验证上述系统能否正常实现SD卡读写,笔者选用了4 GB容量的金士顿SDHC卡,进行了文件读写实验。图7为Nios II EDS给出的Deb ug信息窗口。信息显示了在构建的系统上SD卡的初始化(实现文件系统的挂接),接着读取SD卡的存储容量、扇区大小、每簇扇区数,并在根目录下面打开名为TEST.TXT的文件,并对该文件的信息进行读取。在一级子目录下面,同样建立一个TEST.TXT的文件,并对文件信息进行读取。
由运行结果可知,初始化成功并识别此SD卡为SDHC卡,容量为964 256(总簇数)×8(每簇扇区数)×512(每扇区字节数)≈3 968 860 160。根目录下的TEXT.TXT文件被打开,打开文件成功后在DIR1子目录下面创建TEST.TXT。由主函数创建的文件日期在TimeCreat[6]={12,1,4,17,40,28)中存放,文件成功后读取创建的新文件的详细信息。
为了进一步验证本系统对SD卡的写入操作,笔者将此SD卡通过读卡器与PC机连接,在PC机的文件系统下,显示了相同的结果。
结语
本文通过在CycloneⅡ系列FPGA上构建SOPC系统,并在该系统上基于NiosⅡ处理器构建了SD卡文件系统。该系统以SPI接口方式与SD卡连接,文件系统是面向嵌入式系统的紧凑型开放源码的系统。经过对SD卡的操作验证,证明本文提供的方案具有设计灵活、集成度高、通用性强、移植性好等诸多优点。在线阵CCD数据采集实验系统以及数控贴片控制系统上得到了很好的应用。
fpga相关文章:fpga是什么
51单片机相关文章:51单片机教程
c语言相关文章:c语言教程
评论