第25章 串行FLASH文件系统FatFs (11)

成功打开文件之后就可以使用f_write函数和f_read函数对文件进行写操作和读操作。这两个函数用到的参数是一致的,只不过一个是数据写入,一个是数据读取。f_write函数第一个形参为文件对象指针,使用与f_open函数一致即可。第二个参数为待写入数据的首地址,对于f_read函数就是用来存放读出数据的首地址。第三个参数为写入数据的字节数,对于f_read函数就是欲读取数据的字节数。第四个参数为32位无符号整形指针,这里使用fnum变量地址赋值给它,在运行读写操作函数后,fnum变量指示成功读取或者写入的字节个数。

最后,不再使用文件系统时,使用f_mount函数取消挂载。

25.3.7  下载验证

保证开发板相关硬件连接正确,用USB线连接开发板“USB TO UART”接口跟电脑,在电脑端打开串口调试助手,把编译好的程序下载到开发板。程序开始运行后,RGB彩灯为蓝色,在串口调试助手可看到格式化测试、写文件检测和读文件检测三个过程;最后如果所有读写操作都正常,RGB彩灯会指示为绿色,如果在运行中FatFs出现错误RGB彩灯指示为红色。

虽然我们通过RGB彩灯指示和串口调试助手信息打印方法来说明FatFs移植成功,并顺利通过测试,但心底总是很踏实,所谓眼见为实,虽然我们创建了“FatFs读写测试文件.txt”这个文件,却完全看不到实体。这个确实是个问题,因为我们这里使用SPI Flash芯片作为物理设备,并不像SD卡那么方便直接用读卡器就可以在电脑端打开验证。另外一个问题,就目前来说,在QSPI Flash芯片上挂载FatFs好像没有实际意义,无法发挥文件系统功能。

实际上,这里归根到底就是我们目前没办法在电脑端查看QSPI Flash芯片内FatFs的内容,没办法非常方便拷贝、删除文件。我们当然不会做无用功,STM32控制器还有一个硬件资源可以解决上面的问题,就是USB!我们可以通过编程把整个开发板变成一个U盘,而U盘存储空间就是SPI Flash芯片的空间。这样非常方便实现文件读写。至于USB内容将在USB相关章节讲解。

1.4  FatFs功能使用实验

上个实验我们实现了FatFs的格式化、读文件和写文件功能,这个已经满足很多部分的运用需要。有时,我们需要更多的文件操作功能,FatFs还是提供了不少的功能的,比如设备存储空间信息获取、读写文件指针定位、创建目录、文件移动和重命名、文件或目录信息获取等等功能。我们接下来这个实验内容就是展示FatFs众多功能,提供一个很好了范例,以后有用到相关内容,参考使用非常方便。

25.4.1  硬件设计

本实验主要使用FatFs软件功能,不需要其他硬件模块,使用与FatFs移植实验相同硬件配置即可。

25.4.2  软件设计

上个实验我们已经移植好了FatFs,这个例程主要是应用,所以简单起见,直接拷贝上个实验的工程文件,保持FatFs底层驱动程序,我们只改main.c文件内容,实现应用程序。

FatFs多项功能测试

代码清单 2510 FatFs多项功能测试

1 static FRESULT miscellaneous(void)

2 {

3     DIR dir;

4     FATFS *pfs;

5     DWORD fre_clust, fre_sect, tot_sect;

6

7     printf("\n*************** 设备信息获取 ***************\r\n");

8     /* 获取设备信息和空簇大小 */

9     res_flash = f_getfree("0:", &fre_clust, &pfs);

10

11     /* 计算得到总的扇区个数和空扇区个数 */

12     tot_sect = (pfs->n_fatent - 2) * pfs->csize;

13     fre_sect = fre_clust * pfs->csize;

14

15     /* 打印信息(4096 字节/扇区) */

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzsjd.html