|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
上电后DATA管脚为input不可用,直到SET_BUS_WIDTH(ACMD6)命令送到卡上卡才可以进行操作。
DATA3将上拉50k用于sd卡检测,但在数据传输过程中这个管脚不应该上拉。用户通过SET_CLR_CARD_DETECT (ACMD42)控制。(这句话的意思就是说SD卡内部是有上拉的且可以控制是否上拉)。
SD卡要有6个寄存器,但有一个是可选的。
1 CID (必需)<128bits> card identification number
2 RCA(必需) <16bits> relative card address (卡的地址)
3 DSR (可选)<16bits> 用于配置卡的输出驱动能力
4 CSD (必需)<128bits> 卡特殊数据寄存器
5 SCR (必需)<64bits> 卡配置寄存器
6 OCR(必需)<32bits> 操作条件寄存器
Sd卡没有外部Reset信号,上电后直接进入预先进入定义好的状态,然后一个CMD0实现软的Reset。
通讯方式支持两种:
1 广播方式
在卡识别模式均为此方式。
2 点对点(因为sd bus最多可以支持10个从设备,所以如果要实现点对点,那么就必需使得唯一标识------地址)。
在数据传输模式均为这种传输方式。
两种工作模式
1 卡识别模式
实际上卡的识别模式可以看成是卡的初始化过程,主要流程见上图,上电后发一个CMD0,然后,发ACMD41<A开头的命令被解释为Application Command,在发任何一条ACMD之前,必须先发一条CMD55,ACMD41是为了使主机侧和卡的操作电压范围相匹配,发这个命令之后,卡会把它的OCR中的内容在Response中回过来。OCR如下:
例如:2.7v~3.6v 就设置成0xFF800。
如果不匹配那么卡会进入inactive state,进了这个状态之后怎么都无法操作了,CMD0也将不起作用。
为防止卡无响应,最好多发几次。如果一切正常,主要是电压范围匹配,那么就可以进入ready state了。
随后发送CMD2,得到卡的唯一标识符,如果卡回了response,那么就进入了identification state,这个时候发送CMD3,卡就会把它的唯一地址,发给主机了,这样就进入了数据传输模式,且每张卡都将和主机是点对点的传输方式。
2 数据传输模式
CMD4 SET_DSR可不作考虑,因为是可选的。
首先,我们需要将要操作的卡选中,CMD7它的命令参数是RCA,那么将把卡从standby状态带到transfer 状态,要实现读、写、擦除等操作都需要先把卡带到transfer状态,CMD7的参数如果是0那么将会把所有的卡都带进standby state。
然后让他们把他们的相关参数传过来CMD9<参数RCA>要求卡把CSD寄存器的内容传过来,而CMD10<参数RCA>是让卡传CID寄存器的内容,好像和前面的CMD2一样的,这个是不同的,CMD2是广播,他没有命令参数,所有的卡都会把他的CID发给主机。
CMD13<参数RCA>用于得到卡的CSD的相关设置值。
ACMD6是比较重要的,它用于实现设置数据总线的宽度(1 or 4 bit width)。
读操作 CMD17 CMD18 CMD30 CMD56 ACMD51
写操作 CMD24 CMD25 CMD26 CMD27 CMD42 CMD56
读/写 停止操作 CMD12
Command 数据结构
Response 数据结构
每个command和response以及卡的寄存器的细节就要参考SD卡协议的第一部分了。 |
|