[元带你学: eMMC协议详解 10] Device 识别流程 与 中断模式

news2024/11/24 2:12:25

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载

所在专栏 《元带你学: eMMC协议详解》

全文2700字,重点需掌握设备识别过程(CMD1 -> CMD2 -> CMD3), 这很常用, 也是最容易出现异常的地方。其他的了解即可。主要内容有:

目录

1 Device identification mode

1.1 设备复位 Device Reset

 1.2 Access mode validation (higher than 2GB of densities)

1.3 由忙(Busy)转到就绪(Ready)

1.4 设备识别流程

2 中断模式


1 Device identification mode

在设备识别模式下,主机Reset设备,验证工作电压范围和访问模式,识别设备并在总线上为设备分配一个相对设备地址(RCA)。设备识别模式下的所有数据通信都只使用命令线(CMD)。

1.1 设备复位 Device Reset

设备收到GO_IDLE_STATE命令(参数为Ox00000000)后,进入Idle状态。除了这种方式, 下面还有一些其他方式进到 Idle State.

  • 完成Boot operation 后
  • Pre Idle 状态下, CMD线拉低 74 Cycle
  • 上电后(如果没有enable Boot Operation 的情况)

则在上电后启动在这种状态下,设备的输出总线驱动处于高阻抗状态,设备被初始化为一个默认的相对设备地址(Ox0001)和一个默认的驱动级寄存器设置。主机识别时钟速率为总线时钟。参数为Ox00000000的CMD0在除Inactive State外的所有状态下都有效。在Inactive State下,设备不接受参数为0x00000000的CMD0。由于向后兼容的原因,如果设备接收到的CMDO参数不是OxFFFFFFFA或OxFOFOFOFO,在非Inactive状态下,设备将其视为设备复位命令,进入Idle状态。带有参数OxFFFFFFFA的CMDO是一个处于Pre-boot状态的启动启动命令,但是如果主机在非Inactive状态和Pre-boot状态之外的任何状态下发出该命令,设备将把它当作复位命令,并移到Idle状态,CMD0 是一种软复位,eMMC设备不会重启。

 1.2 Access mode validation (higher than 2GB of densities)

当设备繁忙时,e-MMC设备响应固定模式为0x00FF 8080或0x40FF 8080,当设备进入Ready状态时,响应固定模式为Ox80FF8080(容量小于等于2GB)或OxCOFF8080(容量大于2GB),不进入Inactive状态。

1.3 由忙(Busy)转到就绪(Ready)

CMD1响应中的忙位可以被设备用来告诉主机它仍在进行其上电/复位过程,并且尚未准备好进行通信。在这种情况下,主机必须重复发送CMD1,直到忙位被清除。在初始化过程中,不允许主机更改工作电压范围和接入方式设置。这些变化将被设备忽略。如果运行条件真的发生变化,主机必须重置设备(使用参数为Ox00000000的CMDO)并重新启动初始化过程。但是,对于已经处于非活动状态的设备,必须通过关闭电源并重新打开电源来进行硬复位。命令GO_INACTIVE_STATE (CMD15)可以用来将地址设备发送到非活动状态。当主机明确指定去激活某个设备时,使用此命令。命令CMD1应由本标准定义的所有设备执行。

1.4 设备识别流程

总线激活后,主机将向设备发送(CMD1), 设备需要在 1s 内返回CMD1 Ready。

实际中经常遇到手机等开机失败,大部分是因为设备无法回 CMD1 Ready, 这种情况是eMMC 上电初始化过程中遇到了异常, 比如数据损坏或元数据错误导致锁卡。

主机发出广播命令ALL_SEND_CID (CMD2),要求所有设备提供其唯一的设备标识(CID)号。所有未识别的设备(即那些处于就绪状态的设备)同时开始按顺序发送其CID号码。如果这些设备的输出CID位在任何一个比特周期内都与命令线上的相应位不匹配,则立即停止发送CID,必须等待下一个识别周期(保持在Ready状态)。由于每个设备的CID号都是唯一的,因此应该只有一个设备成功地将其完整的CID号发送到主机。然后,该设备进入识别状态。

