UFS Host Controller初始化

Host Controller 初始化

        当UFS Host Controller上电复位时,所有 MMIO 寄存器都将处于其上电默认状态,并且UFS Host controller 和UFS 芯片的链路(就是TX,RX)将处于非活动状态(inactive)。 以下是UFS Host controller 软件为了初始化UFS Host Controller而要执行的操作:

  1. 启动UFS Host Controller的第一步是正确编程系统总线接口。 这一步与UFS Host Controller实现所使用的系统总线有关,因此应遵循特定系统总线的文档。该步完成时,UFS Host Controller应准备好在系统总线上传输数据。
  2. 为了启用host controller ,将 1 写入 HCE(host controller enable) 寄存器。 这触发了本地 UIC 层的自主基本初始化(autonomous basic initialization)。 初始化序列应由 DME_RESET 和 DME_ENABLE 命令组成。 可以根据实现需要添加其他命令,如 DME_SET 命令。 在基本初始化序列期间,HCE 的值一直为 0。
  3. 需要一直等待,直到 HCE 读为 1 。这个时候表示基本的初始化序列已经完成。
  4. 附加命令(如 DME_SET 命令)可以从系统主机发送到 UFS host controller ,以提供配置灵活性。
  5. 可选地将 IE.UCCE(UIC command completion enable)设置为 1,以便使能 IS.UCCS(UIC Command Completion Status)中断。
  6. 发送 DME_LINKSTARTUP 命令以开始链路启动流程 (link startup procedure)
  7. 在完成 了DME_LINKSTARTUP 命令,如果设置了 IE.UCCE,那么将置位IS.UCCS ,这个时候可以向系统主机标记中断, 该中断将独立于 GenericErrorCode 进行标记。
  8. 如果完成的 DME_LINKSTARTUP 命令的 GenericErrorCode 为 SUCCESS,那么除了 IS.UCCS 位之外,还将设置 HCS.DP(device present)。
  9. 检查 HCS.DP 的值,并确保连接有一个设备。 如果检测到设备的存在,转到步骤 10;否则,在 IS.ULSS 设置为 1 后重新发送 DME_LINKSTARTUP 命令(转到步骤 6)。 IS.ULSS 等于 1 表示 UFS 设备已准备好进行链接启动。
  10. 通过写IE 寄存器来启用附加中断。
  11. 使用阈值(IACTH)和超时(IATOVAL)的值来初始化中断聚合控制寄存器(UTRIACR)。注意当运行/停止寄存器(UTRLRSR)未被使能或没有请求未完成时,也可以随时执行UTRIACR初始化。
  12. 如果需要,通过 UIC 命令接口 (interface) 完成host controller配置。
  13. 分配和初始化 UTP 任务管理请求列表。(Allocate and initalize UTP Task Management Request List)
  14. 分配 UTP Task Management Request List 的起始地址,并且用一个 64 位地址指针指向它。
  15. 分配和初始化 UTP 传输请求列表(UTP Transfer Request List)
  16. 分配 UTP Transfer Request List 的起始地址,并且用一个 64 位地址指针指向它。
  17. 通过将 UTP 任务管理请求列表 Run-Stop Register(UTMRLRSR)设置为 1,以此来启用 UTP Task Mangement Request List。 该操作允许 host controller 通过 UTP Task Management Request Door Bell 机制开始接受 UTP 任务管理请求。
  18. 通过将 UTP 传输请求列表 Run-Stop Register(UTRLRSR)设置为 ‘1’ ,以此来启用 UTP Transfer Request List。该操作允许主机控制器通过 UTP Transfer Request Door Bell 机制开始接受 UTP 传输请求。
  19. bMaxNumOfRTT 将被设置为 bDeviceRTTCap 和 NORTT 的最小值。

上面是Jedec规定的UFS Host Controller的初始化流程,如下是笔者使用的UFS测试机器的初始化流程:

  1. 通过HCE(Host controller enable)来去使能UFS Host Controller。
  2. 通过HCE(Host controller enable)来使能UFS Host Controller。
  3. 执行DME reset(Cold reset) command
  4. 执行DME enable command。
  5. 执行DME_LINKSTARTUP command。
  6. 检查device preset(HCS.DP),以此来校验link startup是不是成功的。
  7. 通过Interrupt Enable(IE)来使能中断。
  8. 分配和初始化UMTRL。
  9. 分配和初始化UTRL。
  10. 通过UTMRLRSR来使能UTP task management request list。
  11. 通过UTRLRSR来使能UTP transfer request list。
  12. 发送是一个DME_GET(PA_TX_GEAR)以此来校验link是可以操作的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值