QE USB控制器介绍

    技术2025-07-19  16

    QE USB控制器由1个Transmitter模块,1个Receiver模块,和2个协议State Machine组成。协议State Machine控制Receiver模块和Transmitter模块,其中1个State Machine实现Device端的状态图,而另一个则实现Host端的状态图。该QE USB控制器可实现1个USB Device,1个USB Host,在用于测试目的(Loopback诊断)还可以同时实现这两者。

    在用作USB Device模式式,它具有下列特性:

    - 具有4个独立的endpoint分别支持control,bulk,interrupt,和isochronous类型数据传输

    - CRC16产生和校验

    - CRC5校验

    - 带位填充的NRZI编解码

    - 12-或1.5-Mbps速率

    - 可1帧多buffer的灵活数据buffer管理

    - 发送出错可自动重传

    在用作Host模式时,具有下列特性

    - 支持control,bulk,interrupt,和isochronous模式数据传输

    - CRC16 生成与检测

    - 带位填充的NRZI编解码

    - 支持12-或1.5-Mbps速率

    - 可1帧多buffer的灵活数据buffer管理

    - 自动发送SOF令牌

    - 支持用于调试的本地loopback模式(仅支持12-Mbps)

    在用作Host模式时,具有下列局限:

    QE USB硬件没有实现下列功能,软件必须负责实现它们:

    - 调度在1帧内或者各帧之间的各次传输

    - 发生错误后的重传和错误恢复

    此外,当使用packet-level接口时,软件必须负责准备令牌(token)。因为QE USB控制器没有集成有Root hub,当需要多个设备连接到此QE USB Host时,需要外加一个hub。另外还要注意的是,该QE USB控制器编程模型既不遵从OHCI (Open Host Controller Interface)规范,也不遵从UHCI (Universal Host Controller Interface)规范,因此软件不同于它们。

     

    USB Device模式

    在用作Device模式,它Transmitter模块,Receiver模块,和1个Control单元组成。Transimitter模块由4个独立的FIFO,每一个16-byte深,每一个FIFO独立地支持一种endpoint。Receiver则仅有1个FIFO,如图。

     

    复位后,可从缺省地址(0x00)寻址该USB设备,在枚举过程中,Host端会分配一个唯一的地址给1个USB Device,因此USB device软件需负责将分配给它的地址写入其地址寄存器USADR。USB Device支持4个独立的Endpints,每一个Endpoint可通过其寄存器(USEP0-USEP3)可独立配置为control,interrupt,bulk,或者是isochronous类型。但要注意的是,Endpoint0必须配置为control传输类型,因为USB系统软件会将Endpoint0用作1个control pipe。

    初始化完毕使能该USB Device后,USB Device控制器便会周期性地查询有效的Token包,根据Token包的不同,做不同的处理。对于无效的Token包(即PID或CRC校验失败,或是Token包长度不是3-byte),USB Device控制器会忽略它们。下图描述了对于不同的Token包,USB Device控制器的不同行为:

     

     

    USB Host模式

    在作用Host时,USB控制器支持有限的Host功能,下面会介绍它支持的功能,它的限制,以及它的编程模型。用作Host模式时,USB控制器由Transmitter,Receiver,1个Host控制单元,以及1个Function控制单元(用于测试目的)组成。Transmitter包含有4个独立的FIFO,每一个16-byte深,每一个Endpoint专用1个FIFO,Endpoint 0专用于Host事务,而Endpoint 1-3则用于测试时的Function事务。Receiver包含有1个FIFO,如图。

     

    物理层

    物理层是到USB线缆的物理接口,物理层的责任是传输'0'和'1'。

    USB线缆由4根线构成,信号传输通过其中的两根(一对差分线)D+和D-来实现,当传输'0'时,D+是低,D-是高;反之要传输'1'时,D+为高,而D-则为低。其余两根线分别是Vbus(+5V)和GND(-5V),用于向设备供电。数据在USB总线传输按小端LSB方式。

    除此之外,USB总线上还有下列几个特殊的信号:

    - 复位信号: 主机控制器能够复位设备,这通过信号SE0(Single Ended zero)来实现,即将D+和D-同时拉低超过2.5usec。当总线上的设备在它的上游端口接收到这个SE0信号时,将把它当作复位信号处理。

    - 暂停信号: 主机控制器能够让设备进入暂停模式,此时设备将不再响应USB数据传输。当USB总线上的设备检测到总线有超过3msec的空闲状态,将会开始切换到暂停状态,实际上,当总线上超过10msec没有活动时,设备就会切换到暂停状态。

    - 恢复信号: 处于暂停状态的设备,当检测到总线上有一个K信号(对于全速设备是差分0,而对于低速设备是差分1),将恢复正常的工作状态。当主机控制器希望唤醒设备时,它需要发送恢复信号至少20msec以上。

    - EOP信号: EOP信号是先发送持续2比特的SE0信号,接着发送持续1比特的J信号(对于全速设备是差分1,而对于低速设备是差分0)。

    数据的编解码使用NRZI。在NRZI编码里,如果要传输'1',就保持信号电平不变(如果差分线对表示逻辑'1',它会保持在电平上知道下一个时钟周期);另一方面,如果要传输'0',则需要让差分线电平翻转。这种数据编码的一个影响是,当传输一个全是‘1’的字符串时,会导致信号线电平一直保持不变,为防止这种信号电平连续不变的状态出现,需要在NRZI编码规则中引入比特填充,当遇到6个连续的‘1’时,插入一个‘0’;而在接收端解码时,则将此插入的‘0’去掉。

    数据在USB总线上是以一个串行比特流来传输的。无论是主机控制器还是设备端的物理层上,都有一个串行接口引擎SIE,它就负责USB数据传输的串行化和解串行化;同时也负责数据的编解码:进来的数据流按NRZI解码,去除填充的‘0’;而数据出到线路前进行”0‘插入,按NRZI编码;SIE还负责往对外传输的数据流生成CRC,对进来的数据流校验CRC;此外SIE还负责检查总线上的PID,SOP,EOP,RESET以及RESUME信号。

    主机控制器是USB系统中最智能部分,具有独特的作用: 发起所有事物,控制访问,并且是协议处理的引擎。下面列举主机控制器的主要功用:

    - 帧产生,HC负责将USB总线时间分为间隔为1msec的单元,称之为帧。HC周期性地每隔1msec发送一个SOF包,接着可进行OUT或者IN数据传输。SOF里包含当前帧的编号,这个编号由HC维护。

    - 数据处理,HC负责处理OUT或者IN的数据请求

    - 协议引擎,HC负责USB协议层的处理

    - 错误处理,HC负责处理如超时,CRC错的错误信息

    - 远程唤醒

    最新回复(0)