关闭

SD卡协议学习点滴(二)

标签: cmd编程flash
1642人阅读 评论(0) 收藏 举报
分类:

数据传输模式

在SD卡识别模式结束之前,控制器使用的时钟频率均为Fod。在数据传输模式,控制器可能会使用Fpp频率。控制器发送一条SSEND_CSD(CMD9)命令来获取SD卡CSD寄存器(Card Specific Data)里面的描述值,譬如,块长度,卡容量信息等。广播命令SET_DSR(CMD4)为各个已识别的SD卡配置驱动阶段(??)。它会向SD卡的DSR寄存器写入相关的信息。控制器的时钟频率也在这个时刻从Fod转到Fpp。SET_DSR命令是可选的。

CMD7命令用来选择某个SD卡,使其进入Transfer状态,在指定时间段内,只有一个卡能处于Transfer状态。当某个先前被选中的处于Transfer状态的SD卡接收到CMD7之后,会释放与控制器的连接,并进入Stand-by状态。当CMD7使用保留地址0x0000时,所有的SD卡都会进入Stand-by状态。

数据传输模式下各个状态的转换关系总结如下:

所有的数据读命令都可以被停止命令(CMD12)在任意时刻终止。数据传输会终止,SD卡返回Transfer状态。读命令有:块读操作(CMD17)、多块读操作(CMD18)、发送写保护(CMD30)、发送scr(ACMD51)以及读模式下的普通命令(CMD56)

所有的数据写命令都可以被停止命令(CMD12)在任意时刻终止。写命令也会在取消选择命令(CMD7)之前停止。写命令有:块写操作(CMD24,CMD25)、编程命令(CMD27)、锁定/解锁命令(CMD42)以及写模式下的普通命令(CMD56)

数据传输一旦完成,SD卡会退出数据写状态,进入Programming状态(传输成功)或者Transfer状态(传输失败)

如果块写操作被叫停,但是写操作包含的最终块其长度和CRC校验是正确的话,数据会被编程到SD卡(从缓存写入到Flash?

SD卡可能会提供缓存模式,意思是前次写入块在编程到Flash的时刻,控制器可以接着发送下一块的数据

当写缓存为满时刻,并且SD卡处于Programming状态,DAT0会保持为低电平(BUSY),表明其为忙状态

写CSD,写保护,擦除这些操作没有缓存的功能,当SD卡正在处理这些命令的时候,其余的数据传输命令会被忽略。当SD卡为忙,并且处于Programming状态的时候,DAT0也会被SD卡拉低,

在SD卡处于Programming状态时候,不允许控制器发送设置参数命令。设置参数命令有:设置块长度(CMD16)、擦除块开始(CMD32)以及擦除块结束(CMD33)

在SD卡编程时刻,读命令也是不允许的

当把另一个卡从Stand-by状态转换为Transfer状态的时候,正处于erase和Programming状态的卡其操作不会终止,它会自动进入Disconnect状态,释放数据线。

处于Disconnect状态的卡可以通过发送CMD7命令使其脱离此状态,并进入Programming状态,并重新激活忙标识符

复位SD卡(使用CMD0或者CMD15)会终止任何等待中或正在进行的Programming操作。这可能会损毁SD卡的数据

CMD34-37 CMD50,CMD57保留


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:302575次
    • 积分:3729
    • 等级:
    • 排名:第8617名
    • 原创:22篇
    • 转载:306篇
    • 译文:0篇
    • 评论:13条
    最新评论