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

5) _MIN_SS 、_MAX_SS:指定扇区大小的最小值和最大值。SD卡扇区大小一般都为512字节,SPI Flash芯片扇区大小一般设置为4096字节,所以需要把_MAX_SS改为4096

25.3.6  FatFs功能测试

移植操作到此,就已经把FatFs全部添加到我们的工程了,这时我们编译功能,顺利编译通过,没有错误。接下来,我们就可以使用编写 254中用户应用程序了。

主要的测试包括格式化测试、文件写入测试和文件读取测试三个部分,主要程序都在main.c文件中实现。

变量定义

代码清单 25-8  变量定义

1 FATFS fs;                         /* FatFs文件系统对象 */

2 FIL fnew;                         /* 文件对象 */

3 FRESULT res_flash;                /* 文件操作结果 */

4 UINT fnum;                        /* 文件成功读写数量 */

5 BYTE buffer[1024]= {0};           /* 读缓冲区 */

6 BYTE textFileBuffer[] =           /* 写缓冲区*/

7     "欢迎使用野火STM32 F429开发板 今天是个好日子,新建文件系统测试文件\r\n";

FATFS是在ff.h文件定义的一个结构体类型,针对的对象是物理设备,包含了物理设备的物理编号、扇区大小等等信息,一般我们都需要为每个物理设备定义一个FATFS变量。

FIL也是在ff.h文件定义的一个结构体类型,针对的对象是文件系统内具体的文件,包含了文件很多基本属性,比如文件大小、路径、当前读写地址等等。如果需要在同一时间打开多个文件进行读写,才需要定义多个FIL变量,不然一般定义一个FIL变量即可。

FRESULT是也在ff.h文件定义的一个枚举类型,作为FatFs函数的返回值类型,主要管理FatFs运行中出现的错误。总共有19种错误类型,包括物理设备读写错误、找不到文件、没有挂载工作空间等等错误。这在实际编程中非常重要,当有错误出现是我们要停止文件读写,通过返回值我们可以快速定位到错误发生的可能地点。如果运行没有错误才返回FR_OK

fnum是个32位无符号整形变量,用来记录实际读取或者写入数据的数组。

buffer和textFileBuffer分别对应读取和写入数据缓存区,都是8位无符号整形数组。

主函数

代码清单 259 主函数

1 int main(void)

2 {

3     SystemClock_Config();

4     /* Enable I-Cache */

5     SCB_EnableICache();

6     /* Enable D-Cache */

7     SCB_EnableDCache();

8     /* 初始化LED */

9     LED_GPIO_Config();

10     LED_BLUE;

11

12     /* 初始化调试串口,一般为串口1 */

13     DEBUG_USART_Config();

14     printf("****** 这是一个SPI FLASH 文件系统实验 ******\r\n");

15     //链接驱动器,创建盘符

16     FATFS_LinkDriver(&QSPI_Driver, QSPIPath);

17     //在外部SPI Flash挂载文件系统,文件系统挂载时会对SPI设备初始化

18     res_flash = f_mount(&fs,"0:",1);

19

20     /*----------------------- 格式化测试 ---------------------------*/

21     /* 如果没有文件系统就格式化创建创建文件系统 */

22     if (res_flash == FR_NO_FILESYSTEM) {

23         printf("FLASH还没有文件系统,即将进行格式化...\r\n");

24         /* 格式化 */

25         res_flash=f_mkfs("0:",0,0);

26

27         if (res_flash == FR_OK) {

28             printf("FLASH已成功格式化文件系统。\r\n");

29             /* 格式化后,先取消挂载 */

30             res_flash = f_mount(NULL,"0:",1);

31             /* 重新挂载 */

32             res_flash = f_mount(&fs,"0:",1);

33         } else {

34             LED_RED;

35             printf("《《格式化失败。》》\r\n");

36             while (1);

37         }

38     } else if (res_flash!=FR_OK) {

39         printf("!!外部Flash挂载文件系统失败。(%d)\r\n",res_flash);

40         printf("!!可能原因:SPI Flash初始化不成功。\r\n");

41         while (1);

42     } else {

43         printf("》文件系统挂载成功,可以进行读写测试\r\n");

44     }

45

46     /*----------------------- 文件系统测试:写测试 -----------------------------*/

47     /* 打开文件,如果文件不存在则创建它 */

48     printf("\r\n****** 即将进行文件写入测试... ******\r\n");

49     res_flash = f_open(&fnew, "0:FatFs读写测试文件.txt",FA_CREATE_ALWAYS | FA_WRITE );

50     if ( res_flash == FR_OK ) {

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

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