SD协议及其实现

眉间皱痕 提交于 2020-01-28 04:42:42

#硬件规格

1、存储容量

  • 标准容量SD 卡:最高达到2GB
  • 大容量SD存储卡(SDHC): 大于2GB、不大于32GB
  • 超大容量SD存储卡(SDXC):大于32GB、不大于2TB

2、电压范围

  • 高电压SD 卡-工作电压范围:2.7 -3.6V
  • 双电压SD 卡-工作电压范围:低电范围(T.B.D) 和2.7-3.6V

3、SD 卡形状

  • 标准尺寸的SD 卡
  • Mini SD 卡
  • Micro SD 卡

4、读写属性

  • 读写卡(闪存,一次可编程-OTP,多次可编程-MTP)
  • 只读卡(ROM)

5、速度等级

  • Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡
  • Class 2 – 最小2MB/s 的性能
  • Class 4 – 最小4MB/s 的性能
  • Class 6 – 最小6MB/s 的性能
  • Class 8 – 最小8MB/s 的性能
  • Class 10 – 最小10MB/s 的性能

6、总线拓扑

  • SD 总线
    这里写图片描述
    建议每个SD卡使用单独的SD总线
    CLK: 时钟信号
    CMD: 双向命令/响应信号
    DAT0-DAT3: 双向数据信号
    Vdd,Vss1,Vss2: 电源和地信号
    SD 总线允许数据线的动态配置。上电后SD卡默认使用DAT0 来传输数据。初始化之后,主机可以改变总线宽度(使用的数据线数目)。
    注意:当DAT1-DAT3 没有使用的时候,相关的主机DAT 先应该被设置为输入模式。SDIO卡DAT1 和DAT2 用于信令。
  • SPI 总线
    这里写图片描述
    CS: 主机到卡的片选(chip select)信号
    CLK: 主机到卡的时钟信号
    DataIn: 主机到卡的数据信号
    DataOut: 卡到主机的数据信号
    SPI 接口使用SD 总线的9 线里面的7 根(DAT1 和DAT2 不用,DAT3 作为CS 信号)

7、引脚功能

  • 9pin引脚(SPI只用7pin)
  • 这里写图片描述
    ● ① 类型解释:S-电源;I–输入;O–输出(使用推挽式单元?);PP-I/O(推挽式)
    ● ② 扩展数据线(DAT1-DAT3)上电之后是输入。在SET_BUS_WIDTH 命令之后作为数据线。当然不用的话,主机会让他们保持输入状态。
    ● ③上电时,这条线在卡中有一个50KOhm 的上拉。这个电阻有两个作用:卡检测和模式选择。作为模式选择,主机可以拉高或让别人拉高这个脚来选择SD 模式。如果主机想选择SPI 模式,应该把管脚拉低;作为卡检测,当管脚被拉高时,认为卡插入了。这条线的上拉在数据传输期间应该由用户通过命令SET_CLR_CARD_DETECT(ACMD42)命令来断开。
    ● ④DAT1 脚在SDIO 模式下,一旦没有数据传输,可能被用于输出中断(从卡到主机)
    ● ⑤DAT2 脚在SDIO 模式下,可能被用于“读等待信号”[见SDIO Card Specification]

8、传输方向

  • MSB在前,LSB在后

##SD卡硬件接口
SD 卡有6 条交互线以及3 条供电线

  • CMD :命令线,主机和卡都可以驱动它
  • DAT0-3 :数据线,主机和卡都可以驱动
  • CLK :时钟线,主机发送到卡的
  • Vdd :供电线
  • Vss1,Vss2 :两条地线

写保护和卡检测切换。不是强制的,如果有,应该像下图这么连接。当DAT3 作为卡检测功能时,DAT3 的Rdat 就不应该连接,而另一个电阻也应该接地。
总线电路图
Rdat 和Rcmd 是上拉电阻,保护CMD 和DAT 线,以免受到总线浮动影响,当没有卡插入,或者所有卡驱动都处于高阻抗模式。
主机应该通过Rdat 上拉DAT0-3 线,即使主机使用1bit 传输模式。同样,在SPI 模式,主机也应该上拉所有“RSV”线,即使没有使用。Rwp 用于写保护,卡检测切换

每个卡都有一组信息寄存器(第五章也有描述):
名字宽度描述
CID 128 卡识别号;用来识别的卡的个体号码(见5.2)。【强制的】
RCA 16 相对地址;卡的本地系统地址,初始化时,动态地由卡建议,主机核
准,SPI 模式不使用(见5.4)。【强制的】
DSR 16 驱动级寄存器;配置卡的输出驱动(见5.5)。【可选的】
CSD 128 卡的具体数据;卡的操作条件信息(见5.3)。【强制的】
SCR 64 SD 配置寄存器;SD 卡的特殊能力信息(见5.6)。【强制的】
OCR 32 操作条件寄存器(见5.1)。【强制的】
SSR 512 SD 状态;卡专有特征的信息(见4.10.2)。【强制的】
CSR 32 卡状态;卡状态信息(见4.10.1)。【强制的】

主机可以通过切换电源开关来实现卡的复位。但是每个卡都有自己的电源检测电路,用来在上电后将卡设置到一个预置状态,所以重启电源并不是必须的,通过发送GO_IDLE(CMD0)
同样可以让卡复位

###热插拔

###卡检测(插入/拔出)

###电源保护(插入/拔出)

##SD总线协议

  • 命令(Command):命令就是一个标记,用于发起一个操作。由主机发送到单个卡(寻址命令)或者所有卡(广播命令)。命令在CMD 线上是连续传输的。
  • 响应(Response):响应是一个标记,从寻址的卡或者所有卡(同步)发送给主机,作为向
    前接收到的命令的回答。响应也是在CMD 线上连续传输的。
  • 数据(Data):数据可以从主机到卡,也可以从卡到主机。通过数据线传输。
    这里写图片描述

响应标记以内容分,有4 种编码方式。编码的长度可以是48Bit 或者136bit。数据块的CRC 保护算法是一个16bit 的CCITT 多项式。
● R1 response:方向位[1Bit]+命令[8Bit]+状态信息[32Bit]+CRC[7Bit] = [48Bit]
● R2 response:方向位+命令+CID/CSD 寄存器+CRC = [136Bit]
● R3 response:方向位+命令+OCR 寄存器+CRC 校验= [48Bit]
● R6 response:方向位+命令+RCA 寄存器+CRC 校验= [48Bit]

SD 卡有两种数据包格式。
● (1)常规数据(8bit 宽):常规数据发送是先低字节,再高字节的顺序,但是每个字节则
是先高位后低位。
● (2)宽位数据(SD 存储寄存器):宽位数据从高开始传输。(不按字节传输)

##SD 卡功能描述

  • 三种模式:卡识别模式、数据传输模式、空闲模式
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!