eMMC基本命令

本文详细介绍了eMMC设备的基本命令,包括CMD0、CMD1等,涉及设备初始化、电压协商、ID信息获取、块读写、擦除操作等。CMD0用于设备复位和进入特定模式,CMD1协商电压,CMD2和CMD3获取设备标识,CMD16设置块大小,CMD17和CMD18进行单块或多块读取,CMD24和CMD25执行写操作。同时,CMD35、CMD36和CMD38用于擦除操作。
摘要由CSDN通过智能技术生成

目录

1. Basic commands (class 0 and class 1)

CMD0

CMD1

CMD2

CMD3

CMD4

CMD5

CMD6

CMD7

CMD8

CMD9

CMD10

CMD12

CMD13

CMD14

CMD15

CMD19

2. Block-oriented read commands (class 2)

CMD16

CMD17

CMD18

CMD21

3. Block-oriented write commands (class 4)

CMD23 (default)

CMD23 (packed)

CMD24

CMD25

CMD26

CMD27

CMD49

4. Erase commands

CMD35

CMD36

CMD38

1. Basic commands (class 0 and class 1)

CMD0


      cmd0带参数0xF0F0F0F0,GO_PRE_IDLE_STATE是软件reset命令,使得设备进入pre_idle状态

  cmd0带参数0xFFFFFFFA,该命令使得device进入boot operation mode,device将主动发送数据到总线上,数据区域和大小由ECSD寄存器控制。

      cmd0带参数0x00000000, GO_IDLE_STATE,reset 设备,使得设备进入Idle状态。

      为了兼容,如果设备收到CMD0,并且参数不是0xFFFFFFFA或者0xF0F0F0F0,那么该命令会被看做reset命令。

CMD1



      CMD1 如果设备不支持boot mode,或者BOOT_PARTITION_ENABLE位被清除,power up后设备会立刻进入idle状态。在idle状态,除非收到CMD1,设备会忽略所有传输。对于EMMC4.2之前的版本,device在上电后会立刻进入idle状态。

 CMD1是一个特定的同步命令,用来协商操作电压范围以及查看设备是否仍处在power-up序列。CMD1的响应除了包含操作电压profile,还包含一个busy标记,用来指明设备是否仍然处在power-up序列,没有准备号identification

      设备应该在收到CMD1 1s内完成初始化,CMD1 带参数0x00FF8000或者0x00000800,表示host要使用的电压值。

      对于传统的MMC卡来说,host可以通过CMD1来来判断卡的电压是否匹配。host通过CMD1的参数来指定VDD的电压范围,如果MMC卡不回,则认为不支持,这个时候MMC卡需要进入Inactive State, host将不会在访问这张卡。
      如果MMC卡支持该VDD电压,则在response中返回其电压范围。
      需要注意的是如果CMD1的参数设置为0,则表示host在询问MMC卡的电压范围。询问之后host 需要重发CMD1 选择一个电压范围。
      note: 对于支持2.7-3.6V 和1.75-1.9V 两段电压范围的MMC卡, host 想要选择1.75-1.9V 电压,开始上电时也是建议先将VDD电压升到2.7-3.6V ,在发完CMD1之后,先关闭VDD,在开启1.75-1.9V的电压。

      对于EMMC卡来说是不支持 CMD1 去check 电压范围的。其实这比较好理解,EMMC是固定在PCB上的,一开始就知道电压参数了,没必要做这些选择。

 

CMD2

      CMD2 ALL_SEND_CID 用来从device获取CID,R2用来用来返回device’s CID。

CMD3

      CMD3 SET_RELATIVE_ADDR 用来给设置设备的relative device address(RCA),设备收到CMD3后,会立刻从identification mode进入Stand-by State,并且不会再响应任何identification。

EMMC 正常初始化流程:
(和SD不同,EMMC不需要切电压)
CMD0 -> CMD1 ->CMD2…

 

CMD4


      CMD4 用来设置device的DSR(device stage register)寄存器。

 

CMD5

      用来切换设备到Sleep state或者Standby state。设备在Sleep state的电源消耗是最小的,在这个状态下设备仅响应RESET命令(CMD0 参数为0x00000000或者0xF0F0F0F0)和SLEEP/AWAKE命令(CMD5),其他命令都会被忽略。

 

     Sleep command: CMD5 参数bit15为1; Awake command: CMD参数bit15为0

