参考文献
[1].V3学院
项目简述
现在FPGA板卡上面常用的存储设备是SD卡,也经常将BOOT文件下载到SD卡中启动。那么这篇文章我们将讲解使用API函数来进行SD卡的读写,当然使用纯FPGA写Verilog也是可以读写SD卡,遵循SPI协议,后面的文章我们会进行相应的介绍,这篇文章先来讲解简单的C语言访问SD卡。
工程描述:ZYNQ利用FAT文件系统对SD卡些一张图片。
本次实验所用到的软硬件环境如下:
1、VIVADO 2019.1
2、米联客MZ7015FA开发板
FAT文件架构简述
本片博客我们将利用开源的FAT文件系统架构,介绍及维护这个系统的网址如下:FAT。打开这个网址,我们便可以看到如下信息:
点开每一个函数都有详细的参数说明及例子:
同学们可以主要通过上面的例子进行相应的学习,了解每个函数的功能。这里注意上面的介绍非常详细,尤其是示例工程。
那么学习到这里的同学或许会问,我们明白了上面函数的作用,那么我们如何将上面的系统框架引用到ZYNQ中呢?因为我们直接写相应的FAT中的函数,ZYNQ肯定不会识别的,这里我们将给出详细的操作步骤。
首先右击相应工程的bsp文件,选择Board Support Package Setting
然后点击相应的xilffs
然后重新生成相应的bsp文件即可。接下来我们对常用的函数进行简单的介绍:
//挂载的函数
//The f_mount fucntion registers/unregisters filesystem object to the FatFs module.
FRESULT f_mount (
FATFS* fs, /* [IN] Filesystem object */
const TCHAR* path, /* [IN] Logical drive number */
BYTE opt /* [IN] Initialization option */
);
//The f_open function opens a file.
FRESULT f_open (
FIL* fp, /* [OUT] Pointer to the file object structure */
const TCHAR* path, /* [IN] File name */
BYTE mode /* [IN] Mode flags */
);
//The f_write writes data to a file.
FRESULT f_write (
FIL* fp, /* [IN] Pointer to the file object structure */
const void* buff, /* [IN] Pointer to the data to be written */
UINT btw, /* [IN] Number of bytes to write */
UINT* bw /* [OUT] Pointer to the variable to return number of bytes written */
);
//The f_read function reads data from a file.
FRESULT f_read (
FIL* fp, /* [IN] File object */
void* buff, /* [OUT] Buffer to store read data */
UINT btr, /* [IN] Number of bytes to read */
UINT* br /* [OUT] Number of bytes read */
);
//The f_sync function flushes the cached information of a writing file.
FRESULT f_sync (
FIL* fp /* [IN] File object */
);
//The f_close function closes an open file.
FRESULT f_close (
FIL* fp /* [IN] Pointer to the file object */
);
这里需要特别注意f_sync函数,是将
至于上面函数中每个参数的作用,同学们可以打开博客中上面的连接进行学习,上面的介绍非常详细。
bmp图像数据格式
bmp图像主要由下面结构组成:
1、文件头结构
2、信息头结构
3、颜色表
4、像素数据
对于bmp格式的24位真彩图,上面的颜色表信息为空,因为24位不需要颜色表的映射。至于每个结构里面具体的信息,我们给出相应的头文件,可以学习上面的注释。