eMMC命令简介

eMMC命令详细介绍网上有很多资料,具体协议可以查看 JESD84-B51的 6.10 Commands,本文仅为笔记用途。

命令类型

类型描述
bc没有 response的广播命令
bcr有 response的广播命令
ac点对点(指定地址)无数据传输
adtc点对点数据传输

命令格式

命令长度为 48 bits,结构如下图。软件主要配置 Transmission Bit(读/写),Command Index(命令序号),Argument(命令参数),其余由逻辑处理。

CMD_format

命令集

eMMC的命令集总共有 12种,每种 class代表一类功能,包含相关命令,每个命令只会属于一种 class。class 0是所有 devices必须支持的,其余的可以通过 CSD寄存器的 bit [95:84],CCC field来确定 device支持的命令集。

命令分类描述
class 0basic,基础命令,如 CMD0、CMD1、CMD2、CMD3、CMD6、CMD8、CMD12、CMD13
class 1Obsolete,废弃
class 2block read,读取单块、多块数据、设置块长度、发送 tuning数据块,如 CMD16、CMD17、CMD18、CMD21
class 3Obsolete,废弃
class 4block write,写取单块、多块数据、设置块长度,如 CMD23、CMD24、CMD25
class 5erase,擦除操作、设置擦除开始、结束地址,如 CMD35、CMD36、CMD38
class 6write protection,设置写保护、清除写保护、获取 device写保护状态、获取写保护类型,如 CMD 28、CMD29、CMD30、CMD31
class 7lock Device,device 上锁、解锁,如 CMD42
class 8Application-specific,表示下一个命令是一个特定应用命令,如 CMD55
class 9I/O mode,读写 device特定的寄存器(未在 eMMC标准中定义)、设置系统进入中断模式,如 CMD39、CMD40
class 10Security Protocols,连续数据块传输,如 CMD53、CMD54
class 11Command Queuing,命令队列,定义操作的读或写、优先级、任务ID等、定义任务队列的块地址、丢弃特定队列或者整个队列,如 CMD44、CMD45、CMD46、CMD47、CMD48

常用命令

