文章目录
一、实验要求
掌握SD卡协议原理,用STM32F103完成对SD卡的数据读取(fat文件模式)。
二、SD卡协议
SDIO协议简介
SD卡(Secure Digital Memory
Card)在我们的生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是 SPI接口,另外一种就是
SDIO接口。SDIO 全称是 安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SD I/O卡 都有
SDIO接口。STM32F103系列控制器有一个 SDIO主机接口,它可以与 MMC卡、SD卡、SD I/O卡 以及 CE-ATA
设备进行数据传输。
参考资料:
多媒体卡协会网站 www.mmca.org 中提供了有MMCA技术委员会发布的多媒体卡系统规范。
SD卡协会网站 www.sdcard.org 中提供了SD存储卡和SDIO卡系统规范。
CE-ATA工作组网站 www.ce-ata.org 中提供了CE_ATA系统规范。
SD卡物理结构
一张 SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器 5个部分。
存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;
电源检测单元 保证 SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;
卡及接口控制单元 5个部分控制 SD卡的运行状态,它包括有 8个寄存器;接口驱动器控制 SD卡引脚的输入输出。
SD卡功能框图如下:
SD卡的pin定义如下:
SD 卡寄存器
总共有 8个寄存器,用于设定或表示 SD 卡信息,如下:
SD卡操作模式
SD卡一般都支持 SDIO 和 SPI 这两种接口。
其中SD卡模式的信号线有:CLK、CMD、DAT0-DAT3,6根线。
SPI模式的信号线有:CS、CLK、MISO(DATAOUT)、MOSI(DATAIN),4根线。
SD卡的命令格式:命令CMD0就是0,CMD16就是16,以此类推。
SD卡的命令总共有12类,下表为几个比较重要的命令:
SD卡初始化(SPI模式)
SPI操作模式下:在SD卡收到复位命令时,CS为有效电平(低电平),则SPI模式被启用,在发送CMD之前要先发送74个时钟,64个为内部供电上升时间,10个用于SD卡同步;之后才能开始CMD操作,在初始化时CLK时钟不能超过400KHz。
1、初始化与SD卡连接的硬件条件(MCU的SPI配置,IO口配置);
2、上电延时(>74个CLK);
3、复位卡(CMD0),进入IDLE状态;
4、发送CMD8,检查是否支持2.0协议;
5、根据不同协议检查SD卡(命令包括:CMD55、CMD41、CMD58和CMD1等);
6、取消片选,发多8个CLK,结束初始化
这样我们就完成了对SD卡的初始化,注意末尾发送的8个CLK是提供SD卡额外的时钟,完成某些操作。通过SD卡初始化,我们可以知道SD卡的类型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以开始读写数据了。
SD卡读取与写入(SPI模式)
1、发送CMD17;
2、接收卡响应R1;
3、接收数据起始令牌0XFE;
4、接收数据;
5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。
6、禁止片选之后,发多8个CLK;
以上就是一个典型的读取SD卡数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下:
1、发送CMD24;
2、接收卡响应R1;
3、发送写数据起始令牌0XFE;
4、发送数据;
5、发送2字节的伪CRC;
6、禁止片选之后,发多8个CLK;
以上就是一个典型的写SD卡过程。
我们在用USB转TTL为STM32供电的时候一定需要接到5V上面去,并且在用32给SD卡模块供电的时候一定一定要接到5V电源上,否则我们无法驱动该SD模块
三、实验过程
使用CubeMX创建工程:
配置SYS为Serial Wire
将PA4设置如图所示:
设置串口:配置USART1为默认Asynchronous
配置SPI1为全双工主模式: