EMMC cmd

基本命令


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要使用的电压值。

host发送CMD1后,会从device收到R3,如果R3中busy bit为0,表示device还没准备好。host重复发送CMD1,接收R3这个过程。


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。


CMD4

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


CMD5

CMD5 SLEEP/AWAKE

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

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


CMD6

CMD6 SWITCH

切换设备的操作模式或者修改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值为0~255,但是仅仅0~191为有效索引值。
[15:8] Value,
[7:3] Set to 0 
[2:0] Cmd Set ,要切换的command set


CMD7

CMD7 SELECT/DESELECT_CARD

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

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

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


CMD8

CMD8 SEND_EXT_CSD

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


CMD9

CMD9 SEND_CSD

参数指定设备的RCA [31:16] RCA

请求设备发送它的Device-specific data(CSD)到CMD line上。


CMD10

CMD10 SEND_CID

参数指定设备的RCA [31:16] RCA

请求设备发送它的Device identification(CID)到CMD line上


CMD12

CMD12 STOP_TRANSMISSION

参数指定设备的RCA [31:16]

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

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


CMD13

CMD13 SEND_STATUS

参数 [31:16] 设备的RCA, [0] HPI flags。

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


CMD14

CMD14 BUSTEST_R

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


CMD15

CMD15 GO_INACTIVE_STATE

参数[31:16]指定设备的RCA

设置设备状态为inactive


CMD19

CMD19 BUSTEST_W

Host发送总线测试模式数据到device


面向块的读命令

CMD16

CMD16 SET_BLOCKLEN

参数[31:0]  block长度

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


CMD17

CMD17 READ_SINGLE_BLOCK

参数[31:0] data block地址

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


CMD18

CMD18 READ_MULTIPLE_BLOCK

参数[31:0] data block的首地址

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


CMD21

CMD21 SEND_TUNING_BLOCK

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


面向块的写命令

CMD23

CMD23 SET_BLOCK_COUNT

参数:

[30] '0' non-packed '1' packed

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

[15:0] number of blocks,

定义读写块数目


CMD24

CMD24 WRITE_BLOCK

参数[31:0] 数据块地址

协议个数据块到设备中,尺寸由之前的CMD16 SET_BLOCKLEN定义


CMD25

CMD25 WRITE_MULTIPLE_BLOCK

参数[31:0] 数据块起始地址

连续数据块,直到STOP_TRANSMISSION或者已经写完了请求的数据块。


CMD26

CMD26 PROGRAM_CID

写设备CID寄存器。这个命令只能烧写一次,正常情况下是制造商使用这个命令。


CMD27

CMD27 PROGRAM_CSD

更改CSD中的可编程位


CMD49

CMD49 SET_TIME

设置device的real time clock,device使用这个时钟做一些内部维护工作。

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


面向块的写保护命令


CMD28

CMD28 SET_WRITE_PROT

参数 [31:0] 数据块地址

如果设备支持写保护功能,这个命令设置指定地址组的写保护位


CMD29

CMD29 CLR_WRITE_PROT

参数[31:0] 数据块地址

如果设备提供了写保护功能,这个命令清除指定地址组的写保护位


CMD30

CMD30 SEND_WRITE_PROT

参数 [31:0] 写保护数据地址

CLASS_6_CTRL=0x00: 如果设备支持写保护功能,这个命令请求设备发送写保护位状态

CLASS_6_CTRL=0x01: 命令用来请求设备发送released组状态,0表示给定的组有效可访问,1表示给定组被released无法使用。


CMD31

CMD31 SEND_WRITE_PROT_TYPE

参数[31:0] 写保护起始地址

CLASS_6_CTRL=0x00: 请求设备发送不同写保护组的写保护类型,64个写保护位(代表32个写保护组),通过数据线传递。如果组的有效地址已经在有效范围之外,那么被填充为0

CLASS_6_CTRL=0x01:


删除命令

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


IO模式命令

CMD39

CMD39 FAST_IO

参数

[31:16] RCA,

[15:15] 寄存器写标志

[14:8] 寄存器地址

[7:0] 寄存器值

这个命令用来读写8bit寄存器数据,R4响应用来返回读数据。这个命令访问应用特定的寄存器(未在EMMC标准中定义的)

CMD40

CMD40 GO_IRQ_STATE

设置设备进入中断模式












你可能感兴趣的:(嵌入式Linux)