fatfs移植

来源:互联网 发布:清华大数据产业联合会 编辑:程序博客网 时间:2024/06/09 08:35
  1. 首先将文件拷贝到工程中,其中包括diskio.h、ff.h、integer.h、ff.c、ffconf.h。
  2. 创建文件diskio.c。
  3. 将这些文件添加到工程中。
  4. 根据系统类型设置ffconf.h。
    • _FFCONF是代表了版本号,不做处理。
    • 函数和缓冲区配置
      • _FS_TINY设置缓冲区的位置,假如设置为0,也就是每个文件(FIL结构体)中带一个buf,否则的话,整个文件系统公用一个buf。目前没有郁闷到一点内存也没有的地步,所以还是选择为0。
      • _FS_READONLY设置是否文件只读,我们的系统是可读写的,所以设置为0。
      • _FS_MINIMIZE设置为0,因为以下的那些函数我们都用的着,不能简化。
      • _USE_STRFUNC设置是否使用字符串函数,主要有f_gets, f_putc, f_puts, f_printf四个函数,我们暂时不想用,因为我们的数据都是自定义结构体的储方式,为了节省空间这个设置为0。
      • _USE_MKFS设置是否实现f_mkfs函数。我们需要在设备初始化时完全格式化Flash,所以此函数需要。
      • _USE_FORWORD设置
      • _USE_FASTSEEK设置是否支持文件快速定位,它主要采用缓冲区来存储簇链映射图,以空间换时间,对于我们系统不合算,还是采用普通定位方式好。
    • 本地化和命名空间配置
      • _CODE_PAGE设置目标系统的本地化设置,本系统有ASCII支持就足够了,支持本地化的情况下,模块的大小将大幅增加,反而不符合我们选择FatFs的初衷,所以选择1。
      • _USE_LFN设置长文件名,我们系统不支持,也是因为不能带来多大好处。
      • _MAX_LFN不用设置,因为不支持长文件名。
      • _LFN_UNICODE设置长文件名是否支持Unicode,我们选择不支持,因为我们就不支持长文件名。
      • _FS_RPATH设置相对路径支持。相对路径在编程的时候特别方便,但是为了先移植成功,暂不支持。
    • 物理驱动器配置
      • _VOLUMES设置逻辑驱动器的个数,本目标系统是一块4M的Flash,所以默认为1。
      • _MULTI_PARTITION设置是否多个分区。本目标就一块4M的Flash,不值当的分几个区。
      • _USE_ERASE设置擦除扇区。我查看代码,只是在f_mkfs和remove_chain两个函数中添加擦除的代码,而且完全是额外代码,只要不影响使用的情况下,为了速度的原因,这些数据是没必要擦除的。
    • 系统配置
      • _WORD_ACCESS设置是否支持字访问。不支持。
      • _FS_REENTRANT设置是否重入。因为我们的系统文件访问不是很频繁,而且都是在一个任务中访问,所以不支持重入。
      • _FS_TIMEOUT超时设置。
      • _SYNC_t访问重入时的同步句柄。
      • _FS_SHARE设置文件共享,能同时被几个文件同时打开。设置为0。
  5. 设置完成后,编译程序,会发现disk_write, disk_read, disk_ioctl, disk_status, disk_initialize, get_fattime.
    • 根据系统配置来实现这些函数。顺序是先易后难。
    • get_fattime顾名思义是得到系统的时间。这个从RTC获取时间就OK。
    • disk_initialize和disk_status这两个函数实现的内容是一样的。因为都是为了获取驱动器的状态是否可以进行下一步操作,我们这里没那么多限制,只是限制驱动器号不要超界就好。
    • 然后是disk_ioctl,这个函数实现了控制I/O的特性设置。这个函数主要有5个控制标志:CTRL_SYNC, GET_SECTOR_COUNT, GET_SECTOR_SIZE, GET_BLOCK_SIZE, CTRL_ERASE_SECTOR.
    • disk_read磁盘写。
    • disk_write磁盘读。
    • disk_ioctl, disk_read, disk_write三个函数配合来实现目标系统的读写。如果目标系统有实现好的存储代码,只需要实现这三个函数和存储代码的接口就好,加入没有就需要写驱动程序和这三个函数配合,最好的方法是驱动和接口不要耦合,为了优化读写还可以添加磁盘缓存的代码。
  6. 添加测试代码测试。
原创粉丝点击