USB3.0接口——(4)生产消费者模型

1.生产消费者模型

对于Transfer TRB,软件是生产者,xHC是消费者。
软件作为生产者将需要传输的内容以TRB(transfer request block)的形式放入transfer ring。
xHC host作为消费者,取出这些TRB,进行相应的数据传输操作。

对于Command TRB,软件是生产者,xHC是消费者。
软件作为生产者将需要xHC执行的命令TRB(transfer request block)的形式放入Command ring,xHC host作为消费者,取出这些TRB,进行相应的命令操作。

对于Event TRB,xHC是生产者,软件是消费者。
在xHC 执行完TRB后,无论成功还是失败,xHC将作为生产者,向event ring中放入一个TRB, 作为向软件对一笔传输事务的结果报告,软件在相应中断产生后的DPC处理中,作为消费者从event ring中取出该TRB,进行相应的处理。

例如,对于Transfer Ring而言:
在这里插入图片描述
生产者负责维护PCS标志的值定义:
初始化时,软件作为生产者,先将TRB Ring中所有的TRB的Cycle位都设置为0,然后根据需要将所需的TRB的Cycle位设置为1,表示它们为连续的TRB。——此时PCS标志的值为1
当创建Link TRB时,表示当前的TRB Ring要结束,软件可根据需要选择是否将Link TRB的Toggle Cycle设置为1,用于通知xHC下一轮TRB Ring的PCS定义才需要翻转。——如果Toggle Cycle设置为1,PCS标志的值改为0,否则不变

消费者负责维护CCS标志的值定义。
软件配置好TRB后,xHC从TRB 0开始执行,直到的TRBs的Cycle位不为1。——此时CCS标志的值为1
当遇到Link TRB时,xhC知道当前的TRB Ring即将结束,如果Link TRB的Toggle Cycle为1时,下一轮TRB Ring的PCS定义才需要翻转。——如果Toggle Cycle设置为1,CCS标志的值改为0,否则不变

TRBs由Producer插入并且设置Cycle位的值设为PCS。
注意:图中,“~PCS”表示PCS的倒置(inverted)。——只有当Link TRB的Toggle Cycle为1时,PCS的值定义才需要反转,否则按原来初始值来表示生产者循环标志

为了形成一个Ring(环状队列)一个Link TRB应该放在Ring的最后,并指向第一个TRB。一个Ring中可以有多个Link TRBs(???),这些TRBs用来将Transfer Ring Segments连接在一起。Toggle Cycle bit设置在Link TRB中。
如果Producer遇到一个设置在一个link TRB中的Toggle Cycle它应切换其PCS标志的状态。(如果原来PCS=1表示连续的TRB,则需要切换PCS值定义,改为PCS=0表示连续的TRB)
如果Consumers遇到一个设置在Link TRB中的Toggle Cycle它应该切换它的CCS flag。(如果原来CCS=1表示连续的TRB,则需要切换CCS值定义,改为CCS=0表示连续的TRB)
Producer设置TRB Cycle bit为PCS flag的值当它写一个TRB来设置Enqueue pointer所指位置时。
在遇到Link TRB后,Producer将要遇到的下一个TRB是TRB 0。Link TRB中的Toggle Cycle的申明将会导致Producer转换其PCS flag的状态。TRB 0中的Cycle bit将被设置为新的PCS的值。
Link TRB允许传输环跨越页面边界并动态调整大小。

注意:所有在Dequeue Pointer和 Enqueue Pointer之间TRBs都属于Consumer并且不能被Producer改变。如果Ring是空的(两个相等)那么没有TRB属于Consumer。Ring中的任何TRBs不属于Consumer那么就属于Producer。

在这里插入图片描述
注意:Producer Cycle State(PCS)被xHC保持,Consumer Cycle State(CCS)flags被软件保持,用以帮助识别队列指针的值。(这些flags并没有定义在xHC寄存器或者数据结构中)

指针推进的规则
.初始化TRB Ring时,Ring中所有TRB的Cycle bit设置为0。(包括Link TRB)
.初始化TRB Ring时,PCS=1,CCS=1。
.创建TRB时,Producer将TRB的Cycle bit设置为当前PCS的值。
.创建TRB时,TRB的Cycle bit应该对于Consumer来说只读。
.Consumer执行一个Dequeue Pointer指向的TRB时,需要该TRB满足条件——TRB的Cycle bit应该等于CCS。
.如果Enqueue指向了一个Link TRB,那么Enqueue Pointer应该被设置为Link TRB Ring Segment Pointer。并且如果在Link TRB中的Toggle Cycle bit被设置为“1”,则Producer应该将PCS的值将进行转置。
.如果Dequeue指向了一个Link TRB,那么Dequeue Pointer应该被设置为Link TRB Ring Segment Pointer。并且如果在Link TRB中的Toggle Cycle bit被设置为“1”,则Producer应该将PCS的值将进行转置。