CMD indextypeargumentrespabbr.description
class 0
CMD0bc[31:0] 0000 0000noneGO_IDLE_STATE重置 device进入 idle状态
CMD1bcr[31:0] OCR with-out busyR3SEND_OP_COND在idle状态下,device从 CMD线的发送其 OCR寄存器内容给 host
CMD2bcr[31:0] stuff bitsR2ALL_SEND_CIDdevice从 CMD线发送其 CID编号给 host
CMD3ac[31:16] RCA
[15:0] stuff bits
R1SET_RELATIVE_ADDR为 device分配相对地址
CMD6ac[31:26] Set to 0
[25:24] Access
[23:16] Index
[15:8] Value
[7:3] Set to 0
[2:0] Cmd Set
R1bSWITCH切换 device运行的命令集或者修改 EXT_CSD寄存器的值。
bit [25:24],Access,00,Command Set表示根据 Cmd Set的值改变运行的命令集;01,Set Bits表示根据 Value中为 1的 bit对 Index指向 byte相应位进行置位;10,Clear Bits表示根据 Value中为 1的 bit对 Index所指向 byte相应位进行清零;11,Write Byte表示将Value的值写入指向的 byte
bit [23:16],Index,EXT_CSD的索引值,有效值为 0到 191
bit [2:0],Cmd Set,要切换的命令集
具体请查看 6.6.1 Command sets and extended settings
CMD8adtc[31:0] stuff bitsR1SEND_EXT_CSDdevice 以数据块的形式发送其 EXT_CSD寄存器的内容给 host
CMD9ac[31:16] RCA
[15:0] stuff bits
R2SEND_CSDdevice从 CMD线发送其 CSD寄存器内容给 host
CMD12ac[31:16] RCA
[15:1] stuff bits
[0] HPI
R1/R1bSTOP_TRANSMISSION强制 device停止传输。如果置位了 HPI,device应在明确规定的时间内中断其内部操作。读操作返回 R1,写操作返回 R1b
CMD13ac[31:16] RCA
[15] SQS
[14:1] stuff bits
[0] HPI
R1SEND_STATUS如果 SQS bit=0:device发送其状态寄存器给 host。如果置位了 HPI,device应在明确规定的时间内中断其内部操作。
如果 SQS bit=1:表示这是一个 QSR查询。device应发送 QSR寄存器给 host。这种情况下,HPI必须为 0
class 2
CMD16ac[31:0] block lengthR1SET_BLOCKLEN设置块读写操作的块长度,默认值在 CSD寄存器 READ_BL_LEN bit [83:80] / WRITE_BL_LEN bit [25:22]指定
CMD17adtc[31:0] data addressR1READ_SINGLE_BLOCK读取单块数据
CMD18adtc[31:0] data addressR1READ_MULTIPLE_BLOCK连续读取多块数据,直到传输停止,或者读取数据块数达到请求的数据块数
CMD21adtc[31:0] stuff bitsR1SEND_TUNING_BLOCK在 tuning模式下,发送特定数据块(4 bit模式为 64 byte,8 bit模式为 128 byte)用于 HS200模式最佳采样点的检测
class 4
CMD23ac[31] Reliable Write Request
[30] ‘0’ non- packed ‘1’ packed
[29] tag request
[28:25] context ID
[24]: forced programming
[23:16] set to 0
[15:0] number of blocks
R1SET_BLOCK_COUNTbit [31] 可靠写请求,bit [30] ‘0’ non-packed / ‘1’ packed,bit [24] forced programming,设置为1,强迫数据直接写入存储介质,而不是写入 cache,bit [15:0] number of blocks,定义读写块数量
CMD24adtc[31:0] data addressR1WRITE_BLOCK写入单块数据
CMD25adtc[31:0] data addressR1WRITE_MULTIPLE_BLOCK连续写入多块数据,直到传输停止,或者写入数据块数达到设定的数据块数
class 11
CMD44ac[31] Reliable Write Request
[30] DD: “1” read / “0” write
[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
R1QUEUED_TASK_PARAMSbit [31] 可靠写请求,bit [30] 定义操作的方向,’1’ 读取 / ‘0’ 写入,bit [23] 优先级,bit [20:16] 任务 ID,bit [15:0] 任务队列的块计数
CMD45ac[31:0] Start block addressR1QUEUED_TASK_ADDRESS定义任务队列的起始块地址
CMD46adtc[31:21] reserved
[20:16] Task ID
[15:0] reserved
R1EXECUTE_READ_TASKdevice执行对应任务 ID的读操作
CMD47adtc[31:21] reserved
[20:16] Task ID
[15:0] reserved
R1EXECUTE_WRITE_TASKdevice执行对应任务 ID的写操作
CMD48ac[31:21] reserved
[20:16]: TaskID
[15:4]: reserved
[3:0] TM op-code (Table 5)
R1bCMDQ_TASK_MGMTdevice 丢弃特定任务或者整个队列
当 bit [3:0] TM op-code = 0x2时,bit [20:16]表示 task id,当 TM op-code = 0x1时,bit [20:16]为保留,无意义。

Responses

Response总共有 6种类型,分别是 R1,R1b,R2,R3,R4,R5。所有的 responses都是从 CMD线返回的,其长度和格式与类型相关,但都是以 0为起始位,1为结束位,传输方向位紧接着起始位,0表示 device到 host。除 R3类型外,所有的 responses都受到 CRC7保护。

R1

一般命令都是响应 R1,长度为 48 bit。bit [45:40] 描述响应的命令,bit [39:8] 描述 device的状态,详细状态可以查看 6.13 Device status。

R1

R1b

R1b与 R1格式上完全一样,只是会在数据线 DAT0 传输 busy信号,device接受到部分命令会变得忙碌,例如 CMD6,忙碌时 DAT0会被 device拉低,具体时序可以查看 6.15.1 Command and response,R1b responses。

R2

R2长度为 136 bit,用于响应 CMD2和 CMD10,返回 CID寄存器的值,以及响应 CMD9,返回 CSD寄存器的值。CID和 CSD的 bit [0]会被结束位替代,即实际传输 bit [127:1],不过它们两个的 bit [0]没有使用上,默认为 1。

R2

R3

R3长度为 48 bit,用于响应 CMD1,返回 device的 OCR寄存器值。

R3

R4

R4长度为 48 bit,用于响应 CMD39。bit [15],Status表示操作是否成功,成功为 1,bit [14:8],Register address表示 device的特定寄存器地址,bit [7:0],Read register contents表示读取到的内容。

R4

R5

R5长度为 48bit,用于响应 CMD40。host发送 CMD40让 device进入中断模式,device返回 R5则表明进入中断模式,后续 RCA将使用 0x0000。

R5

参考链接:

https://blog.csdn.net/yuesichiu/article/details/74012312

https://www.cnblogs.com/smartjourneys/p/6657397.html


eMMC命令简介
http://xxxdk.xyz/xxx/2020/11/eMMC命令简介/
作者
sni
发布于
2020年11月3日
许可协议