Disconnect State 并且释放 DAT 线.
. Disconnect State 模式的卡可通过 CMD7 重新被选中,此时卡进入 Programming State
并且使能 busy 信号.
. CMD0 或 CMD15 会终止卡的编程操作, 造成数据混乱, 此操作应禁止.
1) 总线宽度选择命令
ACMD6 命令用于选择总线宽度, 此命令只有在 Transfer State 有效. 应在 CMD7 命令后
使用.
2) 块读命令
块是数据传输的最小单位, 在 CSD (READ_BL_LEN)中定义, SD 卡为固定的 512B.
每个块传输的后面都跟着一个 CRC 校验. CMD17(READ_SINGLE_BLOCK)用于传输单个块,
传输完之后,卡进入 Transfer State. CMD18 (READ_MULTIPLE_BLOCK)用于多个块的传输,
直到收到一个 CMD12 命令.
3) 块写命令
与块读命令类似, 每个块传输的后面都跟着一个 CRC 校验.卡写数据时会进行 CRC 校验.
多块写比重复的单块写更能提高效率.
如果 CSD 中的 WRITE_BLK_MISALIGN 没设置, 并且发送的数据不是块对齐的, 卡会设置状
态寄存器中的 ADDRESS_ERROR 位,并且进入Receive-data-State 状态等待停止命令.此时
写操作也会停止, 并且卡会设置其的 WP_VIOLATION 位.
如果写缓冲满的话, 卡会停止接受 WRITE_BLOCK 命令. 此时主机应发送 SEND_STATUS
(CMD13)命令, 卡返回数据的 READY_FOR_DATA 位标志卡是否准备好接受新的数据.
在多块写操作中通过事先发送 ACMD23 命令可提高写速度. ACMD23 用于定义接下来要写
数据的块的数目. 每次多块写操作后, 这个值又被设为默认的 1.
ACMD22 会使卡返回写成功的块数目.
4) 擦除命令
擦除命令的顺序是: ERASE_WR_BLK_START(CMD32),ERASE_WR_BLK_END(CMD33)and ERASE
(CMD38).
如果(CMD38 或(CMD32, 33)接收到出错信息, 卡会设置状态寄存器中的ERASE_SEQ_ERROR
位并且重新等待新的命令时序.
如果接收到时序错误命令, 卡会设置其 ERASE_RESET 位并且重新等待新的命令时序.
5) 写保护管理
三种机制:
-.写保护物理开关
-.卡内部写保护
通过设置 CSD 中的 WP_GRP_ENABLE 位和 WP_GRP_SIZE 位, SET_WRITE_PROT 和
CLR_WRITE_PROT 命令用来设置和清除保护机制.
-. 密码保护.
三. 时钟控制
如果主机要发送 1K 的数据, 但是主机缓冲区只有 512B, 那么主机可以在发送完前 512B
后, 可以先停止时钟, 然后把后 512B 填充入缓冲区, 再启动时钟, 这样卡并不会检测要两
次发送之间的间隔, 认为其是一次完整的数据发送过程.