工程文件.zip

  • 浏览量:1028
  • 下载量:76
  • 资料大小:1.68 MB
  • 日期:2017-05-26
  • 上传者:donatello
  • 分享
  • 评论
  • 举报
  • 收藏

资料描述

    调通了sd卡之后,就可以进行基于sd卡的fatfs的学习了。俗话说内行看门道,外行看热闹,平时用stm32插sd卡看图片、播音乐觉得挺好玩,真正自己去调一次fatfs那真不是一般的困难。抛开fatfs中间层驱动ff.c/ff.h/diskio.h那些函数的实现原理不管,就是调用表层api如f_open、f_write这些函数都一波三折,最后还得参考官方例程。


    fatfs官方提供了一系列的驱动包,这些驱动包有ff.c/ff.h、ff_gen_drv.c/ff_gen_drv.h、diskio.c/diskio.h、ffconf.h、integer.h,在这些驱动文件中官方已经把fatfs具体如何实现的函数都打包好了,我们无须理会也不要乱改,我们要改的只有带前缀的diskio.c/diskio.h扇区驱动源文件和头文件如sd_diskio.c/sd_diskio.h或者usb_diskio.c/usb_diskio.h,这些函数里面都有一个类型为diskio_drvtypedef的名为xx_driver硬件驱动结构体指针,里面包含有xx_initialize,xx_status,xx_read, xx_write,xx_ioctl五个函数指针,xx为自定义名称如sd、sram、flash、usbhost等等,diskio_drvtypedef的定义是在ff_gen_drv.h里面的,其作用是让fatfs文件系统与相应的sd、sram、flash、usbhost等硬件设备挂载对接,因此在xx_diskio.c/xx_diskio.h中需要“枚举”一个xx_driver出来(本质并不是enum那种枚举,而是像int a那样定义一个int类型的名为a的变量,说是枚举只是更容易理解,就类似于重定义fputc()函数以便让printf()函数选择相应串口外设或者lcd外设一样,说是“充当”或者“挂载器件”更为贴切),并在xx_initialize、xx_read、xx_write的函数中分别定义好外设的初始化函数、外设读取数据函数、外设写入数据函数,只要这些函数都没问题,fatfs就能在指定的存储设备中正常工作。
评论(0)

登录后可评论,请 登录注册

   
相关资料
换一换