EMMC 基本命令

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值为0255,但是仅仅0191为有效索引值。

[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

设置设备进入中断模式

EMMC 进入boot模式

通用的是第一种开启Boot的方式:

主要步骤如下:

1、发送CMD0 参数:0xf0f0f0f0,进行Reset操作。

2、将CMD拉低。(要求至少经过74 clock周期,一直拉低进行DATA传输)

EMMC4.4即以上版本可支援第二种

1、发送CMD0 参数:0xf0f0f0f0,进行Reset操作。

2、再发送CMD0参数:0xfffffffa,进入boot mode。(两个CMD0的时间间隔文档要求经过74 clock周期,实际中小于这个时间也可以。)

EMMC 正常初始化流程:

(和SD不同,EMMC不需要切电压)

CMD0 -> CMD1 ->CMD2…

EMMC work State

Linux emmc视频教程,EMMC 流程讲解相关推荐

  1. 藤摇椅游戏道具制作全流程讲解视频教程

    藤摇杆|一个完整的游戏资产工作流程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 含工程素材 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 | ...

  2. 嵌入式Linux系统环境搭建全流程-4412友善之臂开发板

    4412友善之臂开发板-Linux系统环境搭建全流程 ​ 没错,这篇确实值得一看!可能是由于我稍微会一点点哈,就有好多小伙伴就找我帮他们搭建环境,但Linux中的以及开发版连接,与烧写程序中的整个环境 ...

  3. 22081-12-12 系统移植(TF-A移植和linux操作系统开发阶段流程总结)

    //移植流程 1.将uboot镜像文件固化到开发板的TF卡或者EMMC设备中 2.在ubuntu的~/tftpboot目录下,准备tftp服务器要下载的文件(镜像文件和设备树文件) 3.通过开发板的拨 ...

  4. DNF之架设搭建游戏流程讲解

    DNF之架设搭建游戏流程讲解 一.架设服务端 CentOS6.x系列的系统,已被官方弃用,阿里的镜像源可能会下载不了,所以搭建服务端比较费劲,并且极大概率是靠运气,因此不做讲解,有问题直接联系我.QQ ...

  5. LAMP兄弟连Linux原创视频教程下载地址汇总[第一讲至第五讲]

    LAMP兄弟连Linux原创视频教程 第1讲 Linux应用与发展(上) 下载地址1: http://dl.dbank.com/c08nc4saoz 下载地址2: http://www.rayfile ...

  6. 尚观linux视频配套教程,尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备...

    尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备 5.jpg (67.09 KB, 下载次数: 0) 2018-4-16 09:34 上传 1.jpg (44.17 ...

  7. Linux下服务器端开发流程及相关工具介绍(C++)

    原文:Linux下服务器端开发流程及相关工具介绍(C++) 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把 ...

  8. linux驱动程序是什么,简述一个Linux驱动程序的主要流程与功能

    1. 简述一个Linux驱动程序的主要流程与功能. 2. 请列举一个软件中时间换空间或者空间换时间的例子. void swap(int a,int b) { int c; c=a;a=b;b=a; } ...

  9. linux下杀死进程全权讲解

    linux下杀死进程全权讲解 2009-10-27 08:57 佚名 linux 我要评论(0) 字号:T | T 本文将详细讲解linux杀死进程的多种命令,包含他们的作用,kill作用:根据进程号 ...

最新文章

  1. C4D样条曲线建模大师班 Cinema 4D MasterClass: Master Modelling using Splines
  2. .NE 后退刷新验证码
  3. Fragment的setUserVisibleHint方法实现懒加载
  4. 算法与数据结构 - 滑动窗口
  5. 下一代低延时直播CDN:HLS、RTMP 与UDP +WebRTC
  6. nginx获得response自定义的header
  7. JavaScript 正则表达式(RegExp对象、属性、方法、String支持)
  8. java 按回车键查询
  9. 人人都能看懂的LSTMGRU
  10. 基于DEAP库的python进化算法--遗传算法实践--非线性函数寻优
  11. asp.net小区停车场管理系统
  12. 用计算机建立电子表格,求计算机作业电子表格演示文稿。
  13. ExtJs4(3)——带搜索和操作按钮的表
  14. 操作系统信号量问题-------南北桥问题java实现
  15. 美国次贷危机[百科]
  16. 搭建在线LaTeX编辑器Overleaf
  17. 口碑最好的国产蓝牙耳机,2021国产最好用的蓝牙耳机
  18. Unity3D 游戏引擎之FBX模型的载入与人物行走动画的播放(十二)
  19. Linux环境下几种常用的文件系统
  20. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现

热门文章

  1. 高效学习-记不住人名的我如何复述一本书的内容
  2. cinder manage/unmanage
  3. 服务器指定gpu命令,用于亚马逊网络服务深度学习的10个命令行技巧
  4. 一个调用云API进行车牌识别的的例子
  5. openGauss逻辑结构:模式管理
  6. 基于PyQt5实现导出Excle表
  7. 零设备基础:扫描二维码就能巡检!
  8. 阿里云SLB负载均衡理论与详细操作
  9. python程序员幽默段子_关于程序员的10则笑话
  10. SAT数学常见几何词汇