1.前言

eMMC总线操作包含:

  • boot mode
  • device identification mode
  • interrupt mode
  • data transfer mode

本文主要描述boot mode。

2. boot operation mode

2.1 boot mode状态机

图 eMMC boot mode state

  • pre-idle state

. 三种方式可以进入pre-idle状态:(1)power on后;(2)GO_PRE_IDLE_STATE命令(CMD0+0xf0f0f0f0参数);(3)hw reset by host

. GO_PRE_IDLE_STATE或hw reset assert后,device端output bus将呈现高阻态,device的初始地址被设置为0x0001,bus会有默认的驱动能力

. device可以检测到rst_n产生一段脉冲信号,通过上升沿来确定device是否发生了reset操作

. 有两个boot分区,每个分区大小最小为128KB,boot分区与user area是分离的,单独编址

. 可以使用CMD6来设置BOOT_PARTITION_ENABLE=1从boot area启动(否则从user area启动),进入到pre-boot state,如果BOOT_PARTITION_ENABLE=0或不支持boot mode(4.2以前的版本)则直接进入到idle state

  • pre-boot state

. 上电或reset后且发送第一个命令CMD1之前,CMD LINE要保持至少74个周期的低电平,device识别到,进入boot state执行初始化,并准备boot data

若是CMD lines没有保持74个时钟周期的LOW,又若是host在初始话过程之前发送任意的正常eMMC命令的话,slave应该没有任何反应且会退出boot mode到Idle State状态即card identification mode

注:CMD0+0xfffffffa执行alternative boot初始化是针对4.4的规范,CMD LINE不是保持74个周期的低电平,而是通过发送CMD0,并带有参数0XFFFFFFFA

  • boot state

主要进行boot数据的读取操作:

. host要读取的分区以及data size可以通过extended csd来设置

. 通过保持CMD line低电平或发送CMD0+0XFFFFFFFA来读取boot数据

. 在读取数据期间,cmd line必须保持低电平

. host必须采用push-pull模式,直到boot mode结束

. host可以采用single data rate(SDR)或dual data rate(DDR)

. HS200 & HS400在boot mode不支持

. host可以设置是否从device接收boot acknowledge

. 通过拉高CMD line则会终止boot mode进入idle state,从此离开boot mode 进入到card identification mode

注1:在SDR模式中,数据由设备发出的时钟控制而host则在时钟上升沿取样。而且每一个data line都有一个单独的CRC内容。
注2:在DDR模式中,数据则会在时钟的上升和下降沿同时取样,而且每一个data line有两个CRC内容。在这个模式下,block长度总是为512 bytes,而且数据会以4bit或者8bit模式交叉出现。奇数bytes(1,3,5……511)会被host在时钟上升沿取样,而偶数bytes(2,4,6……512)则被host在时钟的下降沿取样。设备会附加两个CRC16到每个有效地data line上(若是4bit数据模式,则有4个line是无效的),一个对应上升沿的奇数bytes,一个对应下降沿的偶数bytes。
注3:所有DAT lines的时序都应该按照DDR时序来。开始bit,结束bit 还有boot acknowledge只在时钟的上升沿有效。如果这些数据出现在下降沿是没用的。

2.2 boot mode时序

图 boot mode时序

进入boot state后:

. 若是boot acknowledge被激活,在CMD信号变LOW之后的50ms之内,slave必须发送acknowledge内容"010"到host。若是boot acknowledge没被激活,slave不会  发送;

.在CMD line变低的1S内,device 必须发出第一个数据给host;

.host必须保持CMD信号为LOW来读取所有的boot数据, host必须使用push-pull模式

.当boot数据读取操作完成,boot操作将会终止;

.通过拉高CMD line则会终止boot mode进入idle state,从此进入card identification mode

.当拉高CMD line后需要经过至少56个clock,才可以发送CMD1

注1:host选择从哪个partition读取boot数据是可以被提前设置的(EXT_CSD byte[179], bits[5:3]). Master可以读取的boot数据大小也是可以计算的(128KB x BYTE_SIZE_MULT (EXT_CSD byte[226]))

注2:host可以通过设置EXT_CSD byte[179],bit 6来选择是否从slave接受acknowledge,若是选择接受host可以通过acknowledge确认slave是在boot模式中运行。