CMD6

 

      切换设备的操作模式或者修改EXT_CSD寄存器,SWITCH命令可以用来写EXT_CSD或者改变命令集。如果SWITCH命令用来改变命令集,那么Index和Value被忽略不会修改EXT_CSD; 如果SWITCH用来写EXT_CSD寄存器,Cmd Set被忽略。

CMD6参数

[31:26] Set to 0
[25:24] Access, 00 切换command set; 01 设置Value中指定的位; 10 清除Value中指定的位; 11 写入Value指定的值。
[23:16] Index, EXT_CSD的索引值,index值为0255,但是仅仅0191为有效索引值。
[15:8] Value,
[7:3] Set to 0
[2:0] Cmd Set ,要切换的command set

CMD7

 

      当设备处在Stand-by状态,CMD7把设备从Stand-by State切换到Transfer State;也可以把设备从Transfer State切换回Stand-by State.

      当设备处在Disconnect状态,CMD7把设备从Disconnect State切换到Programming State

      在以上两种情况下,使用当前的RCA会选择设备,任何其他RCA 地址都会取消选择。使用RCA 0x0000表示取消选择。

CMD8

      请求设备发送它的EXT_CSD寄存器,通过数据块的方式发送。

 

CMD9


 

      参数指定设备的RCA [31:16] RCA。请求设备发送它的Device-specific data(CSD)到CMD line上。

CMD10

      参数指定设备的RCA [31:16] RCA,请求设备发送它的Device identification(CID)到CMD line上。

 

CMD12

      所有的read commands: CMD17 CMD18 CMD21 CMD30,都可以在任意时刻被CMD12打断。设备会返回到Transfer State

 

      所有的write commands: CMD24 CMD25 CMD26 CMD27,都可以被CMD12中止,但是要求在发送CMD7之前发送。

CMD13

      请求设备发送它的状态寄存器,如果设置了HPI flag,那么设备会在一个定义良好的时间内中断。

 

CMD14

      主机从设备端读取测试模式数据。

 

CMD15


      设置设备状态为inactive。

 

CMD19

BUSTEST_W    adtc    [31:0] stuff bits    R1    A host sends the bus test data pattern to a Device
NOTE 1 - CMD7, R1 while selecting from Stand-By State to Transfer State; R1b while selecting from Disconnected State to Programming State.
NOTE 2 - CMD12, RCA in CMD12 is used only if HPI bit is set. The argument does not imply any RCA check on the device side.
NOTE 3 - CMD12, R1 for read cases and R1b for write cases.

 

2. Block-oriented read commands (class 2)
CMD16

       设置接下来所有block命令(读和写)的block尺寸。缺省的块长度在CSD中指定。

CMD17

      读取参数指定地址的数据块,块长度是CMD16设置的(或者使用缺省block size)。

 

CMD18

      连续从设备读取数据块到host,直到被stop命令中断,或者已经达到请求的数据块数量。

 

CMD21


      HS200模式专用,用来优化HOST采样点,HOST发送CMD21命令,device发送tuning模式数据块。Host会在不同采样点采集数据,找到最佳采样点。

 

NOTE 1 - CMD17 & CMD18, Data address for media =<2 32="" gb="" is="" a="" bit="" byte="" address="" and="" data="" for="" media=""> 2GB is a 32 bit sector (512 B) address.
NOTE 2 - CMD17, The transferred data must not cross a physical block boundary, unless READ_BLK_MISALIGN is set in the CSD register.

3. Block-oriented write commands (class 4)
CMD23 (default)


Abbr.    Type    Argument    Resp    Description
SET_BLOCK_COUNT    ac    [31] Reliable Write Request, [30] ‘0’ non- packed, [29] tag request,[28:25] context ID, [24]: forced programming, [23:16] set to 0, [15:0] number of blocks    R1    Defines the number of blocks (read/write) and the reliable writer parameter (write) for a block read or write command.
[30] ‘0’ non-packed ‘1’ packed

 

[24] forced programming, 设置为1,强迫数据直接写入存储介质,而不是仅写入cache

[15:0] number of blocks,

定义读写块数目。

CMD23 (packed)


