APP下载

无MCU的USB2.0设备控制器IP设计与验证

2013-02-21袁志坚

网络安全与数据管理 2013年10期
关键词:描述符固件数据包

袁志坚, 黄 鲁, 徐 骏

(1.中国科学技术大学 电子科学与技术系 集成电路实验室,安徽 合肥 230027;2.中国科学技术大学 信息科学实验中心,安徽 合肥 230027)

通用串行总线USB(Universal Serial Bus)是现今最为流行的计算机接口,它是一种快速、双向、同步、可动态监测的串行接口[1]。目前大多数的USB设计都是经过系统集成,采用现成的商用USB芯片进行开发,并没有涉及到IP(Intellectual Property)核的设计与开发。在SoC(System on Chip)开发中可以利用已有的IP核开发成果,缩短系统芯片的设计周期,提高效率。本文通过分析USB2.0协议,实现了一个无需外置MCU(Micro Control Unit)的USB2.0设备控制器IP核,并进行了 FPGA验证,可用于SoC的集成中。

1 USB2.0设备控制器系统设计

目前USB2.0设备控制器广泛使用的系统架构是串行接口引擎SIE(Serial Interface Engine)+MCU模式,SIE负责解释USB协议层的动作[2]。一方面,SIE模块将主机发送的信息解释成后端功能设备能够识别的信息;另一方面,将功能模块相关数据按照符合USB协议的格式发送给主机。这种传统的USB设备控制器设计核心是针对事务(Transaction)和信息包(Packet)的处理。对于关键的控制传输,则需要外置单片机和固件的辅助,因为这种传统的USB设备控制器不能独立完成USB与主机通信过程中最核心的枚举过程。

本文使用硬件电路代替传统单片机实现MCU和固件的功能。整体框架如图1所示,图中实心箭头代表应用与主机之间的数据流。

采用Top-to-Down(自顶向下)的设计结构将 USB设备控制器划分为以下主要功能模块:

(1)Init模块:实现 UTMI协议 (USB 2.0 Transceriver Macrocell Interface(UTMI)Specification)的相关细节,主要用于控制总线挂起/恢复模式与速度模式的切换。

(2)Packet模块:对接收到的USB格式的信息包进行处理,提取其中的数据,检验CRC;对发送的数据进行封装,添加CRC检验位。

(3)Transaction模块:对USB定义的基本事务(transaction)类型(如 IN、OUT、SETUP和 PING 等)按照协议规范处理。以上模块实现SIE的功能,其事务处理流程如图2所示。

图1 USB2.0设备控制器系统框架

(4)Serial模块:例化调用其他模块,同时对传输过程中的错误进行处理。

(5)Descriptor ROM和Control模块:完成枚举过程中的控制传输。

2 硬件电路代替MCU和固件

2.1 方案分析

微控制器的主要功能是负责执行固件框架程序,协助完成 USB的控制传输。这一部分可以用单片机或者硬件电路实现,目前常用单片机实现,优点是设计简单、灵活;缺点是单片机的速度比较慢,远远低于硬件电路。

使用硬件电路实现虽然设计复杂而且灵活度不如单片机,但它的优点是:(1)降低协议开销,从而得到更快的传输速度;(2)降低用户使用开发周期,因为使用硬件电路实现MCU功能,省去了后期固件和驱动程序的开发;(3)不使用单独的单片机,显著地降低了成本。

2.2 MCU和固件功能模拟

本设计中Descriptor ROM模块用于存储控制传输协议中需要用到的各种描述符,模拟枚举过程中固件的功能。例如18 B的设备描述符定义如下:

Control模块模拟MCU的行为,根据控制传输时主机请求的类型,在Descriptor ROM中选择相应的描述符返回给主机。为了精简工作流程,设计中按照“在保证传输正确的基础上尽量减少中断”的设计原则[3],实现了设备控制器最大限度精简指令。根据USB2.0规定的标准设备请求的结构,Control模块的主要工作流程图3所示。

Control模块代码的结构主体是一个三重状态机。图3是Control模块简化流程示意图,没有标出差错处理机制和其他细节。控制传输中,主机发送数据域长度为8 B的请求,当Transaction模块检测到Setup类型传输时,通知Control模块,Control模块检测识别标准USB请求的8 B数据,进行相应操作(如 SetAddress、GetDesciriptor和 Get-Configuration)。按照主机发送8 B请求的顺序,核心处理步骤如下:

(1)检测 bmRequestType字节,bmRequestType的 D6~5位为00代表USB协议定义的标准请求(bRequest)。(2)检查bRequest字节,USB支持11类的标准请求,此步骤可以确定请求的描述符类型。(3)检查wValue域(2 B),低字节表示索引号,用来选择同一种描述符(例如字符串描述符和配置描述符)中具体某个描述符;高字节表示描述符的类型编号。(4)检查wIndex域,在获取字符串描述符时表示字符串的语言ID号。(5)最后检查wLength,表示数据过程(如果有时)所需要传输的字节数。

