硬件设计-SD卡电路设计
SD卡是基于flash的存储卡。
SD卡和MMC卡的区别在于初始化过程不同。
SD卡的通信协议包括SD和SPI两类。(我们今天主要讲解SDIO通讯)
MicroSD的体积更小且可以转换SD卡使用,TF卡的电路和引脚和SD卡是一样的。
1.引脚说明
SD卡:
SD卡内部引脚
TF卡:
SD 卡使用 9-pin 接口通信,其中 3 根电源线、 1 根时钟线、 1 根命令线和 4 根数据线,具体说明如下:
- CLK: 时钟线,由 SDIO 主机产生,即由 STM32 控制器输出;
- CMD: 命令控制线, SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应答 (响应), SD 卡也是通过该线传输应答信息;
- D0-3: 数据线,传输读写数据; SD 卡可将 D0 拉低表示忙状态;
- VDD、 VSS1、 VSS2: 电源和地信号。
2.时序说明
SD 卡刚刚初始化的时候,其时钟频率(SDIO_CK)是不能超过 400Khz的,否则可能无法完成初始化。在初始化以后,就可以设置时钟频率到最大了。
SDIO 的所有命令和响应都是通过 SDIO_CMD 引脚传输的,任何命令的长度都是固定为 48 位,
一般情况下,选中的 SD 卡在接收到命令之后,都会回复一个应答(注意 CMD0 是无应答的),这个应答我们称之为响应,响应也是在 CMD 线上串行传输的。有两种相应类型,:短响应(48 位)和长响应(136 位),这两种响应类型都带 CRC 错误检测。
SD 存储卡总共有 5 类响应(R1、R2、R3、R6、R7)。
数据在 SDIO 控制器与 SD 卡之间的传输,是以数据块的形式传输的。
卡上电后发送CMD0命令,之后发送 CMD8命令,通过其带的参数我们可以设置 VHS 位,以告诉 SD卡,主机的供电情况。
发送 ACMD41(注意发送 ACMD41 之前要先发送 CMD55),来进一步确认卡的操作电压范围。
ACMD41 得到的响应(R3)包含 SD 卡 OCR 寄存器内容。
最后发送了 CMD2 和 CMD3 命令,用于获得卡 CID 寄存器数据和卡相对地址(RCA)。
CMD3,用于设置卡相对地址RCA。RCA 的存在允许一个 SDIO 接口挂多个 SD 卡,通过 RCA 来区分主机要操作的是哪个卡
SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息
还需要将置 SDIO 的数据位宽为 4 位。
该函数先发送 CMD16,用于设置块大小,然后配置 SDIO 控制器读数据的长度,然后发送 CMD17(带地址参数 addr),从指定地址读取一块数据。
SD卡命令共分为12类,分别为class0到class11,
不同的SDd卡,主控根据其功能,支持不同的命令集 如下:
Class0 :(卡的识别、初始化等基本命令集)
CMD0:复位SD 卡.
CMD1:读OCR寄存器.
CMD9:读CSD寄存器.
CMD10:读CID寄存器.
CMD12:停止读多块时的数据传输
CMD13:读 Card_Status 寄存器
Class2 (读卡命令集):
CMD16:设置块的长度
CMD17:读单块.
CMD18:读多块,直至主机发送CMD12为止 .
Class4(写卡命令集) :
CMD24:写单块.
CMD25:写多块.
CMD27:写CSD寄存器 .
Class5 (擦除卡命令集):
CMD32:设置擦除块的起始地址.
CMD33:设置擦除块的终止地址.
CMD38: 擦除所选择的块.
Class6(写保护命令集):
CMD28:设置写保护块的地址.
CMD29:擦除写保护块的地址.
CMD30: Ask the card for the status of the write protection bits
class7:卡的锁定,解锁功能命令集
class8:申请特定命令集 。
class10 -11 :保留
数据线传输位置图。它先发低字节再发高字节,而每个字节则是先发高位再发低位,4线传输示意如图所示,4线同步发送,每根线发送一个字节的其中两个位,数据位在4线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位
3.硬件设计要点
SD卡座没有DETECT监测引脚。
TF卡座有一个DETECT监测引脚。需要上拉。所有对外接口都需要ESD芯片的保护。
在接1.8V的IO接口时需要通过电平转换芯片
硬件电路设计注意点
- 考虑静电保护
- IO接口电平匹配
- VCC的接口电容靠近卡座放置
- 卡座尽量放置在板边,方便插拔,走线需要先经过ESD芯片在到主机,最好不要打孔。
- SD单端走线50R
- 所有的信号线尽量在同一层,有利于信号一致性,与高频信号隔开,空间允许时记得包地,要有完整的参考平面
- 3W原则
- 组内数据线尽量控制在400mil以内。总长控制在12inch以内。
- 信号线要与clk做等长处理。误差在100mil以内。
- 除CLK外所有引脚上拉到VCC
- DETECT引脚需要上拉