主机发出CMD3 (SET_RELATIVE_ADDR)来为该设备分配一个相对设备地址(RCA),该地址比CID短,并将用于在未来的数据传输模式(通常具有比0更高的时钟速率)中对设备进行寻址。一旦接收到RCA,设备状态将变为standby状态,并且设备不再对进一步的识别周期做出反应。此外,该设备将其输出驱动器从开式漏极切换为推挽式。主机只要收到对其识别命令(CMD2)的响应(CID),就重复识别过程,即CMD2和CMD3的循环。如果不再有“设备”响应此命令,则表示所有设备已被识别。识别过程完成的超时条件是在发送CMD2后超过N个时钟周期没有起始位。

2 中断模式

e-MMC系统上的中断模式使主机(e-MMC主机)能够连续向从机(设备)数据传输。这种模式减少了主机的轮询负载,从而减少了系统的功耗,同时保持主机对设备服务请求的足够响应。对于主机和设备来说,支持e-MMC中断模式都是一个选项。主机在下发GO_IRQ_STATE (CMD40)命令前,必须确保设备处于standby状态。在等待设备的中断响应时,主机必须保持时钟信号活动。时钟速率可能会根据需要的响应时间而改变。主机使用GO_IRQ_STATE (CMD40)命令将设备设置为中断模式。处于wait - irq状态的设备正在等待内部中断触发事件。一旦事件发生,设备开始向主机发送响应。此响应以开漏模式发送。在等待内部中断事件的同时,设备也在等待命令线上的起始位。一旦检测到启动位,设备将中止中断模式并切换到待机状态。

无论在CMD40响应期间赢得或失去总线控制,设备都会切换到待机状态(与CMD2相反)。当主机接收到中断响应后,主机返回到标准数据通信过程。

 如果主机希望在收到中断响应之前终止中断模式,它可以使用保留的RCA地址Ox0000自行生成CMD40响应(Device bit = 0);这将使设备从等待irq状态恢复到备用状态。现在主机可以恢复标准的通信过程。

免责声明

本文根据公开信息整理,旨在介绍更多的存储知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/579631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合…

研报精选230528

目录 【行业230528华金证券】传媒行业深度研究:AIGC最新应用与场景研究 【行业230528国海证券】电动船舶行业深度报告:绿色智能大势已至,驶向电化百亿蓝海 【行业230528华西证券】纺织服装行业周报:5月增长放缓无碍中长期出清逻辑…

Linux下的yum和vim

目录 一、Linux软件包管理器yum1.1 何为软件包?1.2 rzsz工具1.3 如何安装和卸载软件?1.4 Linux的软件生态 二、vim文本编辑器 一、Linux软件包管理器yum 1.1 何为软件包? 软件包可以理解成是windows下别人提前编译好的安装包程序&#xff0…

任务7 课程信息管理系统

系列文章 任务7 课程信息管理系统 已知课程的信息包括:课程编号,课程名称,课程性质(必修、选修),课时,学分,考核方式(考试、考查课),开课学期&a…

day41_servlet

今日内容 零、 复习昨日 一、Cookie 二、Session 三、拦截器 四、登录认证、全局编码格式 零、 复习昨日 注解 热部署 请求转发 重定向 路径问题 总结使用经验: 无论请求路径是多层是单层,在写路径时都从/开始,即从根开始如果是服务器动作,从/开始直接写如果是浏览器动作,从/开…

CVPR 2018 | Spotlight论文:单摄像头数秒构建3D人体模型

想把自己的身体形象投射进电子游戏里?现在已经是很容易的事了。人工智能算法此前已被广泛应用于虚拟现实头像、监视、服装试穿或电影等多种任务的人体建模上,但大多数方法需要特殊的照相设备来检测景深,或从多个角度探查人体。近日,来自德国布伦瑞克工业大学和 Max Planck …

js获取Element元素的常用方法

js中获取Element元素的常用方法有以下四种: 【方法一】根据元素ID:document.getElementById() 【方法二】根据元素标签:document.getElementsByTagName() 【方法三】根据元素class名:document.getElementsByClassName() 【方法…

yolov5刚开始train时的环境问题

