eMMC_命令整理

eMMC 命令整理


1. 命令分类概览

eMMC 命令按功能划分为多个命令类(Command Class),主机通过读取设备 CSD 寄存器中的 CCC 字段可获知设备支持的命令类。

命令类 描述 包含命令
class 0 基本命令(Mandatory) CMD0, CMD1, CMD2, CMD3, CMD4, CMD5, CMD6, CMD7, CMD8, CMD9, CMD10, CMD12, CMD13, CMD14, CMD15, CMD19, CMD23, CMD24
class 1 Obsolete -
class 2 块读取(block read) CMD16, CMD17, CMD18, CMD21
class 3 Obsolete -
class 4 块写入(block write) CMD25, CMD26, CMD27, CMD49
class 5 擦除(Erase) CMD35, CMD36, CMD38
class 6 写保护(write protection) CMD28, CMD29, CMD30, CMD31
class 7 设备锁定(lock Device) CMD42
class 8 应用特定命令(Application-specific) CMD55, CMD56
class 9 I/O 模式(I/O mode) CMD39, CMD40
class 10 安全协议(Security Protocols) CMD53, CMD54
class 11 命令队列(Command Queuing) CMD44, CMD45, CMD46, CMD47, CMD48
class 12 Reserved -

说明

  • Class 0 为所有设备必须支持。
  • Class 2 中 CMD21 仅在支持 HS200 模式的设备中为强制。
  • 其他命令类根据设备类型为强制或可选。

2. 基本命令(Class 0 与 Class 1)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD0 bc [31:0] 00000000 --- GO_IDLE_STATE 将设备复位到 idle 状态 上电初始化、软件复位、退出 Boot 模式
bc [31:0] F0F0F0F0 --- GO_PRE_IDLE_STATE 将设备复位到 pre-idle 状态 准备进入 Boot 操作前的状态切换
--- [31:0] FFFFFFFA --- BOOT_INITIATION 启动替代 Boot 操作 触发设备进入 Boot 模式
CMD1 bcr [31:0] OCR(无 busy 位) R3 SEND_OP_COND 请求处于 idle 状态的设备通过 CMD 线返回其操作条件寄存器(OCR)内容 设备上电初始化、电压协商、容量模式确认
CMD2 bcr [31:0] stuff bits R2 ALL_SEND_CID 请求设备通过 CMD 线发送其 CID 编号 设备识别阶段,获取设备唯一标识
CMD3 ac [31:16] RCA [15:0] stuff bits R1 SET_RELATIVE_ADDR 为设备分配相对地址(RCA) 设备枚举阶段,分配后续通信地址
CMD4 bc [31:16] DSR [15:0] stuff bits --- SET_DSR 编程设备的驱动级寄存器(DSR) 优化总线性能,调整驱动强度
CMD5 ac [31:16] RCA [15] Sleep/Awake [14:0] stuff bits R1b SLEEP_AWAKE 切换设备在 Sleep 状态与 Standby 状态之间 低功耗管理,进入/退出休眠
CMD6 ac [31:26] 0 [25:24] Access [23:16] Index [15:8] Value [7:3] 0 [2:0] Cmd Set R1b SWITCH 切换选中设备的工作模式或修改 EXT_CSD 寄存器 切换总线速度模式(如 HS200/HS400)、切换分区、启用缓存、设置写保护等
CMD7 ac [31:16] RCA [15:0] stuff bits R1/R1b SELECT/DESELECT_CARD 在 standby 与 transfer 状态之间,或 programming 与 disconnect 状态之间切换设备 选中设备进行数据传输,或取消选择(RCA=0)
CMD8 adtc [31:0] stuff bits R1 SEND_EXT_CSD 设备将 EXT_CSD 寄存器作为数据块发送 读取扩展配置寄存器,获取设备能力、分区信息、当前配置等
CMD9 ac [31:16] RCA [15:0] stuff bits R2 SEND_CSD 被寻址设备通过 CMD 线发送其设备特定数据(CSD) 获取设备容量、块长度、传输速率等参数
CMD10 ac [31:16] RCA [15:0] stuff bits R2 SEND_CID 被寻址设备通过 CMD 线发送其设备标识(CID) 获取设备制造商、产品名称、序列号等
CMD11 --- --- --- --- Obsolete,响应未定义 不再使用
CMD12 ac [31:16] RCA [15:1] stuff bits [0] HPI R1/R1b STOP_TRANSMISSION 强制设备停止传输。若 HPI 位置位,设备应在明确定义的时序内中断内部操作 停止多块读写、中断设备操作、高优先级中断(HPI)
CMD13 ac [31:16] RCA [15] SQS [14:1] stuff bits [0] HPI R1 SEND_STATUS SQS=0:设备发送状态寄存器;SQS=1:查询 QSR(队列状态寄存器),此时 HPI 必须为 0 轮询设备状态、检查错误、查询命令队列状态
CMD14 adtc [31:0] stuff bits R1 BUSTEST_R 主机从设备读取反转后的总线测试数据模式 总线宽度测试(配合 CMD19),检测 1/4/8 位数据总线连接
CMD15 ac [31:16] RCA [15:0] stuff bits --- GO_INACTIVE_STATE 将设备设置为 inactive 状态 停用设备,使其不再响应总线命令
CMD19 adtc [31:0] stuff bits R1 BUSTEST_W 主机向设备发送总线测试数据模式 总线宽度测试(配合 CMD14),验证数据总线连通性

  1. CMD7:从 Stand-By 到 Transfer 状态响应 R1;从 Disconnected 到 Programming 状态响应 R1b。
  2. CMD12 中的 RCA 仅在 HPI 位置位时使用,设备端不进行 RCA 检查。
  3. CMD12:读操作响应 R1,写操作响应 R1b。