Abbr.    Type    Argument    Resp    Description
SET_BLOCK_COUNT    ac    [31] set to 0, [30] ‘1’ packed, [29:16] set to 0, [15:0] number of blocks    R1    Defines the number of blocks (read/write) for the following packed write command or for the header of the following packed read command.
      协议个数据块到设备中,尺寸由之前的CMD16 SET_BLOCKLEN定义。

 

CMD24


Abbr.    Type    Argument    Resp    Description
WRITE_BLOCK    adtc    [31:0] data address    R1    Writes a block of the size selected by the
      协议个数据块到设备中,尺寸由之前的CMD16 SET_BLOCKLEN定义。

 

CMD25


Abbr.    Type    Argument    Resp    Description
WRITE_MULTIPLE_BLOCK    adtc    [31:0] data address    R1    Continuously writes blocks of data until a STOP_TRANSMISSION follows or the requested number of block received. If sent as a packed command (either packed write, or the header of packed read) the argument shall contain
      连续数据块,直到STOP_TRANSMISSION或者已经写完了请求的数据块。

 

CMD26


Abbr.    Type    Argument    Resp    Description
PROGRAM_CID    adtc    [31:0] stuff bits    R1    Programming of the Device identification register. This command shall be issued only once. The Device contains hardware to prevent this operation after the first programming. Normally this command is reserved for the manufacturer.
      写设备CID寄存器。这个命令只能烧写一次,正常情况下是制造商使用这个命令。 

CMD27


Abbr.    Type    Argument    Resp    Description
PROGRAM_CSD    adtc    [31:0] stuff bits    R1    Programming of the programmable bits of the CSD.
      更改CSD中的可编程位。

 

CMD49


Abbr.    Type    Argument    Resp    Description
SET_TIME    adtc    [31:0] stuff bits    R1    Sets the real time clock according to the RTC information in the 512 B data block.
     设置device的real time clock,device使用这个时钟做一些内部维护工作。

 

     这个命令类似CMD24 WRITE_BLOCK,会发送一个RTC information 数据块。

     面向块的写保护命令。

NOTE 1 - CMD24 & CMD25, Data address for media =<2 32="" gb="" is="" a="" bit="" byte="" address="" and="" data="" for="" media=""> 2GB is a 32 bit sector (512 B) address.
NOTE 2 - CMD24, The transferred data must not cross a physical block boundary, unless READ_BLK_MISALIGN is set in the CSD register.

4. Erase commands
CMD35
CMD35 ERASE_GROUP_START

参数[31:0] 对于=<2G的介质,表示32bits byte地址,对于>2GB介质,是32bits sector地址,会按照Erase group对齐。

该命令设置erase操作的首earse group地址。

CMD36
CMD36 ERASE_GROUP_END

参数[31:0]对于=<2G的介质,表示32bits byte地址,对于>2GB介质,是32bits sector地址,会按照Erase group对齐。
该命令设置erase操作的最后一个erase group地址。

CMD38
CMD38 ERASE

删除前面选择的所有earse block。

数据擦除

      eMMC 标准提供了几种主动擦除数据的方法,以满足不同的场景需求。

 

擦除方式    擦除单位    描述
Erase    Erase Group    按 Erase Group 擦除数据,完成后重新读取会返回全为 0 或者 1 的数据,但在物理存储介质上,可能还保留着原始数据
TRIM    Write Block    按 Write Block 擦除数据,完成后重新读取会返回全为 0 或者 1 的数据,但在物理存储介质上,可能还保留着原始数据
Discard    Write Block    按 Write Block 擦除数据,完成后重新读取可能会返回擦除前的数据
Sanitize    -    将标记擦除的 Block 的数据在物理介质上清除
Erase

      Erase 操作以 Erase Group 为单位进行一个或者多个 Group 的数据擦除,一个 Erase Group 由一个或者多个 Write Block 组成。
      eMMC Device 在执行 Erase 操作时,通常并不会进行实际物理数据的擦除,只是将待擦除的 Erase Group 中的 Block 从地址空间中 unmap,然后从后台的空闲 Block 中选择已经完成物理擦除的 Block,重新 map 到该地址空间中,然后告知 Host 端已完成 Erase 操作。实际物理擦除操作则在后台选择合适的时机进行。
      这样的逻辑可以减少 Host 执行 Erase 操作的等待时间,提高 eMMC Devcie 的响应速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值