【平台开发】MTK6833——add harware command queue function in lk

CQE实现主要步骤(参考协议)

  1. Host system结构
    在这里插入图片描述
    command queue任务结构:
    在这里插入图片描述
    2.Theory of Operation(操作理论)
  • init(初始化)
    • 初始化,enable CQ
    • 配置CQCFG Task Descriptor size
    • 配置CQTDLBA(Command Queuing Task Descriptor List Base Address )和CQTDLBAU(Command Queuing Task Descriptor List Base Address Upper 32bits),使其指向主机内存中分配给TDL的内存位置
    • 配置CQSSC1(Send Status Configuration 1)控制何时通过CQE向设备发送SEND_QUEUE_STATUS命令
    • 配置CQIC(Interrupt Coalescing)寄存器控制中断合并功能:启用/禁用,设置中断计数和定时器保护
    • 配置CQRMEM(Response Mode Error Mask)来控制哪些错误可能触发RED(Response Error Detection )中断(如果与重置值不同)
  • Task Issuance Sequence(任务发布顺序)
    • 通过读取CQTDBR(Command Queuing Task Doorbell)找到一个空的传输请求槽。空的传输请求槽在CQTDBR中将其各自的位清除为’ 0 ’
    • 在空槽的第一个条目处构建任务描述符。
    • 在空槽的第二个条目处构建一个传输描述符。
    • 如果请求多个传输,重复步骤1-3完成所有需要的传输。
    • 将CQTDBR设置为响门铃寄存器,以指示CQE一个或多个传输请求准备发送到附加设备。主机软件只在新任务对应的位上写一个“1”;CQTDBR中的所有其他位位置都应该用’ 0 '写入,这表明它们的当前值没有变化
  • Task Completion Sequence(任务完成顺序)
    • 读取CQTCN(Task Completion Notification)以确定哪些任务已经完成。在CQTCN中设置的每个位(通过其索引)表示一个已完成但尚未由软件服务的任务。
    • 每完成一项任务:
      a. 清除对应的CQTCN位
      b. 将完成通知传递给请求应用程序
  • Task Discard Sequence
    在这里插入图片描述
    • Error Detect and Recovery
      • 读取MMC主机控制器错误中断状态寄存器并确定错误与CQE有关
      • 将’ 1 '写入CQCTL。
      • 等待CQCTL。停下来读“1”。在某些错误情况下,这可能不会发生,因此软件应该在足够的超时后继续执行下一步。
      • 读取CQCRI(Command Response Index)和CQCRA(Command Response argument)以确定最后一个响应的索引和参数
      • 读取CQTERRI(Task Error Information)以确定传输命令的索引以及与之相关的任务的索引
      • 执行特定错误的恢复过程
      • 将’ 0 '写入CQCTL以恢复操作
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blank_time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值