1.SDIO
SDIO全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SDI/O卡都有SDIO接口。
SD卡(Secure Digital Memory Card)即:安全数码卡; SD卡按容量分类,可以分为3类:SDSC卡、SDHC卡、SDXC卡
SD卡优点:
①高容量,最大可达2TB(目前已有512GB的SD卡)。
②高安全性。
③高速,目前已有读取速度近100MB/S的SD卡。
④体积小巧,标准SD卡大小只有一张邮票大小,重量仅2g。
⑤接口简单,支持SPI和SDIO两种访问模式。
注意:TF卡+卡套,组合起来也可以当SD卡用,不过,很大一部分TF卡,不支持SPI访问模式。所以,SPI驱动SD卡的时候,尽量选择大卡(SD卡),而不要选择TF卡。
SD命令有4种类型:
无响应广播命令(bc),发送到所有卡,不返回任务响应;
带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
寻址命令(ac),发送到选定卡,DAT线无数据传输;
寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。
要实现SDIO驱动SD卡,最重要的步骤就是SD卡的初始化
从SD卡初始化流程可知,不管什么卡(这里我们将卡分为4类:SD2.0高容量卡(SDHC,最大32G),SD2.0标准容量卡(SDSC,最大2G),SD1.x卡和MMC卡),首先我们要执行的是卡上电(设置SDIO_POWER[1:0]=11),上电后发送CMD0,对卡进行软复位,之后发送CMD8命令,用于区分SD卡2.0,只有2.0及以后的卡才支持CMD8命令,MMC卡和V1.x的卡,是不支持该命令的。
CMD3,用于设置卡相对地址(RCA,必须为非0),对于SD卡(非MMC卡),在收到CMD3后,将返回一个新的RCA给主机,方便主机寻址。RCA的存在允许一个SDIO接口挂多个SD卡,通过RCA来区分主机要操作的是哪个卡。对于MMC卡,则不是由SD卡自动返回RCA,而是主机主动设置MMC卡的RCA,即通过CMD3带参数(高16位用于RCA设置),实现RCA设置。同样MMC卡也支持一个SDIO接口挂多个MMC卡,不同于SD卡的是所有的RCA都是由主机主动设置的,而MMC卡的RCA则是SD卡发给主机的。
在获得卡RCA之后,我们便可以发送CMD9(带RCA参数),获得SD卡的CSD寄存器内容,从CSD寄存器,我们可以得到SD卡的容量和扇区大小等十分重要的信息。CSD寄存器。
最后通过CMD7命令,选中我们要操作的SD卡,即可开始对SD卡的读写操作了
一般SD卡在接收到命令行,都会有一个应答(CMD0例外),这个应答我们也称之为响应。STM32的SDIO接口,支持2种响应类型:短响应(48位)和长响应(136位)。
2.FATFS
FF_USE_STRFUNC设为1:开启字符串功能
FF_USE_MKFS设为1:开启格式化功能
FF_CODE_PAGE设为936:简体中文
FF_MIN_SS、FF_MAX_SS设为512:扇区大小512
FF_FS_TINY设为1:文件对象(FIL)不再包括数据缓冲区,而是使用FatFs中的公用缓冲区,适用于RAM偏小的情况。
FF_FS_NORTC设为1:禁用RTC(时间戳)功能,因为stm32不具备获取时间的功能