3. 块读取命令(Class 2)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD16 ac [31:0] block length R1 SET_BLOCKLEN 设置后续所有块命令(读和写)的块长度(字节)。默认块长度在 CSD 中指定 配置单次读写块大小,仅适用于单倍数据速率模式
CMD17 adtc [31:0] data address R1 READ_SINGLE_BLOCK 读取由 SET_BLOCKLEN 选定大小的一个块 读取单个数据块
CMD18 adtc [31:0] data address R1 READ_MULTIPLE_BLOCK 连续从设备向主机传输数据块,直到被停止命令中断或传输完请求的块数。作为打包读命令的一部分时,参数应包含包内第一个读取数据地址 连续读取多个数据块、打包读取(Packed Read)
CMD21 adtc [31:0] stuff bits R1 SEND_TUNING_BLOCK 发送 128 个时钟的调谐模式(4 位模式 64 字节,8 位模式 128 字节),用于 HS200 最佳采样点检测 HS200 模式下的采样点调谐(Tuning)

  1. 容量 ≤2GB 的设备使用 32 位字节地址;容量 >2GB 的设备使用 32 位扇区(512B)地址。
  2. 传输数据不得跨越物理块边界,除非 CSD 中设置了 READ_BLK_MISALIGN。

4. Class 3 命令

CMD 说明
CMD20 Obsolete,响应未定义
CMD22 Reserved

5. 块写入命令(Class 4)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD23 ac [31] Reliable Write Request [30] packed [29] tag request [28:25] context ID [24] forced programming [23:16] 0 [15:0] number of blocks R1 SET_BLOCK_COUNT 定义后续块读/写命令的块数及可靠写参数。可包含标签请求或上下文 ID(二者不能同时使用) 预定义多块读写数量、可靠写(Reliable Write)、强制编程(Forced Programming)、上下文管理
ac [31] 0 [30] 1 packed [29:16] 0 [15:0] number of blocks R1 SET_BLOCK_COUNT(packed) 定义后续打包写命令或打包读命令头的块数 打包命令(Packed Command)传输
CMD24 adtc [31:0] data address R1 WRITE_BLOCK 写入由 SET_BLOCKLEN 选定大小的一个块 写入单个数据块
CMD25 adtc [31:0] data address R1 WRITE_MULTIPLE_BLOCK 连续写入数据块,直到 STOP_TRANSMISSION 或接收完请求的块数。作为打包命令时,参数应包含包内第一个读/写数据地址 连续写入多个数据块、打包写入(Packed Write)、RPMB 密钥编程
CMD26 adtc [31:0] stuff bits R1 PROGRAM_CID 编程设备标识寄存器。此命令只能发出一次,设备硬件会阻止首次编程后的再次操作。通常保留给制造商 设备生产时一次性编程 CID
CMD27 adtc [31:0] stuff bits R1 PROGRAM_CSD 编程 CSD 的可编程位 修改设备配置参数
CMD49 adtc [31:0] stuff bits R1 SET_TIME 根据 512B 数据块中的 RTC 信息设置实时时钟 设置设备实时时钟

  1. 容量 ≤2GB 使用字节地址;>2GB 使用扇区地址。
  2. 传输数据不得跨越物理块边界,除非 CSD 中设置了 WRITE_BLK_MISALIGN。