当 Endpoint(端点)寄存器为“0000”(表示控制端点)且内部 Dscbusy寄存器为‘0’(控制传输,但请求的不是描述符)时,选择发送给主机的数据是代表当前的Device(设备)、Endpoint和 Interface(接口)状态的数据; 当 Endpoint(端点)寄存器为“0000”(表示控制端点)且 Dscbusy 寄存器为‘1’时,选择wValue确定的描述符发送给主机;其他情况发送的是来自应用系统(Application)的数据。

2.3 错误检测和处理的改进

USB规范中列出了种类繁多的错误的产生及其相应的检测恢复方法。对于传统的SIE+MCU系统,传输过程中发生的任何错误都向外部MCU提出中断,固件对规范中的错误类型应有处理及恢复机制[4]。例如Host发出 IN令牌包接收到数据以后,必须及时地返回握手包,否则超时。超时后,MCU马上产生中断并选择在下一个IN令牌包来时重传上一次数据。这种处理的缺点是中断频繁、效率比较低。本设计中没有使用MCU,对错误的检测和处理均是在设备控制器内部进行。由于省去了中断请求与处理的延时,对传输过程中发生的错误能够得到高效的处理。例如对上述所提到的错误,Serial选择在下一个IN令牌到来时自动重传上一次数据,且最多尝试3次,如果问题依旧存在,作为线路故障处理。这种处理方法能够充分发挥硬件电路的高速优势。

3 系统仿真与FPGA验证

在验证过程中,利用事务模型建立USB虚拟主机和应用模型完成系统功能仿真,然后综合代码、设置引脚、自动布局布线后下载到FPGA内验证。本文选用Cypress公司的CY7C68000芯片作为前端的收发器(PHY)和Xilinx公司的Spartan-3E(XC3S500E-4PQ208C)芯片制作的 FPGA开发板作为验证USB设备控制器IP核的平台。XC3S500E系统门数达50万,可提供高达340 MHz的内部性能。

枚举过程属于控制传输,一般分为3个阶段,以Get_descriptor为例,过程如下:

(1)建立阶段:如图4所示,USB主机首先发送来一个SETUP令牌包,PID为0x2d,设备地址为0x00,端点0x00(控制端点)。后面紧跟一个DATA0的数据包,PID为0xc3, 后 面 的 数 据 0x80、0x06、0x00、0x01、0x00、0x00、0x12、0x00表示这是一个Get_Descriptor标准设备请求的数据包。其中PHY_TXVALID、PHY_TXREADY、PHY_DATAOUT是符合UTMI定义数据发送接口信号,PHY_RXVALID、PHY_RXACTIVE、PHY_DATAIN 是 符 合UTMI规范的数据接收接口信号。

(2)数据阶段:主机发出一个IN包,如图5所示,PID为0x69,设备收到 IN包后用数据包DATA1(PID为 0x4b)返回自己的设备描述符,与前面定义的18 B设备描述符数据一致。主机收到正确的数据包后返回一个ACK握手包(PID为0xd2),表示接收正确。

(3)状态阶段:主机发出 OUT包,但与数据阶段不同,状态阶段所发数据包内容为空。设备成功收到数据包后应答ACK握手包。

本文实现了一种有别于传统的MCU+SIE方案的USB2.0设备控制器IP核设计。使用硬件电路代替单片机实现MCU和固件功能,显著地降低了系统硬件规模和实现成本。同时简化了错误检测和处理的流程,有利于进一步提高USB传输速度。FPGA验证表明,该方案实现的USB2.0设备控制器IP核有效可行,可以进一步完成ASIC设计,使之作为独立模块添加到SoC系统中。

[1]USB Implementers Forum,Inc.Universal serial bus specification(Rev 2.0)[EB/OL].(2002-04-xx)[2013-01-24].http://www.usb.org.

[2]陈亮,袁志坚,史大龙,等.内嵌 8051的 USB2.0设备控制器 IP 设计[J].微型机与应用,2012,31(17):28-30.

[3][美]AXELSON J.USB开发大全[M].李鸿鹏,郑瑞霞,陈香凝,等译.北京:人民邮电出版社,2011.

[4]黄卫华,朱向东,沈绪榜.一种高速USB设备控制器IP核的设计与实现[J].微电子学与计算机,2005,22(5):106-109.

猜你喜欢

描述符固件数据包
基于结构信息的异源遥感图像局部特征描述符研究
SmartSniff
Linux单线程并发服务器探索
利用CNN的无人机遥感影像特征描述符学习
基于固件的远程身份认证
提取ROM固件中的APP
基于Libpcap的网络数据包捕获器的设计与实现
一种通过USB接口的可靠固件升级技术
奥林巴斯XZ—2新固件升级
视觉注意的数据包优先级排序策略研究