讲讲UFS初始化和启动

这一节讲讲ufs初始化。
初始化和启动包括三个阶段:部分初始化,加载启动代码(可选)和初始化完成。
部分初始化阶段
这个阶段开始于上电或者设备重启,它涉及到整个ufs栈的初始化。
这个初始化阶段完成后,整个物理层(m-phy)和数据链路层(unipro)应该被初始化好,传输层可以和主机交互read命令和“test unit ready”命令(主机发该命令给设备,查询设备是否准备好),主机也可以通过设备管理器访问设备描述符(device descriptor),获取设备配置信息。
加载启动代码
如果启动代码不是存储在ufs设备上,则没有这一阶段。主机怎么知道启动代码是不是存储在ufs设备上呢?
经过前一阶段的初始化,主机可以访问设备描述符,获得“bbootlunen ”属性,读取该属性可以知道启动代码是否在ufs设备上,以及具体在哪个boot lu 上面。
如果bbootlunen = 01h或者02h,说明启动代码存储在ufs设备上。由于boot lu是映射到普通的lu上的,要读取启动代码,还需要知道boot lu和存储启动代码lu的映射。主机可以通过读取单元描述符(unit descriptor)知道,比如:
查找到具体存储代码的lu,主机就可以读取该lu获得启动代码。
初始化完成
当主机完成前面两个阶段,主机会通过设备管理器,给设备设置fdeviceinit = 1,这是一个标志(flag),用以初始化。 主机设置了该标志后,然后就一直在那查询该标志的值。
与此同时,ufs设备的固件继续完成自己的初始化,当设备完成初始化,认为可以响应主机任何命令或者请求时,就清掉fdeviceinit,即fdeviceinit = 0。
当主机查询到fdeviceinit =0,就可以发任何ufs协议中的任何命令或请求给ufs设备。
至此,整个ufs初始化和启动完成。
下图具体展示了ufs初始化和启动过程(可选的,opt):
再解释一下这个启动过程:
主机给设备上电或者重启设备,然后主机和设备端的物理层和数据链路层完成初始化,之后主机ping设备(通过nop out upiu),确认设备双方连接正常。设备收到nop out upiu,应该回nop in upiu,表明双方连接没有问题。
加载启动代码可选(上图蓝色方框中的步骤)。主机读取ufs设备描述符,如果bdescraccessen = 0,设备描述符不可访问,那么,即使启动代码存储在ufs设备上,我们也无法在该阶段加载启动代码,因为诸如bbootenable和bbootlunen之类的信息无法获取,主机就无法知道存储代码存储在哪个lu上。因此,如果bdescraccessen = 0,加载启动代码阶段不应该放在这里,而是在设备彻底初始化好后。
加载启动代码阶段,主机通过读取设备描述符,获得启动代码在哪个lu上,然后发个试探性命令“test unit ready”给该lu,查看该lu是否准备好。如果boot lu准备好,主机就通过发read命令给设备,加载启动代码。
然后,主机设置fdeviceinit = 1,然后一直轮询该标志,一旦fdeviceinit 变成0,标志ufs设备初始化完成。
最后,再把设备初始化过程中,双方交互的内容做个总结:

中兴通讯积极探索物联网应用创新,荣获“特别贡献奖”
3D打印石墨烯基超材料的最新发展和应用
“南大校友智能医疗与人工智能创投峰会”在溧水举行
飞利浦猛腾系列显示器:NanoIPS面板,拥有更高画质的显示效果
百利通半导体推出ASSP电压控制晶体振荡器(VCXO)
讲讲UFS初始化和启动
7款常见Linux 操作系统你都知道吗?
冷轧机主减速机轴承室修复采用的哪家复合材料
真空度测试仪的原理及参数
仓储物流机器人 谁能成时代新主角
激光打标视觉定位系统的应用优势以及特点
我们该如何辨别AGV小车的质量好坏
都是韩货的三星QLED和LG的OLED屏,你还要吗?
雄安新区将打造绿色智能交通系统,以创新为第一动力
C语言assert(断言)简介
红外线探测器原理_红外线探测器怎么安装
50赫兹交流电容容抗速查表,capacitor reactance @50Hz AC
怎么分析频谱分析仪失锁维修故障?
基于联网式自适应多相位智能型信号机的城市交通灯控制系统的设计
智慧公安情报分析系统开发