SD 卡接口设计[附硬件电路和程序]1 SD 卡标准SD 卡标准是 SD 卡协会针对可移动存储设备设计专利并授权的一种标准,主要用于制定卡的外形尺寸、电气接口和通信协议。1.1 SD 卡引脚功能SD 卡的外形如图1所示,引脚功能如表1所列。SD 卡的引脚具有双重功能,既可工作在 SD 模式,也可工作在 SPI模式。不同的模式下,引脚的功能不同。SD 模式多用于对 SD 卡读写速度要求较高的场合,SPI模式则是以牺牲读写速度换取更好的硬件接口兼容性。由于 SPI协议是目前广泛流行的通信协议, 大多数高性能单片机都配备了 SPI硬件接口,硬件连接相对简单,因此,在对 SD 卡读写速度要求不高的情况下,采用 SPI模式无疑是一个不错的选择。1.2 SPI 模式SPI模式是一种简单的命令响应协议,主控制器发出命令后,SD卡针对不 S 同的命令返回对应的响应。SD卡的命令列表都是以 CMD和 ACMD开头,分别指通用命令和专用命令,后面接命令的编号。例如,CMD17就是一个通用命令,用来读单块数据。在 SPI模式中,命令都是以如下的6字节形式发送的:每帧命令都以“01”开头,然后是6位命令号和4字节的参数(高位在前,低位在后),最后是7位 CRC校验和1位停止位“1”。SD卡的每条命令都会返回对应的响应类型。在 SPI 模式下,共有3种响应类型:R1、R2和 R3,分别占1、2和3个字节。这里仅列出了 R1响应的格 式,如表2所列。当出现表中所描述的状态时,相应的位置1。R2和 R3的第1个字节格式与 R1完全一样,详细内容请参考SD卡标准。2 硬件设计本设计选用 Freescale公司的32位低功耗微控制器 MCF51QE128,采用 SPI模式实现与SD卡的接口。由于 MCF51QE128是一款低功耗的微控制器,工作电压的典型值为3.6V,与 SD卡的工作电压兼容,因而可以直接与 SD卡连接,无需电平转换电路。这里选用的是 MCF51QE128的第2个 SPI口,硬件连接如图2所示。3 软件实现软件部分主要实现 MCF51QE128的初始化、底层 SPI通信,以及 SD卡的通用写命令、初始化和单块数据的读写等功能。3.1 MCF51QE128的初始化在与 SD卡通信之前,首先需要配置 MCF51QE128,并初始化 SPI端口。代码如下:3.2 底层 SPI 通信底层的 SPI 通信是实现最终读写的关键。由于 MCF51QE128自带 SPI 硬件接口,因此只需要读写 SPI数据寄存器的值。这里自定了 byte、word和 dword三种数据类型,分别对应于8位、16位和32位数据。代码如下:3.3 SD 卡的通用写命令由...