注3:在数据传输阶段若是host把CMD拉高,slave必须在Nst个时钟周期内中终止数据或者acknowledge内容的传输。Nst值为一个数据周期和一个结束bit周期。若是在block传输过程中,master终止了boot模式,则slave必须在Nst个时钟周期内释放data lines。

3.参考文档

[1]http://www.jedec.org/sites/default/files/docs/JESD84-B51.pdf

[2]eMMC启动过程  http://blog.sina.com.cn/s/blog_6cb8cdbd0102vno5.html

转载于:https://www.cnblogs.com/smartjourneys/p/6663561.html

eMMC基础技术8:操作模式1-boot mode相关推荐

  1. eMMC的五种操作模式

    eMMC的五种操作模式:开机模式.ID辨识模式.中断模式.数据传输模式.无效模式. 开机模式 Boot mode Power ON后,卡若收到CMD0(GO_Idle_State)并带argument ...

  2. eMMC编程基础 -(二)eMMC基础介绍

    eMMC编程基础 -(二)eMMC基础介绍 1 eMMC 简介 1.1 eMMC系统概述 1.2 eMMC 的整体架构如下图片所示: 2 Flash Memory 3 Flash Controller ...

  3. 电脑基础操作_学打碟基础技术 - 数码打碟篇

    学打碟最基本的基础技术也是跟随时代的科技而进化的,打碟也因为科技的发展产生了最新的变化,就是今天小编要讲的主题,数码打碟,就是如今比较主流的打碟方式之一,也是操作最便捷的,甚至有的人起初学打碟的过程中 ...

  4. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. Docker基础技术:Linux Namespace【上】

    点点收获: //之前发现Coolshell上好久不更新了, 博主果然去搞大业去了,只恨这几篇文章看到太晚了啊~太厉害了. 1.  clone(), unshare(), setns()初识; 主要是š ...

  6. 内核:多内核操作模式

    多内核操作模式: 1.  <<QNX-–-微内核结构的实时操作系统.pdf>> 2.  对称多处理"(Symmetrical Multi-Processing) SM ...

  7. [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. SIP协议(基础技术知识)

    SIP协议(基础技术知识) SIP(Session InitiationProtocol)协议是Internet多媒体通信和控制协议体系的一部分,该协议族包括会话描述协议(SDP).会话发布协议(SA ...

  9. GIS基础软件及操作(五)

    GIS基础软件及操作(五) 原文 GIS基础软件及操作(五) 练习五.空间分析的基本操作 空间分析的基本操作 空间分析模块 空间分析是基于地理对象的位置和形态的空间数据的分析技术,其目的在于提取和传输 ...

最新文章

  1. SQL一对多特殊查询,取唯一一条
  2. Ribbon负载均衡策略配置
  3. 云栖大会发布全球调度算法大赛,阿里又要搞什么黑科技?
  4. ultraedit 运行的是试用模式_Wings面向企业级的单元测试用例自动编码引擎
  5. P3311-[SDOI2014]数数【AC自动机,dp】
  6. cppcheck值得注意的一些筛选项
  7. ASP 代码当前记录集不支持更新问题的解决办法。
  8. ASP.Net中实现上传过程中将文本文件转换成PDF的方法
  9. BoneCP主要配置参数
  10. Python中断并继续
  11. Unity3d C#获取海康摄像头直播视频流预览萤石截图实现
  12. 3dmax快捷键大全
  13. 交换机和路由器技术-28-OSPF的NSSA区域
  14. postfix搭建纯邮件转发服务器
  15. MySQL事务之幻读问题
  16. 利用HTML自制鬼灭之刃动态壁纸
  17. 洛谷-P3392 涂国旗
  18. 阿里云EasyExcel读写excel表数据
  19. cuda无法使用nvprof命令,找不到cupti64_2021_3.0.dll
  20. 浅谈C语言中数组理解

热门文章

  1. 【Java12】tomcatservlet(nginx,web.xml,生命周期,适配器优化),requestresponse(请求转发,登陆案例(1),重定向,文件下载)
  2. Linux下进程间通信概述
  3. 【Linux】一步一步学Linux——iptables-save命令(187)
  4. config done shell_shell do...done $config
  5. POJ 1852 Ants O(n)
  6. 使用fastcoll进行md5碰撞,两个不同的文件md5值一样。
  7. Linux多线程编程(一)---多线程基本编程
  8. Codeforce 1042 D. Petya and Array(树状数组、前缀和)
  9. HUD - 4463 Outlets
  10. 标准化条件变量 -- condition_variable