6. 擦除命令(Class 5)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD32 ~ CMD34 --- --- --- --- Reserved,保持向后兼容 不可用
CMD35 ac [31:0] data address R1 ERASE_GROUP_START 设置待擦除范围内第一个擦除组的地址 擦除/修剪/丢弃操作的起始地址设定
CMD36 ac [31:0] data address R1 ERASE_GROUP_END 设置连续范围内最后一个擦除组的地址 擦除/修剪/丢弃 操作的结束地址设定
CMD37 --- --- --- --- Reserved,保持向后兼容 不可用
CMD38 ac [31] Secure request [30:16] 0 [15] Force Garbage Collect request [14:2] 0 [1] Discard Enable [0] Identify Write Blocks for Erase (or TRIM Enable) R1b ERASE 擦除所有先前选定的写块。所有参数位为 0 时执行擦除;Bit0=1,Bit1=0 执行 TRIM;Bit0=1,Bit1=1 执行 DISCARD;Bit31 和 Bit15 为可选安全/垃圾回收功能 数据擦除、TRIM(标记无效块)、DISCARD(丢弃块)、安全擦除、强制垃圾回收

擦除序列:CMD35 → CMD36 → CMD38,主机可在 CMD38 前多次重复 CMD35/CMD36 以选择多个不连续范围。


7. 写保护命令(Class 6)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD28 ac [31:0] data address R1b SET_WRITE_PROT CLASS_6_CTRL=0x00:设置寻址组的写保护位;CLASS_6_CTRL=0x01:释放指定的寻址组 设置写保护、动态容量管理(释放 WP-Group)
CMD29 ac [31:0] data address R1b CLR_WRITE_PROT CLASS_6_CTRL=0x00:清除寻址组的写保护位;CLASS_6_CTRL=0x01:忽略 清除写保护
CMD30 adtc [31:0] write protect data address R1 SEND_WRITE_PROT CLASS_6_CTRL=0x00:请求设备发送写保护位状态;CLASS_6_CTRL=0x01:请求设备发送已释放组状态 查询写保护状态、查询已释放组状态
CMD31 adtc [31:0] write protect data address R1 SEND_WRITE_PROT_TYPE CLASS_6_CTRL=0x00:发送不同写保护组的保护类型;CLASS_6_CTRL=0x01:返回固定的 64 位零模式 查询写保护类型(临时/上电/永久)

写保护类型编码

  • 00:未保护
  • 01:临时写保护
  • 10:上电写保护
  • 11:永久写保护

8. I/O 模式命令(Class 9)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD39 ac [31:16] RCA [15] register write flag [14:8] register address [7:0] register data R4 FAST_IO 读写 8 位(寄存器)数据字段。寻址设备和寄存器,写标志置位时提供写数据;写标志为 0 时 R4 响应包含从寻址寄存器读取的数据。访问 eMMC 标准未定义的应用相关寄存器 访问厂商特定应用寄存器
CMD40 bcr [31:0] stuff bits R5 GO_IRQ_STATE 将系统设置为中断模式 使设备进入中断驱动模式

9. 设备锁定命令(Class 7)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD42 adtc [31:0] stuff bits R1 LOCK_UNLOCK 设置/重置密码或锁定/解锁设备。数据块大小由 SET_BLOCK_LEN 命令设置 设备密码锁定/解锁、数据安全保护

10. 应用特定命令(Class 8)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD55 ac [31:16] RCA [15:0] stuff bits R1 APP_CMD 告知设备下一个命令是应用特定命令而非标准命令 发送厂商特定命令前的声明
CMD56 adtc [31:1] stuff bits [0] RD/WR R1 GEN_CMD 向设备传输数据块或从设备获取数据块,用于通用/应用特定命令。数据块大小由 SET_BLOCK_LEN 命令设置 厂商自定义数据交互

