UFS的初始化过程(一)
对于不同的设备,eMMC和UFS来说,初始化的过程都很重要。从客户端来看,很多不良都发生在初始化阶段。
UFS的初始化比较麻烦,先再来看下UFS的结构。
UFS不同的layer有不同的SPEC,那么初始化的过程在不同的层面有不同的process. 这里先介绍UFS层的init process。
(一)UFS init过程
在UFS JEDEC中,对于UFS init过程的描述还是比较清楚的,如下图。这里的UFS host和UFS device指的是
1. 上电行为:Power-on Reset/HW Reset/EndPointReset
2. M-PHY layer initiation。这个动作是由host 和device端的M-PHY 各自独立完成的,中间没有信息交互。后面再展开。
3. Unipro 的boot sequence. 这个后面再展开。
4. UFS层面第一个握手动作。NOP OUT UPIU-> NOP IN UPIU.
5. 读取device descriptor, 这个过程是optional的。
6. SCSI read读取boot data from BOOT LU. 这个过程也是optional的,只有当BOOT LU ENABLE,及host选择从UFS boot时,才会有这个过程。 BOOT LU的大小一般都是几十MB左右,里面存放是bootloader的数据,大部分的系统数据,如kernel等还是存放在user分区的LU中。
7. Query request(SET FLAG fDeviceInit)这是host 最后和device确认init的过程已经完成了。
在实际的手机启动过程中,开机过程并不是一次init过程完成的,可能需要2,3甚至5次init的过程。