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

依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设备不会重启。

[元带你学: eMMC协议详解 10] Device 识别流程 与 中断模式_第1张图片

 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相反)。当主机接收到中断响应后,主机返回到标准数据通信过程。

[元带你学: eMMC协议详解 10] Device 识别流程 与 中断模式_第2张图片

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

免责声明

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

你可能感兴趣的:(linux,运维,服务器,eMMC)