11. 安全协议命令(Class 10)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD50 ~ CMD52 --- --- --- --- Reserved 不可用
CMD53 adtc [16:31] Security Protocol Specific [15:8] Security Protocol [7:0] reserved R1 PROTOCOL_RD 从设备向主机连续传输数据块。数据块数由先前的 CMD23 定义,可被 STOP_TRANSMISSION 中断。不支持打包命令。块大小固定为 512 字节 安全协议数据读取
CMD54 adtc [16:31] Security Protocol Specific [15:8] Security Protocol [7:0] reserved R1 PROTOCOL_WR 从主机向设备连续传输数据块。数据块数由先前的 CMD23 定义,可被 STOP_TRANSMISSION 中断。不支持打包命令。块大小固定为 512 字节 安全协议数据写入

12. 命令队列命令(Class 11)

CMD 类型 参数 响应 缩写 命令描述 典型使用场景
CMD44 ac [31] Reliable Write Request [30] DD(1=读/0=写) [29] Tag request [28:25] Context ID [24] Forced Programming [23] Priority(0=simple/1=high) [22:21] reserved [20:16] Task ID [15:0] Number of Blocks R1 QUEUED_TASK_PARAMS 定义排队任务的数据方向、优先级、任务 ID 和块数 命令队列任务参数配置
CMD45 ac [31:0] Start block address R1 QUEUED_TASK_ADDRESS 定义排队任务的块地址 命令队列任务地址配置
CMD46 adtc [31:21] reserved [20:16] Task ID [15:0] reserved R1 EXECUTE_READ_TASK 执行队列中由参数编码的任务 ID 对应的读任务 触发命令队列中的读任务执行
CMD47 adtc [31:21] reserved [20:16] Task ID [15:0] reserved R1 EXECUTE_WRITE_TASK 执行队列中由参数编码的任务 ID 对应的写任务 触发命令队列中的写任务执行
CMD48 ac [31:21] reserved [20:16] TaskID(TM op-code=2h 时) [15:4] reserved [3:0] TM op-code R1b CMDQ_TASK_MGMT 丢弃特定任务或整个队列(队列中所有任务) 命令队列任务管理/清除

典型命令队列序列

复制代码
CMD44 (QUEUED_TASK_PARAMS) → CMD45 (QUEUED_TASK_ADDRESS) → 任务入队
CMD13 (SQS=1) 查询 QSR → CMD46/CMD47 (EXECUTE_READ/WRITE_TASK) → 执行数据传输

13. 保留命令与厂商命令

CMD 范围 说明
CMD32 ~ CMD34 Reserved,保持向后兼容
CMD37 Reserved,保持向后兼容
CMD41 Reserved
CMD43 Reserved
CMD50 ~ CMD52 Reserved
CMD57 ~ CMD59 Reserved
CMD60 ~ CMD63 Reserved for manufacturer

14. 命令类型与响应类型说明

缩写 含义
bc broadcast command,无响应
bcr broadcast command with response,广播命令带响应
ac addressed command,寻址命令,无数据传输
adtc addressed data transfer command,寻址数据传输命令
R1 标准响应,包含设备状态
R1b 标准响应带 busy 信号
R2 长响应,包含 CID/CSD 寄存器内容
R3 OCR 寄存器响应
R4 FAST_IO 响应
R5 中断请求响应

15. 典型流程示例

相关推荐
恒锐丰-罗生2 小时前
率能半导体 SS6840 单通道 H 桥电机驱动芯片深度解析
驱动开发·嵌入式硬件·硬件工程
-今昭-2 小时前
MooseFS分布式文件系统
linux·服务器·网络
byte轻骑兵3 小时前
【BlueZ 】蓝牙 HCI 协议基础:与 BlueZ 源码的层面对应关系
linux·hci·电脑蓝牙·嵌入式蓝牙·buez
Brilliantwxx3 小时前
【Linux】 进程(1) 从冯诺依曼体系到进程核心概念
linux·运维·服务器
lengjingzju3 小时前
编译与调试完全指南—第12章 日志分析
linux
城管不管3 小时前
重生——第十次面试之开源中国一面挂
java·linux·开发语言·算法·面试·职场和发展·开源
蜀道山老天师3 小时前
Zabbix监控Apache与Nginx应用实践完整指南
linux·运维·nginx·apache·zabbix
暖核3 小时前
Linux实战入门:从零编写第一个Bash Shell脚本
linux·运维·bash
March.s4 小时前
深入理解 Linux 系统启动原理
linux·运维·服务器