SD卡协议学习点滴(二)

数据传输模式

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值