为判断设备应该工作在何种状态,通过检测USB总线上的状态及其持续时间来确定。因此程序中设计使用了两个计数器timer1和timer2,通过使用cleartimer1和cleartimer2两个变量来灵活控制两个计数器的计数,进而实现精确定时。图2为工作模式控制电路的状态转换图,主要实现4个主要功能:高速握手(highspeedhandshake、设备挂起(suspend)、挂起恢复(resume)、复位检测。
1高速握手
USB2.0设备连接到主机后,主机给设备供电并发送复位信号复位设备,之后设备进入全速模式工作,由图2所示在fullspeed状态检测到SE0(linestate[1:0]=00)持续2.5μs后,高速握手开始,设备控制器进入sendchirp状态,设备向主机发送一个持续时间大于1ms的K(linestate[1:0]=01)信号以检测主机是否支持高速模式。设备进入recvchirp状态并准备接收来自主机的JK序列。主机支持高速并检测到K之后,向设备发送JKJKJK序列以检测设备是否支持高速模式。设备控制器在recvchirp状态成功检测到3对JK序列后高速握手成功,进入到highspeed模式工作;否则,设备以全速模式工作。
2设备挂起
根据USB2.0协议,为了减小功耗,当总线3ms没有动作时,设备需进入挂起(suspend)状态,设备在挂起状态只能消耗小于500μA的电流,并且进入挂起后设备需要保留原来的状态。(1)全速模式挂起:检测到总线状态为SE0达到3ms,设备从fullspeed状态进入suspend状态。(2)高速模式挂起:设备工作在高速模式时,由于高速复位和高速挂起都是发送一个大于3ms的总线空闲信号,因此设备需要区分这两个事件。如图2,处于highspeed状态时,设备检测到总线空闲(SE0)3ms,进入hsrevert状态。之后检测总线状态不为SE0,此后设备挂起。假如在hsrevert状态后还检测到SE0持续100μs,则判断为高速复位,clrtimer2=1。设备状态转换到sendchirp状态,开始设备的高速握手。
3挂起恢复
设备处于挂起状态时,在它的上行口接收到任何非空闲信号时可以使设备恢复工作[5]。(1)全速挂起恢复:设备从挂起状态起检测到的不是持续的J,则恢复到fullspeed状态,以全速模式工作。(2)高速挂起恢复:挂起时保留着高速连接状态,highspeed=1且hssupport=1,挂起恢复需要判断是由总线动作引起还是系统复位引起。设备中测到总线状态为SE0,说明是由复位引起的挂起恢复,设备状态进入sus-preset,然后检测到SE0持续2.5μs后,进入高速握手过程sendchirp状态;反之,检测到挂起恢复信号K,则设备从挂起恢复到高速模式。
4复位检测
集线器通过在端口驱动一个SE0状态向所连接的USB设备发出复位信号。复位操作可以通过USB系统软件驱动集线器端口发出复位信号,也可以在设备端RE-SET信号置1,进行硬件复位。(1)设备是从挂起状态复位:在suspend状态检测到SE0时,设备跳转到suspreset状态,检测总线状态为超过2.5μs的SE0后设备启动高速握手检测,即进入sendchirp状态。(2)设备从非挂起的全速状态复位:设备在检测到2.5μs<T<3.0ms的SE0状态后启动高速握手检测。硬件纵横HardwareTechnique(3)设备从非挂起的高速状态复位:设备在high-speed状态检测到总线上持续时间3.0ms的SE0后,设备状态转换到hsrevert,以移除高速终端并重连D+的上拉电阻,此时为全速连接状态;之后设备需要在100μs<T<875μs的时间内采样总线状态,检测到SE0持续2.5μs后,进入sendchirp状态,开始高速握手过程。
5仿真及验证
编写Testbench,在ModelSim中对设计的SIE进行仿真验证,结果符合USB2.0协议规范要求。在此简述工作模式控制电路中关于高速握手的仿真过程和结果。当设备连接到集线器后,进入init状态,通过timer2计数到OxFFFF(即17ms),使设备跳转fullspeed状态。在fullspeed状态,timer2计数到OxA6(即2.5μs),设备进入到高速握手的sendchirp阶段。Sendchirp代码如下,对应仿真结果图3所示。支持高速传输的主机接收到K后,发送3对KJ序列检测设备是否支持高速传输。设备进入recvchirp状态,判断是否接收到符合要求的3对JK序列。Recvchirp状态对应代码如下:检测到linestate为持续时间达到2.5μs(timer1计数到OxA6)10或01时,判断为检测到J或Kchirp。每检测到一个K或J,赋clrtimer1=1来清零timer1,同时chirpc-nt加1。设备支持高速传输模式,且成功检测到KJKJKJ,同时chirpcnt计数到6,则设备高速握手成功,进入高速工作模式。假如在chirp检测等待时间(1.1ms)内没有等到检测到3对KJ信号,则握手失败,设备以全速模式工作。高速模式下的部分发送波形如图4所示。本文先介绍了USB2.0设备控制器总体架构及各模块功能,之后详细分析了USB2.0设备控制器工作模式控制电路需要实现的功能及设计细节,并在系统中进行了仿真验证。结果表明,所设计的工作模式控制电路功能正确,能配合其他模块一起进行USB设备开发。
作者:刘清明 方毅 王永 中国科学技术大学 中国科学技术大学信息科学实验中心