torch会自动被requirement.txt替换 在对yolov5_5.0进行pip install requirement.txt后,yolo5_5.0会将虚拟环境中中的torch替换为2.0.1版本的,但要注意查看该torch是否为gpu版本,查看方式如下:打开Anaconda Prompt,激活…

渗透测试 | 端口扫描

0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…

推荐系统算法详解

文章目录 基于人口统计学的推荐算法用户画像 基于内容的推荐算法相似度计算基于内容推荐系统的高层次结构特征工程数值型特征处理类别特征处理时间型特征处理统计型特征处理 推荐系统常见反馈数据基于UGC的推荐TF-IDFTF-IDF算法示例1. 引入依赖2. 定义数据和预处理3. 进行词数统…

12.区块链系列之比特币NFT

1. NFT协议Ordinals 2023年1月30日,比特币核心开发者Casey Rodarmor创建了NFT协议Ordinals Ordinals序数: 比特币的最小单位是Satoshi聪,1BTC1亿聪,每个聪的比特币都是同质化代币,它们之间并没有任何差别。Ordinals给聪打上了编号&#xff0…

vue3项目创建步骤,以及项目运行失败的原因和解决方法

vue3项目创建步骤,以及项目运行失败的原因和解决方法 vue3项目创建前提:搭建node.js环境第一步:创建一个空文件夹第二步:打开空文件夹,如图所示第三步:在此输入cmd,并按下回车键,进入…

Mysql面试必知的知识点-干货分享

文章目录 底层索引为什么使用B树,而不用B树?为什么Innodb索引建议必须建主键?为什么主键推荐使用整形自增?Mysql底层索引只有B树吗?联合索引底层长什么样子?数据库隔离级别中串行化是怎么实现的?查询方法需要加事务吗?大事务有什么影响? 底层索引为什么使用B树,而不用B…

Ai时代降临,我们的未来又在哪里?

文章目录 背景AI智能迭代进步码农的未来展望借助gpt快速成长总结 背景 随着人工智能的不断发展,自然语言处理技术也一直在不断的进步和发展,GPT(Generative Pre-trained Transformer)模型作为自然语言处理领域最前沿的技术之一&a…

什么是Redission可重入锁,其实现原理是什么?

一、概述 Redission是一个可重入锁,它可以在分布式系统中用于实现互斥锁。这种锁可以允许多个线程同时获取锁,但在任何给定时间只有一个线程可以执行受保护的代码块。 Redission锁提供了一种简单的方法来保证在分布式系统中的互斥性,同时支…

chatgpt赋能python:Python中的父类方法和super函数

Python中的父类方法和super函数 在Python中,我们经常会涉及到继承父类的方法和属性。当我们在子类中重写一个父类方法时,有时我们需要在子类方法中访问父类方法,可以使用Python的内置函数super()来实现。 什么是父类方法 在面向对象编程中…

runway gen2

来自Runway文生成视频ai大模型Gen-2_哔哩哔哩_bilibili来自Runway文生成视频ai大模型Gen-2,距离视频制作自由又近了一步。, 视频播放量 1651、弹幕量 0、点赞数 21、投硬币枚数 2、收藏人数 42、转发人数 22, 视频作者 旭升说, 作者简介 一起聊下互联网的那些事&…

10大白帽黑客专用的 Linux 操作系统

平时在影视里见到的黑客都是一顿操作猛如虎,到底他们用的都是啥系统呢? 今天给大家分享十个白帽黑客专用的Linux操作系统。 ▍1. Kali Linux Kali Linux是最著名的Linux发行版,用于道德黑客和渗透测试。Kali Linux由Offensive Security开发&…

[k8s]Kubernetes简介

文章目录 Kubernetes介绍术语Label StatefulSet 存储类VolumePersistent Volume IP地址Node IPPod IPService Cluster IPExternal IP PodPod定义Pod生命周期与重启策略NodeSelector(定向调度)NodeAffinity(亲和性调度)PodAffinity…

164. 最大间距

题目描述&#xff1a; 主要思路&#xff1a; 利用桶排序的思路&#xff0c;取最大最小值的差值/个数&#xff0c;答案一定是大于等于这个数的&#xff0c;每个块为一个桶&#xff0c;维护这个桶内的最大最小值。 class Solution { public:int maximumGap(vector<int>&a…