SD NAND(或任何符合SD标准的存储设备)的CMD13(SEND_STATUS)是一个重要的命令,用于获取卡当前的状态信息。正确使用它有助于诊断和确保操作的可靠性。下面我会为你梳理使用CMD13时需要注意的要点。
CMD13(SEND_STATUS)命令主要用于读取SD NAND卡内部的状态寄存器(Card_Status)。这个32位的寄存器包含了卡当前的工作状态、错误标志以及各种操作结果的信息,通过解析这些状态位,你可以判断前一个命令是否执行成功,以及卡是否准备好接收下一个命令。
使用CMD13时,有几个关键的方面需要特别注意,以确保能准确获取状态信息并避免意外行为。
命令发送时机与频率:
。强烈建议主机在这些事务期间不要发出任何命令,包括CMD13。如果主机无法获取有效数据,尝试发出CMD0进行重新初始化是一个恢复手段。
写操作后的状态查询:当进行写操作(如CMD24, CMD25)后,如果数据响应令牌指示写入错误(例如,响应 '110' 表示因写入错误而拒绝数据),主机可以发送CMD13来获取更详细的错误原因。
状态位的解析与清除条件:
理解状态位的含义:状态寄存器中的每一个比特位都有特定含义,例如:
注意状态位的清除条件:在SPI模式下,某些状态位仅仅通过读取(即发送CMD13)就会被清除(cleared by read, 简称C),而另一些状态位则会根据卡的当前状态自动清除(cleared by actual state, 简称A)。这意味着如果你需要查询同一个错误状态多次,第一次CMD13的读取可能会清除该标志,导致后续读取无法再看到这个错误位。务必参考具体芯片的数据手册了解各状态位的具体清除条件。
SPI模式与SD模式的差异:
在SD总线模式下,CMD是通过专用的CMD线传输,响应也同样通过该线返回。
在SPI模式下,CMD和响应都通过MOSI和MISO线传输,且命令和数据的格式与SD模式有所不同(例如,SPI模式下的命令令牌格式)
。虽然核心功能相同,但底层通信协议有区别,在编写底层驱动时需要注意。
需要注意的是,在SPI模式下,状态比特以三种不同的格式报告给主机:响应R1、响应R2和数据错误令牌。相同的比特可能存在于多种响应类型中。
其他通用注意事项:
确保卡已选中:对于寻址命令(点对点命令),在发送CMD13之前,通常需要通过CMD7(SELECT/DESELECT_CARD) 来选中目标卡,使其进入传输状态(Transfer State),除非是广播命令
。如果卡未被选中,可能无法正确响应。
CRC与响应格式:CMD13的响应格式通常是R1(1字节)或R2(2字节,其中包含R1响应及额外的错误字节),具体取决于模式和上下文。在SPI模式下,有时可能会忽略CRC校验(通过CMD59控制),但仍需注意响应数据的完整性。
下表列出了一些常见的状态位及其简要解释,可用于诊断:
请注意:上表仅为常见状态位的示例。务必以你所使用的具体SD NAND芯片的数据手册为准,因为不同厂商和产品的状态位定义及清除条件可能存在差异。
使用CMD13时,请牢记以下几点:
适时查询:主要在命令执行后、怀疑有错误发生或需要确认卡状态时使用CMD13,避免在数据事务过程中随意发送。
仔细解析:认真解析返回的32位状态值,参考芯片手册理解每一位的含义和清除方式,避免误判。
模式差异:注意你使用的是SD模式还是SPI模式,这会影响命令的发送和接收方式以及部分状态行为。
结合其他命令:CMD13常与其他命令配合使用,例如在ACMD41初始化流程后查询,或在写操作出错时进行诊断。
上一篇:sd nand tf
下一篇:没有了!