首页 > 其他分享 >【平台开发】MTK6833——add harware command queue function in lk

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

时间:2024-03-28 12:00:27浏览次数:22  
标签:function Task MTK6833 lk CQE 传输 任务 Command 读取

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以恢复操作

标签:function,Task,MTK6833,lk,CQE,传输,任务,Command,读取
From: https://blog.csdn.net/Blank_time/article/details/137106818

相关文章