注意:Cycle bit转换发生在Link TRB和Link TRB Ring Segment Pointer指向的segment的第一个TRB之 间。
注意:TR Dequeue Pointer和Link TRB并不需要指向一个memory page的开始。

1.1.生产者(Producer)

管理入队指针。
生产者维护一个“生产者循环状态”(PCS)标志,该标志标识它应写入TRB Cycle bit的值。

1.2.消费者(Consumer)

管理出队指针。
消费者维护一个消费者循环状态(CCS)标志,将其与它所获取的TRB中的Cycle bit进行比较

如果CCS标志等于TRB Cycle bit的值,则消费者拥有出队指针指向的TRB并可以对其进行处理。 如果它们不相等,则消费者应停止处理TRB,并等待更多工作的通知。

1.3.规则

消费者应按顺序执行TRB,从出队指针引用的TRB开始。
消费者或生产者可以随时以任何顺序修改其拥有的任何TRB。
出队指针和入队指针-1之间的所有TRB均归消费者所有,生产者不得对其进行修改。即生产者不得修改消费者所拥有的TRB;消费者也绝不能修改生产者所拥有的TRB。
如果Ring为空(出队指针=入队指针),则消费者不拥有任何TRB。
消费者所不拥有的Ring中的任何TRB均归生产者所有。

1.3.1.出入队指针

入队指针和出队指针是用于指代TRB Ring中有效条目的逻辑开头和结尾的术语。
xHC拥有出队指针和入队指针之间的TRB。

1.3.1.1.入队指针

是生产者可用的Ring中下一个TRB的地址。生产者在此位置从TRB开始构造新的工作项,并在构造完成时推进入队指针。
入队指针标识软件可用于排队TD的下一个TRB位置的地址。

1.3.1.2.出队指针

是消费者要服务的下一个TRB的地址。
. 出队指针标识xHC要执行的下一个TRB的地址。

1.3.1.3.规则

入队和出队指针始终从其初始值指向的TRB条目开始前进。
如果出队指针等于入队指针,则TRB Ring为空。
如果“入队指针+1”=出队指针,则振铃已满。请注意,“入队指针+1”值的计算需要理解链接TRB。
入队指针-1和出队指针之间的TRB由工作项的使用者拥有。环中的所有其他TRB由工作项的生产者拥有。当生产者提前入队指针时,TRB所有权将传递给消费者。消费者提前出队指针时,TRB所有权将传递给生产者。

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB 3.0(也称为SuperSpeed USB)是一种高速数据传输接口,它提供了比USB 2.0更快的传输速度和更大的带宽。下面是USB 3.0接口硬件电路设计的一般步骤: 1. 电源供应:首先,USB 3.0接口需要一个稳定的电源供应。通常情况下,可以使用5V的直流电源。 2. 信号线:USB 3.0接口使用了9根信号线,其中4根用于数据传输(两对差分信号对),1根用于电源供应,1根用于地线,还有4根用于控制和同步。 3. PCB布局:在设计USB 3.0接口的硬件电路时,需要注意良好的PCB布局。差分信号对应该保持相等的长度,并且要避免干扰和串扰。同时,还需要考虑信号线的阻抗匹配和信号完整性。 4. 驱动器和接收器:USB 3.0接口需要使用特定的驱动器和接收器芯片来处理数据的发送和接收。这些芯片通常包含了差分信号线驱动和接收电路。 5. ESD保护:为了保护USB 3.0接口免受静电放电(ESD)的影响,需要在电路设计中添加ESD保护电路。这些保护电路可以帮助防止静电放电对接口和相关设备的损坏。 6. PCB层次:为了提高信号完整性和减少干扰,可以考虑使用多层PCB设计。通过将信号和电源层分离,可以减少信号间的干扰。 7. 信号完整性测试:在完成USB 3.0接口硬件电路设计后,需要进行信号完整性测试。这些测试可以帮助确保信号在传输过程中的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值