FATFS文件系统
- 底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。
- 中间层FATFS模块,实现了FAT 文件读/写协议。FATFS模块提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。
- 最顶层是应用层,使用者无需理会FATFS的内部结构和复杂的FAT 协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write 和f_close等,就可以像在PC 上读/写文件那样简单。
Fatfs文件系统操作流程
- 为磁盘工作区申请内存
- 为相关文件,图片缓存区申请缓存区域
- 通过f_mount为文件系统挂载物理内存
- 通过f_opendir打开文件夹
- 通过pic_get_tnum获取文件总数
程序流程
- KEY1按键按下时 检测SD卡
SD卡初始化
- 通过引脚复用,使用F4的SDIO模块进行配置
- 由于SD卡读取大文件速度较慢,故挂载在DMA上保证主流程运行速度
- 通过SDIO为SD卡上电。
- 获取SD卡信息 卡的类型,结构,大小等信息。
- 选中SD卡,设置始终频率,DMA模式(数据传输模式),以及工作模式。
malloc动态内存
- 申请内存 mymalloc(SRAMIN,100);
- 分配内存 (FIL*)mymalloc(SRAMIN,sizeof(FIL));
- 释放内存 myfree(SRAMIN,fftemp);
CCM内存
- CCM(Core Coupled Memory)是给F4内核专用的全速64KB RAM, 它们没有经过总线矩阵, F4内核与之直接相连, 地址空间在0x1000_0000 ~ 0x1000_FFFF.
SD协议
- SDIO_CK时钟是通过PC12引脚连接到SD卡的,是SDIO接口与SD卡用于同步的时钟。
- SDIO选配器挂载到AHB总线上,通过HCLK二分频输入到适配器得到SDIO_CK的时钟,这时SDIO_CK = HCLK/(2+CLKDIV)。其中CLKDIV是SDIO_CLK(寄存器)中的CLKDIV位。
- 另外,SDIO_CK也可以由SDIOCLK通过设置bypass模式直接得到,这时SDIO_CK = SDIOCLK=HCLK。
通过下面的库函数来配置时钟:
SDIO_Init(&SDIO_InitStructure);
对SD卡的操作一般是大吞吐量的数据传输,所以采用DMA来提高效率,SDIO采用的是DMA2中的通道4。在数据传输的时候SDIO可向DMA发出请求。
BMP解码
- 信息包括位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列。
- JPEG 标记码(Tag)和压缩数据。标记码由两个字节构成,其前一个字节是固定值0xFF,后一个字节则根据不同意义有不同数值。
Comments