数据读取
注:数据线表示数据总线(1位或4位)。
单块读取
主机选择一张卡进行CMD7的数据读取操作,并设置CMD16面向块的数据传输的有效块长度。读操作的基本总线时序如下图所示。该序列从单个块读取命令(CMD17)开始,该命令在参数字段中指定起始地址。响应像往常一样在CMD行上发送。
卡的数据传输开始于从读命令结束位开始的访问延时Nac之后。在最后一个数据位之后,CRC校验位的后缀允许主机检查传输错误。
多块读取
在多块读取模式下,卡按照主机的初始读取命令发送连续的数据块流。数据流由停止传输命令(CMD12)终止。数据块的时序如下图1所示,停止命令的响应如下图2所示。在stop命令结束位之后,数据传输将停止两个时钟周期。
数据写入
单块写入主机选择一张卡进行CMD7的数据写操作。主机设置CMD16面向块的数据传输的有效块长度。写操作的基本总线时序如下图所示。该序列从单个块写命令(CMD24)开始,该命令(在参数字段中)确定起始地址。它像往常一样由CMD行上的卡响应。收到卡片响应后,从主机开始的数据传输开始NwR时钟周期。
数据的后缀是CRC校验位,允许卡检查传输错误。卡将CRC检查结果作为CRC状态令牌在DATo线路上发回。在传输错误的情况下,卡发送一个负CRC状态('101')。在无错误传输的情况下,卡发送一个正的CRC状态(010)并开始数据编程过程。当发生flash编程错误时,卡将忽略所有进一步的数据块。在这种情况下,不会向主机发送CRC响应,因此总线上不会有CRC起始位,并且三个CRC状态位将读取('111')。下一个命令的响应中显示CRC Status后出现错误。
注意,CRC响应输出总是在数据结束后的两个时钟。如果卡没有空闲的数据接收缓冲区,卡通过将数据线拉到LOW来指示这种情况。只要至少有一个用于定义的数据传输块长度的接收缓冲区变为空闲,卡就停止拉下DAT0线。该信令不提供任何关于主机应该轮询的数据写状态的信息。
多块写入
在多块写模式下,卡期望数据块按照主机的初始写命令连续流。
在单块写入的情况下,数据的后缀是CRC校验位,以允许卡检查传输错误。卡将CRC检查结果作为CRC状态令牌在DAT0线路上发回。在传输错误的情况下,卡发送一个负CRC状态('101')。在非错误传输的情况下,卡发送一个正CRC状态('010')并开始数据编程过程,当flash编程发生错误时,卡将忽略所有进一步的数据块,在这种情况下,不会向主机发送CRC响应,因此总线上不会有CRC起始位,三个CRC状态位读为('111');
数据流由停止传输命令(CMD12)终止。带卡忙信号和不带卡忙信号的数据块时序如下图所示。
停止传输命令的工作原理与读取模式类似。下方图1-4描述了不同卡状态下stop命令的执行时间。
只有当块的CRC数据被验证并且CRC状态令牌发送回主机时,卡才会将数据块视为成功接收并准备好编程。下方图2是一个试图传输CRC状态块被中断(被主机停止命令)的例子。该序列与所有其他停止传输示例相同。在数据线上,主机命令的结束位后面跟着一个数据位,然后开始忙信令。在这种情况下,没有用于切换总线方向的Z时钟,因为总线方向已经指向主机。在这种情况下,接收到的数据块被认为是不完整的,不会被编程。
前面的所有示例都处理了主机在非活动数据传输期间停止数据传输的场景。下面两个图描述了接收数据块之间的停止传输的场景。在第一个示例中,卡忙于对最后一个块进行编程,而在第二个示例中,卡是空闲的。然而,在输入缓冲区中仍然有未编程的数据块。一旦收到停止传输命令并且卡激活忙音信号,这些块就被编程。
R1b 时序在R1b命令操作期间,卡可能发出“busy”(通过将数据线拉低)的信号。busl事务定时如上图所示(非Nse指定)。在非UHS-I模式下,R1b忙线在命令结束位后2个时钟启动。在UHS-Il模式下,从命令结束位开始2到4个时钟后启动R1b忙。
重新选择忙卡当当前处于断开状态的忙卡被重新选中时,它将在数据线上恢复其忙信令。重选卡的总线时序如上图所示(非Nse指定)。l在非UHS-I模式下,所选卡从CMD7结束位开始指示忙2个时钟。在UHS-I模式下,从CMD7的结束位开始,所选卡开始指示忙2到4时钟。
以上内容由杭州瀚海微科技整理
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。