赞
踩
一、项目要求
在 eMMC驱动移植实验的基础上,加上 FatFs 文件系统,实现 eMMC 卡中文件的读写及其它操作
目的:
(1)了解 FatFs 文件系统的原理
(2)掌握 FatFs 文件系统的移植方法
(3)实现 eMMC卡中文件的读写
(4)测试 eMMC读写速度并分析优化
二、FATFS原理
1、底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。
2、中间层FATFS模块,实现了FAT 文件读/写协议。FATFS模块提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。
3、最顶层是应用层,使用者无需理会FATFS的内部结构和复杂的FAT 协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write 和f_close等,就可以像在PC 上读/写文件那样简单。
三、FATFS移植
1、版本 FatFs - FAT file system module R0.11 ©ChaN, 2015
2、下载地址 http://elm-chan.org/fsw/ff/00index_e.html
3、将下载文件解压到工程目录
4、在mdk工程界面中新建FatFS目录,添加如下文件:
5、魔术棒中设置头文件路径
操作到这里,工程文件结构就算完整了,接下来就是修改文件代码。这里有两个文件需要修改,分别为 user_diskio.c 文件和 ffconf.h 文件。
6、读写函数框架构建
user_diskio.c文件是用户需要完成的diskio驱动程序框架,包括初始化驱动器、获取驱动器状态、读写驱动器等接口函数,需要用户根据使用的芯片和底层函数接口自行配置。
(1)从emmc卡中读取数据函数:
/** * @brief Reads Sector(s) * @param pdrv: Physical drive number (0..) * @param *buff: Data buffer to store read data * @param sector: Sector address (LBA) * @param count: Number of sectors to read (1..128) * @retval DRESULT: Operation result */ DRESULT USER_read ( BYTE pdrv, /* 物理扇区,多个设备时用到(0...) */ BYTE *buff, /* 数据缓存区 */ DWORD sector, /*扇区首地址in LBA */ UINT count /* 扇区个数(1..128) */ ) { DRESULT res = RES_ERROR; uint32_t timeout; uint32_t alignedAddr; alignedAddr = (uint32_t)buff & ~0x1F; //更新相应的DCache SCB_CleanDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr)); if(HAL_MMC_ReadBlocks_DMA(&hmmc1, (uint8_t*)buff, (uint32_t) (sector), count) == HAL_OK) { /* Wait that the reading process is completed or a timeout occurs */ timeout = HAL_GetTick(); while
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。