By: Ailson Jack
Date: 2023.11.26
个人博客:http://www.only2fire.com/
本文在我博客的地址是:http://www.only2fire.com/archives/165.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。
微信公众号:
嵌入式那些事
设备识别模式(Device identification mode)
在设备识别模式下,Host会复位eMMC设备,验证工作电压范围和访问模式,识别eMMC设备并为总线上的eMMC设备分配相对设备地址(RCA)。在设备识别模式下,所有数据通讯都只使用命令线(CMD)。
下图显示了总线模式,操作模式和设备状态之间的关系。每个eMMC设备状态都与一个总线模式和一个操作模式相关联的。
从上图可知,设备识别模式包含3个状态,分别是idle状态,ready状态和identification状态。
设备复位
当eMMC设备接收到参数为0x00000000的GO_IDLE_STATE(CMD0)命令后,eMMC设备就会进入idle状态。下面3种情况会让eMMC设备进入idle状态:
- 引导模式流程完成以后,eMMC设备会进入idle状态;
- 在pre-boot状态,如果CMD线保持低电平时间少于74个时钟周期,eMMC设备会进入idle状态;
- 如果eMMC设备没有使能引导模式,在上电以后eMMC设备会进入idle状态;
在idle状态,eMMC设备的RCA地址会被初始化为默认值0x0001,Host会将CLK线上的时钟频率设置为识别时钟频率fod(识别时钟频率fod的最大值为400KHz)。
参数为0x00000000的GO_IDLE_STATE(CMD0)命令在除inactive状态外的其他状态都是有效的。
考虑到CMD0的兼容性,如果eMMC设备在除inactive状态外的其他状态接收到CMD0命令(参数为除了0xFFFFFFFA和0xF0F0F0F0以外的其他值),eMMC设备将会把CMD0命令(参数为除了0xFFFFFFFA和0xF0F0F0F0以外的其他值)当做复位命令并进入到idle状态。
访问模式验证
Host可以通过CMD1命令读取eMMC设备的OCR寄存器来了解eMMC设备的寻址模式(Access Mode)。Access Mode决定了eMMC设备在响应Host的数据读写命令时,是怎样对eMMC设备的内部存储器进行寻址的。eMMC 5.1协议定义了两种寻址模式:字节寻址(byte mode)和扇区寻址(sector mode)。
字节寻址采用的是32位宽的寻址位数,这种寻址机制限制了eMMC的最大容量为2GB。为了支持更大容量的eMMC,后续的eMMC协议(比如eMMC 5.1协议)增加了sector寻址方式(1 sector=512B)。容量大于2GB的eMMC,都是采用sector寻址的方式。
Host通过发送SEND_OP_COND(CMD1)命令给eMMC设备来询问eMMC设备的电压,寻址方式以及是否就绪。如果eMMC设备处于忙状态,eMMC设备回复的固定格式响应内容为0x00FF_8080(eMMC设备容量小于或等于2GB)或者0x40FF_8080(eMMC设备容量大于2GB)。如果eMMC设备进入ready状态,eMMC设备回复的固定格式响应内容为0x80FF_8080(eMMC设备容量小于或等于2GB)或者0xC0FF_8080(eMMC设备容量大于2GB)。
SEND_OP_COND(CMD1)命令参数的[30:29]位域的值可以表明Host可以处理的寻址方式(一般情况下CMD1的参数为0)。OCR寄存器相应位域的数值可以表明eMMC设备要求的寻址方式。
只有eMMC设备进入ready状态之后,通过SEND_OP_COND(CMD1)命令获得的OCR寄存器值中的寻址模式才是有效的。
设备识别过程
在eMMC设备上电之后,如果eMMC设备没有使能引导模式,或者pre-boot状态下CMD线保持低电平时间少于74个时钟周期,或者eMMC设备引导模式流程完成,那么eMMC设备会进入设备识别模式的idle状态。当然了在除inactive状态外的其他状态下,Host发送参数为0x00000000的GO_IDLE_STATE(CMD0)命令之后,eMMC设备也会进入设备识别模式的idle状态。
在idle状态下,eMMC设备会进行一些内部初始化工作,Host需要不断的发送SEND_OP_COND(CMD1)命令来查询eMMC设备是否完成初始化。Host发送的CMD1命令参数中,包含了Host支持的寻址模式信息,eMMC设备接收到Host的寻址模式信息之后会与自身要求的寻址模式进行匹配,如果eMMC设备容量大于2GB,但是Host不支持扇区寻址模式,那么eMMC设备就会进入inactive状态。
当eMMC设备完成初始化之后,eMMC设备就会进入ready状态,此时Host通过CMD1查询到eMMC设备处于ready状态就会停止CMD1命令的发送。eMMC设备处于ready状态时,OCR寄存器的[31]位为1。
在ready状态下,Host发送ALL_SEND_CID(CMD2)命令来获取eMMC设备的CID寄存器信息,eMMC设备在接收到CMD2命令之后会将CID寄存器的[127:1]位的内容通过响应回复给Host,之后eMMC设备就进入identification状态。CID寄存器中存储的是eMMC设备的CID信息(Card IDentification),CID是eMMC设备的标识信息,CID具有唯一性。CID由厂商ID,设备信息,OEM信息,产品名称,产品版本,产品序列号,制造日期组成。
在identification状态下,Host发送参数包含16位RCA的SET_RELATIVE_ADDR(CMD3)命令来给eMMC设备分配RCA,给eMMC设备完成RCA分配之后,就代表设备识别模式完成,eMMC设备会进入到数据传输模式的stand-by状态。
eMMC设备默认的RCA地址为0x0001,Host会在identification状态下为eMMC设备分配RCA,RCA主要用于数据传输模式下Host选择具体的eMMC设备。
设备识别模式下,eMMC设备的状态图如下所示:
欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事
),可以扫描下面的公众号二维码:
如果文中有什么问题欢迎指正,毕竟博主的水平有限。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。
排版更好的内容见我博客的地址:http://www.only2fire.com/archives/165.html
注:转载请注明出处,谢谢!^_^