一款集成HUB的USB设备控制器的设计
UB的上行端口始终是一个全速连接,但是它的下行端口可能是全速连接也可能是低速连接。低速数据经过上行端口时,虽然它的速率是低速的,但是它的极性却是全速的。全速数据的极性与低速数据的极性是相反的,所以转发低速数据时需要先对数据的极性进行转换。HUB在转发数据的时候需要遵循以下原则:来自上行端口的低速数据广播给所有处于允许状态的下行设备(包括全速设备和低速设备);来自上行端口的全速数据转发给所有处于允许状态的全速下行设备。
4 固件设计
本文提出的USB设备控制器是一个软硬件结合的系统,即整个系统由MCU、SIE、转发器等硬件和运行于MCU中的固件组成。
系统的设计原则是:凡是固件能够完成的任务尽量由固件来实现,硬件的主要工作是对协议层的解析,解析完之后会设置某些控制寄存器,有时会产生中断,固件通过查询这些寄存器执行相应的操作。
为了验证整个系统,通过编写固件实现集成HUB的USB键盘的功能。
5 对于异步信号的处理
USB属于异步总线,本地时钟和主机时钟是由两个不同的晶振产生的,所以SIE必须采用适当的方法实现位同步。一个典型的位同步方法就是采用一种特定结构的数字锁相环[1]。其原理是:分别用本地48MHz时钟的正负沿采样接收到的12MHz的位接收时钟(它的有效沿位于12MHz数据流每个比特位的中间),然后用新产生的时钟去采样12MHz的数据流从而实现位同步。
整个系统中采用的是异步复位。异步复位的好处是可以保证系统在初始状态时处于已知的状态,对于有三态总线的系统来说,这是非常重要的[2]。异步复位的处理非常重要,关系到系统的稳定性。对于异步复位信号来说,重要的不是什么时候复位而是什么时候复位结束,异步复位有两个关键的参数恢复时间和迁移时间,如图6所示[3]。如果以上两个参数不满足,就会产生亚稳态[4]。为了解决这个问题,设计了如图7所示复位电路。
在该电路中,复位的产生是不受时钟控制的,但复位结束是受时钟控制的。之所以要用两个极联的触发器,是为了避免第一级触发器有可能产生的亚稳态传给整个芯片的复位信号reset。在这个电路中不存在恢复时间的问题,因为复位结束肯定在时钟沿的后面。迁移时间的问题,因为复位结束肯定在时钟沿的后面。迁移时间的问题也可以解决,只要Tclk_q(clock to Q)+Tpd(复位信号的传输延时)>Trem(触发器的迁移时间)即可。对于上电复位来说还要进行进一步的处理,要保证复位时间足够长,因为电源稳定需要一定的时间。
6 设备的低功耗设计
对于USB设备来说,当总线上超过3ms没有总线活动时,设备就要自动进入休眠状态,此时从总线上获得的电流不能超过500μA[5]。为了满足此要求,设计了如图8所示的设备唤醒和休眠电路。
图10
当设备需要休眠时,给出一个sleep信号控制晶体振荡器(OSC)停止振荡,整个设备进入节电模式。对于CMOS电路来说,时钟停止振荡以后所消耗的功率极小,当有总线活动时,收发器会产生总线活动标志信号wakeup,wakeup信号首先控制振荡器重新开始振荡,然后和clkDelay信号一块控制设备的时钟(Clock),晶振稳定后则输出时钟信号。复位时不对时钟信号进行控制。
7 FPGA实现和系统验证
系统进行实现和验证时,串行接口引擎和转发器采用Verilog进行RTL描述,然后采用Xilinx公司的XC2S200PQ208 FPGA实现。缓冲区和RAM由FPGA内部集成的RAM实现,收发器采用Philips公司的PDIUSBP11A,MCU采用MICETEK公司的65C02仿真器。
整个系统经验证后,工作正常,内置键盘可以正常工作,在下行端口插入低速USB设备和全速USB设备都可以工作。图9是用立肯科技公司的USBMobile测试仪对FPGA系统进行测试的结果的一部分。
集成HUBUSB设备控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)