一种高速USB设备控制器IP核的设计与实现
计中提出"在保证传输正确的基础上尽量减少中断" 的设计原则。 USB2.0 规范中列出了种类繁多的错误产生及其相应的检测、恢复方法。笔者认为,USB 设备控制器设计者没有必要对传输过程中发生的任何错误都向外部MCU 提出中断,对规范中部分类型的错误,设备控制器内部应有处理及恢复机制。例如超时的发生有几种情形:正确接受完毕来自HOST 的非同步数据包后,必须及时返回一个成功接收握手;HOST发出IN 令牌包接收到数据以后, 同样必须及时地返回握手包,否则超时。对后者,没有必要马上向MCU 产生中断, 下一个IN 令牌到来时自动重传上次数据, 且最多尝试3 次。若问题依旧, 再中断MCU,说明设备上游的线路可能出了故障。另一个就是Toggle 同步机制, 出错也完全没有必要通知MCU,可在协议实现的内部来处理。值得一提的是,控制传输比较特殊:在控制传输的建立阶段,SETUP令牌包后面的数据包的PID 一定是DATA0,然后在这个基础上进行触发切换。在状态阶段的数据包PID 肯定是DATA1。否则,在FPGA 验证中,即使触发位出错,主机还是会返回ACK,造成数据已正常接收的假象,而实际上主机已摒弃了数据。 4 系统仿真及FPGA验证 在设计的编码过程中,先分别对各模块进行了功能仿真,子模块仿真正确后对整个模块进行了整体功能仿真,然后综合代码、设置引脚、自动布局布线后下载到FPGA 内。本设计FPGA 器件采用Altera 的ACEX1K EP1K100QC208-3。USB 电缆的一端接在测试板的transceiver 上, 另一端接至PC机的USB 接口上,如果SIE 逻辑功能正确,则Windows会识别出一个新的USB 设备, 完成了PnP 过程。为了功能验证和应用测试,额外编写了一个模块,用于USB 设备枚举时,模拟MCU 的部分功能。 Windows 在对USB 设备进行枚举时,按如下顺序进行: (1) 主机发出一个复位信号; (2) 初次得到设备描述符的控制传输; (3) 给设备分配地址。数据包DATA0 的第三个Byte 就是分配的地址; (4) 以新的地址获取设备描述符; (5) 初次获取设备配置描述符,以确定配置描述符+接口描述符+端点描述符的长度,这次主机只获取9 个字节的配置描述符。 (6) 获取字符串描述符(可能没有),根据设备描述符中是否有STRING 索引而定; (7) 获取完整的设备配置描述符,一次性获取相应长度的上述三个描述符。 若以上步骤都正确, 则主机发现新的USB 设备,要为该设备安装驱动程序。然后利用Windriver可以在Windows 环境看到这个USB 设备以及相关端点信息等资源。在该驱动程序的控制台上,可以对USB 设备控制器的管道进行读写操作,并且报告操作结果,以验证核的功能是否正确。 5 结束语 系统逻辑功能仿真、综合后门级网表(gate levelnetlist) 功能仿真以及最后的FPGA 验证都表明:本设计中,双口RAM 配置、异步时钟域之间读写时的"超前送数策略"以及"尽可能减少错误中断产生"原则,简化了编码实现以及外部MCU 编程,在实现高速USB 设备控制器的设计过程中是有效的、切实可行的。该方案实现的USB2.0 设备控制器IP 核便于修改、易于实现,既可以进一步完成ASIC 设计,也可作为一个功能模块嵌入到SOC 中。 参考文献: [1].bulkdatasheethttp://www.dzsc.com/datasheet/bulk_2523104.html.
[2].ISP1501 datasheethttp://www.dzsc.com/datasheet/ISP1501+_1083529.html.
- STM32F407高速USB口速度测试(11-23)
- 为什么高速USB并不一定表示手机拥有高速性能(03-14)
- 高速USB IP核的设计与开发(08-31)
- PCI总线从设备控制器的设计与实现(11-14)
- μC/GUI在基于NiosⅡ嵌入式开发平台的环境智能监控系统中的移植与应用(01-14)
- 基于Zynq的OLED驱动设计(10-04)