[sd card] sd card初始化流程

以SD 3.0为例。 建议先参考《SD card初始化时的总线设置》。一、sd card初始化流程思路说明通过《SD_Ver3.00_Final_090416》协议中“4.2 Card Identification Mode ”和“4.3 Data Transfer Mode ”来进行说明。1、sd card操作模式和卡状态通过sd card有如上card状态以及对应的操作模式。inactive
摘要由CSDN通过智能技术生成

以SD 3.0为例。
建议先参考《[sd card] SD card初始化时的总线设置》。

一、sd card初始化流程思路说明

通过《SD_Ver3.00_Final_090416》协议中“4.2 Card Identification Mode ”和“4.3 Data Transfer Mode ”来进行说明。

1、sd card操作模式和卡状态

通过

avatar

sd card有如上card状态以及对应的操作模式。

  • inactive mode
    非激活模式。当host提供的电压不在card的电压的可用范围之内时,会进入这种状态。
    这种状态下,card不会响应任何命令。

  • card identification mode
    card识别模式,host激活card和识别card的模式。
    这些操作都是在card对应的CMD线上完成,并且在card identification mode模式下的所有通讯都只能在CMD线上完成。
    在卡识别的过程中,card应该工作在f-OD的工作频率下。

  • data transefer mode
    数据传输模式,在这种模式下,host和card可以根据data线来传输数据

2、card identification mode流程说明

整个card identification mode都是外部对于sd card的初始化过程。
如下图所示:

avatar

  • 操作条件
    卡识别模式。参考《SD_Ver3.00_Final_090416》“4.2 Card Identification Mode ”
    顾名思义,就是识别card的一个模式。一个mmc总线上可以接多张card,因此需要在这个模式下识别和激活对应的card并使之进入对应的模式。
    在卡识别模式下,host会先复位所有在Card Identification Mode下的card,验证操作电压的范围,辨认card并且分配给其对应的RCA地址。
    这些操作都是在card对应的CMD线上完成,并且在card identification mode模式下的所有通讯都只能在CMD线上完成。
    在卡识别的过程中,card应该工作在f-OD的工作频率下。

avatar
通过上述表格可以看出Card Identification Mode下,时钟频率不能超过400kHz。
card identification mode下有如下几种操作

  • card reset
    GO_IDLE_STATE(CMD0)命令是软件复位命令,并且是一个广播指令,可以使所有的card进入idle状态(除了处于inactive状态的card)。
    如果是通过上电操作进行的复位,那么所有的card都会直接进入idle状态,也包括之前处于inactive状态的card。
    不论是CMD0或这是power-on进行的复位,所有被复位的card的CMD线都会处于input状态,等待下一次命令的起始位。同时,所有card会简单的初始化,将其RCA地址设置为0x0000,并且设置一个默认的驱动强度模式。

  • operation condition validation
    这个操作是用于验证card的操作条件。
    在开始host和card的通讯之前,host并不知道card支持的工作电压,并且card也不知道当前host提供的电压是多少。在这种情况下,host会先假设card支持某个电压并且将card的工作电压设置成该电压,然后发送给card复位命令CMD0。
    为了验证host假定的电压是否被card支持,SD 2.0协议中定义了一个新的命令CMD8。SEND_IF_COND(CMD8)命令是用来验证sd card接口的操作条件。card会通过分析SEND_IF_COND(CMD8)命令的参数来判断host的操作条件的正确性(也就是工作电压是否在card支持的范围之内),card把SEND_IF_COND(CMD8)命令的参数中的VHS域(注意,同时只能有1个bit被设置成1)当作当前host提供的工作电压以此来判断是否当前的供电电压是否符合。如果card检测到供电电压符合操作条件的话,会在response中返回自己支持的工作电压。如果不符合的话,不会返回response并且仍处于idle状态。host也会根据SEND_IF_COND(CMD8)命令的response中的VHS域来获取card支持的工作电压。注意,CMD8并不会因此card状态发生变化,这种功能也可以通过ACMD41来实现!!!
    ocr寄存器如下,主要关注VHS域:

avatar

