控制令牌
数据块传输由一些令牌控制。
数据响应令牌
每个写入卡的数据块都会被一个数据响应令牌确认。
它是一个字节长,格式如下:
状态位的含义定义如下:
'010'-接受的数据。
'101'-由于CRC错误而拒绝数据。
'110' -由于写入错误而拒绝数据
如果在写多块操作过程中出现任何错误(CRC或写错误),主机将停止使用CMD12传输数据。
如果出现写错误(响应'110'),主机可能会发送CMD13 (send STATUS) 来获取写入问题的原因。
ACMD22可用于查找编写良好的写块的数量。
开始块令牌和停止传输令牌
读和写命令都有与之相关的数据传输。
数据通过数据令牌传输或接收。
所有的数据字节都首先以MSB传输。
数据令牌长度为4 ~ 515字节,格式如下:
For Single Block Read, Single Block Write and Multiple Block Read:
第一个字节:Start Block
2 ~ 513字节(取决于数据块长度):用户数据
最后两个字节:16位CRC。
对于多块写操作:
每个块的第一个字节。如果要传输数据,那么-启动块令牌
如果请求停止传输-停止传输令牌
注意,这种格式只用于多块写。
在多块读取的情况下,使用STOP_TRAN命令(CMD12)执行停止传输。
数据错误令牌
如果读操作失败,卡不能提供所需的数据,它会发送一个数据错误令牌。
这个令牌有一个字节长,格式如下:
清除状态bits
如前所述,在SPI模式下,状态比特以三种不同的格式报告给主机:响应R1、响应R2和数据错误令牌(相同的比特可能存在于多种响应类型中,例如Card ECC failed)。
在SD模式下,错误bits在被主机读取时被清除,而不管响应格式如何。
状态指示灯可以通过读取清除,也可以根据卡的状态清除。
下表总结了各种状态位的设置和清除条件:
1) 类型:
E:错误位。
S:状态位。
R:检测并设置为实际命令响应。
X:在执行命令时检测并设置。
主机可以通过发出带有R1响应的命令来获取状态。
2) 清零条件:
A:根据卡当前状态清零。c:按读清零
卡寄存器
在SPI模式下,只有RCA寄存器不可访问。其他寄存器的格式与SD模式下的格式相同。