logo资料库

SD卡中文数据手册(SD卡资料).pdf

第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
资料共28页,剩余部分请下载后查看
SD 卡中文数据手册 一概述 1. SD 总线模式下 CLK:时钟信号 CMD:双向命令和响应信号 DAT0-3:双向数据信号 VDD,VSS:电源和地信号 SD 模式下允许有一个主机, 多个从机(即多个卡), 主机可以给从机分别地址. 主机发 命令有些命令是发送给指定的从机,有些命令可以以广播形式发送. SD 模式下可以选择总线宽度, 即选用几根 DAT 信号线, 可以在主机初始化后设置. 2. SD 总线协议 SD 模式下的命令和数据流都有一个开始位和结束位. >命令: 是在 CMD 上传输的用于启动一个操作的比特流 . 由主机发往从机, 可以是点对点也 可以是广播的. >响应: 是在 CMD 上传输的用于之前命令回答的比特流. 由从机发往主机. >数据: 是在 DAT 上传输的比特流, 双向传输. 无响应模式 无数据模式 多块读操作模式
多块写操作模式 命令格式 响应格式 数据格式 SD 卡上电后会自动初始化,通过给卡发送 CMD0 也可以复位卡. 二.SD 卡命令描述. 1.广播命令: 给所有卡都发送, 某些命令需要响应.
2.点对点命令 给指定地址的卡发送, 需要响应. SD 卡系统有两种工作模式: 1. 卡识别模式. 主机上电复位后即处于此模式,它会在总线上等待卡. 卡复位后也处于此模式, 直到 SEND_RCA(CMD3)命令到来. 2. 数据传输模式. 卡收到 SEND_RCA(CMD3)命令后即进入此模式. 主机识别到卡后也进入此模式. 卡状态和工作模式对照表 1. 卡识别模式. 此模式下主机复位总线所有的卡, 验证工作电压, 询问卡的地址. 这个模式下所有数据 的传输都是只通过 CMD 线来完成. 1) 卡的复位. 当卡上电或收到 GO_IDLE_STATE (CMD0)命令后, 卡即进入 Idle State 状态. 此时卡将 其 RCA 设为 0, 相关寄存器设为传输稳定的最优模式. 2) 工作电压验证 每个卡的最高和最低工作电压存储在 OCR. 只有当电压比配时, CID 和 CSD 的数据才能正 常传输给主机. SD_SEND_OP_COND (ACMD41)命令用来判断卡的工作电压是否符合, 如果不符合的话, 卡 应该放弃总线操作, 进入 Inactive State 状态. 在发送 SD_SEND_OP_COND (ACMD41)命令前 记 APP_CMD (CMD55). 得 要 首 先 发 送
ACMD41 命令响应中的 BUSY 位也用于卡表示其还没准备好, 主机此时应重发 ACMD41 命令, 卡的状态变换图. 直到卡准备好. 主机在这个阶段的 ACMD41 中不允许改变工作电压, 如果确实想改变的话, 应该先发送 CMD0, 然后再发送改变后的 ACMD41. GO_INACTIVE_STATE (CMD15)命令用于使指定地址的卡进入 Inactive State 模式. 3) 卡识别过程. ALL_SEND_CID (CMD2)命令用于获取卡的 CID 信息, 如果卡处于 Ready State, 它就会在 CMD 线上传送它的 CID 信息, 然后进入 Identification State 模式. 紧接着发送 CMD3 (SEND_RELATIVE_ADDR)命令, 用于设置卡新的地址. 卡收到新的地址后进入 Stand-by State 模式. 2. 数据传输模式.
数据传输模式下卡的状态转变图 进入数据传输模式后, 主机先不停的发送 SEND_CSD (CMD9)命令获取卡的 CSD 信息. SET_DSR (CMD4)用于设置卡的 DSR 寄存器, 包括数据总线宽度, 总线上卡的数目, 总线 频率, 当设置成功后, 卡的工作频率也随之改变. 此步操作是可选的. CMD7 命令用于使指定地址的卡进入传输模式, 任何指定时刻只能有一个卡处于传输模 式. 传输模式下所有的数据传输都是点对点的, 并且所有有地址的命令都需要有响应. .所有读命令都可以由 CMD12 命令停止,之后卡进入 Transfer State. 读命令包括单块读 (CMD17), 多块读(CMD18), 发送写保护(CMD30), 发送 scr(ACMD51)和读模式一般命令 (CMD56). .所有写命令都可以由 CMD12 命令停止. 写命令包括单块读(CMD24), 多块读(CMD25), 写 CID(CMD26), 写 CSD(CMD27),锁和解锁命令(CMD42)和写模式一般命令(CMD56). .当写命令传输完成后, 卡进入 Programming State(传输成功)或 Transfer State(传输 失败) .如果一个卡写操作被停止,但其前面数据的 CRC 和块长度正确, 数据还是会被写入. .卡要提供写缓冲, 如果写缓冲已满并且卡处于 Programming State, DAT0 保持低 BUSY. .写 CID,CSD, 写保护, 擦除命令没有缓冲, 当这些命令没完时, 不应发送其他的数据 传输命令. .参数设置命令在卡被编程时是不允许发送的, 这些命令包括设置块长度(CMD16), 擦除 块起始(CMD32)和擦除块结束(CMD33). .当卡正编程时读命令是禁止的. .用 CMD7 使另一个卡进入 Transfer State 不会终止当前卡的编程和擦除, 当前卡会进入 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 填充入缓冲区, 再启动时钟, 这样卡并不会检测要两 次发送之间的间隔, 认为其是一次完整的数据发送过程. 四 CRC 校验
1.CRC7 CRC7 用于所有的命令, 除 R3 以外的响应, 以及 CID 和 CSD 寄存器. 2.CRC16 CRC16 用于数据块的校验 五. 错误类型. 1. CRC 错误和命令非法错误 命令的 CRC 校验出错, 卡设置其状态寄存器的 COM_CRC_ERROR 位. 非法命令错误, 卡设置其状态寄存器的 ILLEGAL_COMMAND 位.非法命令包括:不支持的命 令,未定义的命令以及当前状态不支持的命令. 2. 读,写和擦除超时. 卡应该在指定的时间内完成一个命令或返回移动的错误信息. 如果在指定的超时时间内 主机收不到响应, 应认为卡停止工作, 应重新复位卡. 六 命令 1. 命令类型: - bc 不需要响应的广播命令. - bcr 需要响应的广播命令. 每个卡都会独立的接收命令和发送响应. - ac 点对点命令, DAT 线上没数据 - adtc 点对点命令, DAT 线上有数据 所有命令均遵守上图中的格式, 总共 48 位. 首先是 1 个起始位 0, 接着是 1 个方向位(主机 发送位 1), 6 个命令位( 0-63 ), 32 位参数(有些命令需要), CRC7 位校验, 1 个停止位. 2.卡命令根据不同的类型分成了不同的 Class, 见下表,其中 Class0,2,4,5,8 是每个卡都必 须支持的命令, 不同的卡所支持的命令保存在 CSD 中.
分享到:
收藏