__注意,重要,虽然ACMD41也可以用来获取card支持的工作电压,但是必须在发送ACMD41之前先发送CMD8。因为当card收到CMD8之后,就会知道host是支持SD 2.0协议的,便会使能自己的一些符合SD 2.0的新功能。同时,对于低电压host来说,先发送CMD8也是必须的。因为如果一个双电压card(支持高电压和低电压)没有接收到CMD8的话,只会工作在高电压模式,此时如果该card收到了ACMD41会误以为工作电压不符合操作条件,就会进入inactive模式。__
SD_SEND_OP_CON(ACMD41)是让card用来验证工作电压、并且拒绝不符合操作条件的host的命令。host会将自己的提供的供电范围作为ACMD41的参数,card收到ACMD41命令之后如果检测到供电范围不符合自己的标准,就会进入到inactive状态。后面会继续说明的。
__当ACMD41的参数为0时,所有的card都会返回自己支持的工作电压(ocr)并且不会进到inactive模式。所以,host可以先设定一个比较通用的工作点发送一个参数为0的ACMD41、从得到的response中获取card支持的工作电压,此时card并不会进行其他操作。然后host根据card支持的工作电压、选择一个合适的电压为card进行供电。__
  • card initialization
    card的内部初始化是在card处理非0参数ACMD41命令的过程中完成的。
    • 首先看一下ACMD41的命令格式

avatar

参数位的意义如下: 
bit23-8:ocr,当前使用的工作电压
bit24:S18R,当host支持1.8V的信号电压时,设置这个bit。card如果自己也支持1.8V的信号电压的模式的话,会在response中设置同样位置的位。
bit28:SDXC的电源控制功能。并没有详细说明。
bit30:HCS,host capacity support,当设置为0时,表示host只支持SDSC类型的card,当设置为1时,说明host支持处理SDHC和SDXC类型的card。
__host向card发送SD_SEND_OP_CON(ACMD41)命令可以触发card的内部初始化流程。而card会根据上述的位设置进行响应的处理。注意,是在card收到CMD8命令后的前提下,否则,上述有些位card会直接忽略掉。__
  • 在看一下ACMD41的response的格式

avatar

 bit24:S18A,当card收到的ACMD41的S18R为1时,会在这个位设置自己是否支持切换到1.8V的信号电压的模式下,如果支持,那么设置S18A为1.
 bit30:CCS,card capacity status,card的容量状态。当card收到的ACMD41的HCS为1时(也就是host支持处理SDHC或者SDXC card),如果该card是SDHC或者SDXC,那么就将这个位设置为1,否则,设置为0.
 bit31:busy,当card收到参数不为0的ACMD41命令时,就开始进行内部初始化,如果返回response时初始化还没有完成,那么这个位设置为0。否则,设置为1。

注意,host必须根据自己的状态来设置ACMD41的参数。并且不断发送ACMD41给card直到检测到busy为1,此时的CCS和S18A才是可靠的。随后,card进入了ready state。

  • card bus signal voltage switch
    通常card刚上电的情况下,其信号电压一般都是处于3.3V的模式。当card进入ready状态后,为了节省功耗,首先需要考虑是是否需要切换信号电压到1.8V。
    前面说过,如果host支持输出1.8V的信号电压的话,会将ACMD41的参数的S18R(bit24)设置为1来告诉card。当card收到这个ACMD41时,如果自己允许切换到1.8V的信号电压模式,那么就设置response的S18A(bit24)设置为1,否则设置为0。
    当host从response的S18A(bit24)解析出1的时候,可以向card发送CMD11命令,来通知card准备切换到1.8V的信号电压模式了。随后,host就可以将自己的输出的信号电压切换到1.8V了。
    此时,card还是处于ready state。

  • card identification process
    card识别过程。
    host会向card发送ALL_SEND_CID(CMD2)命令来要求card发送它们各自独一无二的cid寄存器的值。一旦card收到这条命令并且向host发送了自己的CID值,就会直接进入到identification state。
    随后,host会通过SEND_RELATIVE_ADDR(CMD3)命令来要求card自己编一个RCA地址并通过response返回给host,随后card就会进入stand-by模式。而RCA地址则会作为在transfer mode中,该card的通讯地址。注意,如果host对于card自己发布的这个地址不满意,可以重复发送CMD2要求card修改RCA地

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值