4.5错误条件
4.5.1 CRC和非法命令
所有命令是受CRC位保护的。如果定址卡的CRC校验失败,则卡不会返回响应并且命令不会被执**不会改变其状态,状态寄存器中的COM_CRC_ERROR位被设置。
类似地,如果卡接收到非法命令,卡不会改变其状态,不会返回响应,并且状态寄存器中的ILLEGAL_COMMAND位将被设置。
有各种不同的非法命令:
• 命令属于类,但卡不支持(如只读卡中的写命令)。
• 命令在当前状态中不允许(如传输状态中的CMD2)。
• 命令未定义(如CMD5)。
4.5.2读、写和擦除超时条件
读、写和擦除操作的超时时间是正常访问时间的100倍。卡必须在这个时间内完成命令或者取消并返回错误信息。如果主机在指定的时间内没有得到任何响应,则它会假设卡将不再返回响应,并尝试恢复(例如复位卡,电源周期,拒绝卡等)。正常访问时间定义如下:
• 读
正常读访问的时间是由CSD参数TAAC和NSAC给定的两个时间之和定义的。这些参数定义了读命令的结束位和块数据的开始位之间的延时。这些参数是因卡而异的,应被主机用来计算流读
的吞吐量和最大频率。
• 写
CSD中的R2W_FACTOR是用来计算正常的块编程时间的,通过将正常读访问时间乘以这个系数获得。它适用于所有的写/擦除命令(如SET(CLEAR)_WRITE_PROTECT, PROGRAM_CSD(CID)和块写命令)
• 擦除
擦除命令的持续时间是等于要擦除的块数量乘以块写的时间。
4.6命令
4.6.1命令类型
共定义有4种命令来控制SD卡的:
• 广播命令,无响应(bc)
• 广播命令,有响应(bcr)
• 定址命令,无数据在DAT上传输(ac)
• 定址命令,有数据在DAT上传输(adtc)
所有命令和响应都是在SD卡的CMD线上传输。
4.6.2命令格式
所有命令都有个固定的长度——48位。
一个命令总是以起始位'0'开始,接着一个方向位(主机='1'),然后6位表示命令的序号,这个值是一个二进制码(从0到63)。有些命令需要一个参数(如一个地址),这个是32位的。
所有命令都是受CRC保护的。每个命令都是终止位'1'结束。
4.6.3命令类集
SD卡的命令集被分为各种类集。每一个类支持一组卡功能。
命令类集0, 2, 4, 5 和 8是强制性的,必须被所有SD卡支持。其他类集是可选的。
4.6.4详细命令描述
基本命令(class 0):
基于块的读命令(class 2):
① 数据传输不能跨越物理块边界除非CSD中的READ_BLK_MISALIGN被设置。
基于块的写命令(class 4):
① 数据传输不能跨越物理块边界除非CSD中的WRITE_BLK_MISALIGN被设置。
基于块的写保护命令(class 6):
擦除命令(class 5):
锁卡命令(class 7):
应用程序特定命令(class 8):
以下表格描述SD卡支持/保留的所有应用程序特殊命令。所有ACMD命令都必须紧跟在APP_CMD (CMD55)命令之后。
4.7响应
所有响应都是在CMD线上被发送。响应的编码长度取决于响应的类型。
所有响应开始于起始位(通常为‘0’),接着一位表示传输的方向(card = ‘0’),所有响应(除开响应类型R3)是受CRC保护的。每个响应的编码结束于停止位(通常为‘1’)。
共有4种类型的响应,格式定义如下:
R1响应 正常的响应命令
R2响应 (CID, CSD 寄存器)
R3响应 (OCR寄存器)
R6响应 (发布RCA地址响应)
4.8 SD卡状态
SD卡支持两种卡状态如下:
Card Status:兼容MMC卡协议
SD_Status: 扩展512位状态域,支持SD专用特性和未来应用特性。
4.8.1 Card Status
响应格式R1包含有一个称为Card Status的32位域。这个域是用来传输卡的状态信息的(卡状态是存放在本地状态寄存器中的)。
如果没有指定,状态通常是对应之前发生的命令的。
各种不同的状态定义如下表
类型和清除条件域缩写如下:
类型
E:错误位
S:起始位
R:实际命令的响应的测检和设置
X:命令执行时的检测和设置。主机必须通过状态命令查询卡来读这些位。
清除条件
A:根据卡当前状态
B:通常与之前的命令相关。接收到一个有效的命令将会清除它。
C:读时清除
4.8.2 SD Status
SD Status包含有SD专有特性的状态位,并可以在将来的应用中使用。SD Status的大小是一个数据块512bit的大小。这个寄存器的内容是在DAT线上被发送到主机的,并附有16位CRC校验。
ACMD13只可以在传输状态(卡被选中)中被发送到卡。SD Status的结构定义如下:
|