1.FatFS是一个为小型嵌入式系统设计文件系统模块
正常移植系统后我们需要修改文件系统的两个.C文件ffconf.h和 diskio.c 。 ffconf.h 配置文件 修改一些配置 也可使用stm32cubemx生成usbh_conf.c。 diskio.c 包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
使用stm32cubemx会生成usbh_diskio 该.c文件的作用就是实现文件系统底层驱动块与usb驱动的连接,其函数内容就是创建一个io驱动程序结构体编写(1)设备状态获取DSTATUS USBH_status (BYTE);(2)设备初始化DSTATUS USBH_initialize (BYTE);(3)扇区读取DRESULT USBH_read (BYTE, BYTE*, DWORD, UINT);(4)扇区写入 DRESULT USBH_write (BYTE, const BYTE*, DWORD, UINT);(5)其他控制 DRESULT USBH_ioctl (BYTE, BYTE, void*); 完成文件系统驱动函数与io驱动的联立 我们就可以正常使用fatfs的api函数 来对u盘的操作。如果使用的是stm32cubemx以上两个.c文件自动生成,可直接使用fatfs api函数编写用户程序。
正常使用文件系统时 使用的结构体和对象一般都在fatfs.c定义好了
1 f_mount 在fatfs模块上注册或注销一个工作区(文件系统对象)
f_mount(&USBHFatFS, (TCHAR const*)USBHPath, 0)
参数说明(1)&USBHFatFS文件系统对象结构体,;在fatfs定义好的结构体
(2)USBHPath 驱动路径指针 在fatfs定义好逻辑驱动器路径
2 f_open 创建/打开一个用于访问文件的文件对象
f_open(&USBHFile, filename, FA_READ);
参数说明(1)&USBHFile 文件对象
(2)文件名 需要自己宏定义好 (app.bin)
(3) 可以进行读 打开后对文件的权限
3 f_read 从一个文件读取数据
f_read(&USBHFile, RAM_Buffer, sizeof(RAM_Buffer), (void *)&APP_Size);
参数说明(1)&USBHFile 文件对象
(2)RAM_Buffer存储读取数据的缓冲区的指针 需要自己定义好(flash写入时写入的数据地址)
(3) sizeof(RAM_Buffer), 要读取的字节数
(4)&APP_Size 接收读取字节数的 UINT 变量的指针 (flash写入时写入的字长大小)
4 f_stat( filename, NULL)
(1) 文件名 需要自己宏定义好 (app.bin)
5 f_close 关闭一个打开的文件(与open相对应)
f_close(&USBHFile)
参数说明(1)&USBHFile 文件对象