Article May 19, 2021

Untitled

Words count 2.5k Reading time 2 mins. Read count 0

FATFS文件系统

    1. 底层接口,包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。
    1. 中间层FATFS模块,实现了FAT 文件读/写协议。FATFS模块提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。
    1. 最顶层是应用层,使用者无需理会FATFS的内部结构和复杂的FAT 协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write 和f_close等,就可以像在PC 上读/写文件那样简单。

Fatfs文件系统操作流程

    1. 为磁盘工作区申请内存
    1. 为相关文件,图片缓存区申请缓存区域
    1. 通过f_mount为文件系统挂载物理内存
    1. 通过f_opendir打开文件夹
    1. 通过pic_get_tnum获取文件总数

程序流程

    1. 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协议

    1. SDIO_CK时钟是通过PC12引脚连接到SD卡的,是SDIO接口与SD卡用于同步的时钟。
    1. SDIO选配器挂载到AHB总线上,通过HCLK二分频输入到适配器得到SDIO_CK的时钟,这时SDIO_CK = HCLK/(2+CLKDIV)。其中CLKDIV是SDIO_CLK(寄存器)中的CLKDIV位。
    1. 另外,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,后一个字节则根据不同意义有不同数值。
0%