基于USB总线可编程函数发生器的研究与设计(一)
2 USB总线技术
在设计一个USB设备时,只有对USB总线协议体系有一个全面而深入的认识,才能结合不同的传输方式、端点类型、管道模型和设备状态等,根据实际应用的需求选择不同的实现方法,进行方案论证并确定设计方案。本章主要针对USB在开发应用中涉及的协议规范及相关技术进行介绍,并结合本课题的设计需求提出USB的具体应用方法。
2.1 USB系统结构
从开发的角度来看USB系统是构建在硬件系统和软件系统两个平台上的功能层,设备层以及接口层三个层面的集合。更为普遍的系统定义是从应用者角度出发,分为USB链接、USB设备和USB主机。如图1所示。
图1 USB系统结构框图
2.1.1 USB互连
USB链接是指USB设备和主机之间进行链接和通行的规范,主要包括:总线的拓扑结构、层间关系,数据流模式和USB的调度。
在物理上,USB的连接线是一根四芯电缆,其中D+、D-两根线是差分驱动的串行数据信号线,采用NRZI(No Return Zero.Inverse,非归零反相编码)编码方式传输数据。另两根线VBUS、GND是电源线和地线,可为USB设备提供电压+5伏、最大电流500毫安的电源。由于电器特性原因,每根电缆长度不超过5米。通过选择合适的导线长度可以匹配指定的信号传输时的延迟和衰减等特性。所有的设备都有上行的接口,上行和下行的接头是不能互换的,这保证了不会有非法的连接出现。
在逻辑上,采用树形分层拓扑。USB系统通过连接设备分为7个层,其中主机占用最高一层,一个系统中只有一个主机。通常,每一级HUB连接器为一层。在一些复合设备中可能占据多个层次。虽然每一层没有连接设备数量限制,但是由于其寻址协议的规定,连接设备可以只有127个(包含连接设备,如HUB),数据流模式是指USB的控制和数据信息的传输方式,包括控制、批量、中断和同步传输。在调度方面,所有的USB传输都要由USB主机发起,同时设备地址的分配和电源的管理分配等也由主机完成。
2.1.2 USB主机
USB主机的逻辑结构组成包括:USB总线接口、USB主机控制器、USB系统软件集合。其基本结构如图2所示。
图2 USB主机系统组成框图
USB主机和设备一样,都提供同样的总线接口,串行接口引擎(SIE,Serial Interface Engine)。由于主机在USB系统中的特殊性,USB主机上的总线接口还必须具备主机控制器的功能(Host Controller),主机控制器具有一个内集成的集线器(根集线器,Root Hub)提供与USB电缆的连接。USB系统使用主机控制器来管理主机与USB设备的数据传输。USB主机工作还依赖于PC的操作系统所能够提供的各种驱动程序和应用程序支持,主要包括3部分:USB主控制器驱动程序,其负责CPU与USB主机接口芯片的通讯,处理底层USB包的发送与接收;USB核心驱动程序,这部完成操作系统对USB主机控制器的管理,负责解释操作系统对USB主机的各种操作命令;USB用户程序通过操作系统提供给用户的API来完成对USB设备的各种操作。主要完成的功能有:检测USB设备的连接与断开;管理主机与USB设备之间的控制流;管理主机与USB设备之间的数据流;收集设备状态和动作信息;提供能量和电源管理。
2.1.3 USB设备
广义的USB设备指的是USB主机和连接到USB主机的各种设备。通常意义上的设备则包括两类:提供USB连接点的HUB和提供实用功能的功能设备。
根据不同的协议标准,USB设备分为低速设备,全速设备和高速设备。他们通过数据连线上的电平来识别。如图3和图4所示。
图3 高速和全速设备连接方式
图4 低速设备连接方式
在主机看来,它与所有的USB设备的接口都是一致的,即认为一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备、功能单元。USB总线接口是USB设备中的串行接口引擎(SIE);USB逻辑设备被USB系统软件看作是一个端点的集合;功能单元被客户软件看作是一个接口的集合。USB设备作用是接收总线上的所有数据包,丢弃地址不符的数据包,对地址相符的数据包响应,完成所定义的设备功能。
与USB设备的地址相同,在设备内部的USB端点也都有一个唯一地址;不同之处在于设备地址是在设备成功连接主机后由主机分配的,而端点地址则是在器件设计时已经给定的。端点是主机与设备之间通信的目的或来源。控制端点可以双向传输数据,而其它端点只能在单方向传输数据。主机和设备的通信最终作用于设备上的各个端点,它是主机与设备间通信流的一个逻辑终端。这些逻辑终端组合起来完成一个面向主机软件的逻辑设备。
2.2 USB传输协议
2.2.1 位域格式
在USB协议体系中,从位序和字段的定义,到不同类型的事务包格式的描述以及链路层流程控制和事务级别管理等,自底向上地规定了USB数据的格式与传输时序。从主机应用层传入USB系统的数据将被进行事务分配,然后依次组装数据帧,根据目的设备与内容要求的不同,在数据包的字段内填写相关信息,最终以电信号形式送上物理连接线。
在USB中数据信息被发送到总线的时候,首先最低有效位(LSB),然后是下一个最低有效位,最后是最高有效位(MSB)。帧是USB数据传输的基本单位,在一个数据帧中可以由主机插入不同的事务的数据包。数据包按照在其在时序上的不同阶段分为标记包,数据包和应答包。标记包则包含有包标识字段、地址字段、端口字段和循环检验字段。数据包需要将包标识、数据和校验信息包含在内。应答包只包含握手信号的包标识。如图5所示。
图5 数据包格式
不同的包标识用于不同的传输功能,如表3所示。其中SETUP包是一个非常特殊的数据包,它将被用于设备初次连接后的配置和后续的设备管理。其具体格式如表1所示。
表1 SETUP包格式说明
表2 请求类型
表3 PID包描述
2.2.2 传输模式
在USB设备的传输时序上分为四种传输模式:控制传输,批量传输,中断传输和同步传输。不同的传输模式间的差别主要表现在一下特性上:USB规定的数据格式、信息流的方向、数据净荷区的长度限制、总线访问的限制、延时的限制、出错处理。控制传输:用于命令和状态信息的传输。任何一个USB设备都必须支持控制传输并且有相应的端点0。中断传输:主要用于偶然性少量数据延时有限的传输。同步传输:以一个恒定的速率进行数据传输。批量传输:主要用于大量无速率和延时要求的数据传输。
(1)控制传输(Control Transfer)
控制传输最少有2个事务阶段:建立和状态。控制传输可以有选择性地包括建立和状态阶段之间的数据阶段。在建立阶段里,建立事务用于向功能设备的缺省控制端口传输信息。建立事务在格式上类似于输出,但是使用的是建立而不是输出的PID。具体时序如图6所示。
图6 控制传输时序
(2)批量传输(Bulk Transfer)
批量传输是由标记,数据和握手数据包构成的三阶段传输。在某些流控制和挂起条件下,数据阶段被握手信号替换,从而产生了没有数据传输的两时相的事务。当主机准备好了接收批量传输的数据时,它发出输入标记。功能设备端口通过返回数据包,或者如果不能返回数据,则返回NAK或STALL握手作为应答。其具体时序如图7所示。
图7 批量传输时序
(3)同步传输(Isochronous Transfer)
同步传输有标记和数据阶段,而没有握手阶段。主机发出输入或输出标记,然后是设备或主机传送数据的数据阶段。同步传输不支持握手阶段或重试操作。其具体时序如图8所示。
图8 同步传输时序
(4)中断传输(Interrupt Transfer)
中断事务可由输入或输出构成。当收到输入标记,设备便可返回数据。如果端口没有新的中断信息返回,设备在数据时相里返回NAK握手。其具体时序如图9所示。
图9 中断传输时序
2.2.3 通信流程
USB外部设备从插入主机或连接在主机上的HUB的USB接口后,经进行一系列操作直到设备被拔出。在这此期间,USB设备根据其所能能够对主机做出的响应分为若干状态。各个状态及其描述如表4所示。
从USB设备被插入USB接口到USB开始按缺省功能进行工作的过程,即从连接状态到配置状态称为设备的枚举过程。只有成功枚举后,主机才能为设备加载正确的驱动程序使其发挥特定的设备功能。
枚举的详细过程如下:
(1)USB主机检测到USB设备插入后,就会先对设备复位。设备复位后,USB主机就会对地址为O的设备发送获取设备描述符的标准请求。所有的USB设备在总线复位后其地址都为0,这样主机就可以跟那些刚刚插入的设备通过地址0通信。主机在建立阶段发出获取设备描述符的输入请求,设备收到该请求后,在数据阶段将设备描述符返回给主机。主机在成功获取到一个数据包的设备描述符后并且确认没有什么错误后(注意:有些USB设备的端点0大小不足18字节,但至少具有8字节,而标准的设备描述有18字节,在这种情况下,USB设备只能暂时按最大包将部分设备描述符返回,而主机在成功获取到前面一部分描述符后,就不会再请求剩下的设备描述符部分,而是进入设置地址阶段),就会返回一个0长度的确认数据包给设备。
表4 USB设备状态表
(2)主机再对设备复位一下,接下来就会进入到设置地址阶段。这时USB主机发出一个设置地址的请求,并在后面跟着一个0长度的数据输出包。地址包含在建立包中,具体的地址USB主机会负责管理,它会分配一个唯一的地址给新设备。USB设备在收到地址后,返回0长度的应答包,设备在收到0长度应答包的ACK之后,就可以启用新的地址了。这样设备就分配到了唯一的设备地址,以后主机就通过它来进行访问该设备。
(3)主机再次获取设备描述符,这次跟第一次可能有点不一样,这次需要获得完全部的18个字节的设备描述符。当然,如果你的端点0缓冲大于18字节的话,拿就跟第一次的情形一样了。
(4)主机就会获取配置描述符。配置描述符总共为9字节。主机再获取到配置描述符后,根据里面的配置集合总长度,再获取配置集合。配置集合包括配置描述符,接口描述符,断电描符等等。
(5)如果有字符串描述符的话,还要获取字符串描述符。另外HID设备还有HID描述符等。
(6)当设备成功枚举后,主机会根据设备描述符加载相应的驱动程序。在驱动程序中,通过更能需求为设备发送配置请求或者按照默认配置进行工作。至此,USB设备就完成了功能的启动,也就是建立了一个从主机应用程序到固件功能模块的数据通道。
2.3 USB设备描述
2.3.1 设备架构
为了正确描述USB设备的特性,USB提出了设备架构的概念。设备架构认为USB设备是由一些配置、接口和端点组成的,即一个设备可以含有一个或多个配置,在每个配置中含有一个或多个接口,在每个接口中可含有若干个端点。其中,配置和接口是对USB功能的抽象,实际的数据传输还有端点来完成的。
(1)配置:USB设备在正常被使用以前,必须被配置,由主机负责配置设备。主机一般会从USB设备获取配置信息后再去定此设备有哪些功能。作为被配置操作的一部分,主机会读取配置数量,设置设备的配置值。如果必要的话会选择合适的接口的备选设置。
(2)接口:接口是一组端点集合,它们代表了设备向主机提供的单一功能和特性。在设备的某一特定配置中,可以包含一个或多个接口。
(3)设置:不同的设置会重定义相关端点的数目或特性。设备通过支持接口请求来汇报及选择指定的接口的设备选设置。
一个USB设备有一个或多个接口。而每个接口又有0个或多个端点。在一个配置下,一个端点不会在接口之间共享,除非被同一个接口的不同设置使用。不同配置端点不受此限制。
2.3.2 设备描述符
为了能够让主机识别和驱动不同种类的功能的设备,在USB的设备中都要存储着设备的相关描述,并通过标准请求向主机返回。这些描述包括:设备描述符、配置描述符、接口描述符、断点描述符和字符串描述符。
(1)设备描述符
设备描述符给出了USB设备的一般信息。这包括对设备及所有设备配置起全程作用的信息。一个USB设备只能有一个设备描述符。所有USB设备必须支持的缺省控制通道的最大包长在设备描述符中得到了说明。主要信息还有协议版本、设备制造商、设备支持的配置数目等。
(2)配置描述符
配置描述符给出了一个设备配置的信息。描述符给出了此配置下的接口数,每个接口可能独立工作。比如,一个ISDN设备可能配置有两个接口,每个都提供64KB/S的有独立数据源与数据接收者的双向通道;在另一个配置下ISDN可能表现为单个接口,将两个通道合成一个128KB/S的双向通道。当主机发出配置描述符请求时,所有相关接口与端点的描述符都被返回。
(3)接口描述符
接口描述符在一个配置内给出一个接口的信息。端点的描述符会跟在接口描述符后被返回。接口描述符总是作为配置描述符的一部分被返回。但接口描述不可直接用Set Description()和Get Descriptor()存取。SetInterface 0与GetInterface()用来选择与返回选择了的接口设置。一个接口描述符的节点个数不把结点0计在内。
(4)端点描述符
每个接口使用的结点都有自己的描述符,此描述符用来决定每个端点的带宽需求和输入输出方向。每个端点描述符总是作为配置描述的一部分返回的,结点0无描述符。
(5)字串描述符
字串描述符是可有可无的。设备无字串描述符,所有描述符中字串描述符的索引都必须为0。字串描述符使用的是UNICODE编码。
2.4 USB应用设计
USB最初面向的是诸如调制解调器、扫描仪、键盘、个人数字助理、鼠标、操纵杆等低速设备。通过不断的改进,USB可以实现更高速的数据传输,适用的范围也逐步扩大。尤其是USB 2.0的成功普及后使PC对其达到100%的支持,外置大容量存储器、数码相机、视频系统、网络设备等各式各样的外部设备开始应用USB总线。综合分析这些应用可以发现,USB总线的应用通常采用有以下三种方式:
(1)简单扩展。相对于设备核心功能而言,此方式中USB总线通常利用其即插即用或总线供电等便捷性作为设备功能扩展之用,并非设备必须模块。如通过USB供电的笔记本散热器和数码充电器等。
(2)互联接口。这种方式主要利用USB的高速数据传输功能,将设备的软硬部分或者各个功能模块进行互联。例如USB接口的鼠标和移动硬盘。此时,USB作为应用的内部总线存在,具有唯一、不可替代性;离开USB后它成为了一个不完整的系统,无法正常发挥功能。
(3)增强功能。这是一种介于前两者之间的应用方式,可以自由的在应用设备和功能模块之间切换和工作。在没有USB连接时设备可以正常工作,完成基本的应用功能;当接入USB系统后,设备具有了扩展的功能或者更好的性能。例如,手机中的USB应用。在作为一个独立的通信工具应用同时可以通过USB接入扩展成为PC扬声器或者IP电话等。
由于本课题的设计目标是便携式虚拟仪器设备,它应该是一个基于PC又不依赖于PC的设备。所以,采用第三种应用方式。确定应用方式后,结合虚拟仪器的基本结构便可得到基于USB总线的函数发生器的组成框图。如图10所示。
图10 系统基本组成框图
根据可编程函数发生器的功能与特性描述,设计相应设备、配置、接口、端点和字符串描述。首先,作为一个新型测量设备,不采用USB体系中的常规设备分类,定义为厂商自定义类型。其次,出于便携适用性考虑,设备开发遵循USB 2.0协议规范,接口默认配置为高速设备,同时向下兼容全速接口,提供2种设备配置。然后,作为单一功能应用的信号发生器仅需要配置1种接口。端点配置方面,可以采用1个批量传输的输入端点完成底层波形数据的载入;采用1个控制传输的输出端点完成参数的在线设置功能和设备的重配置特性。考虑到USB总线的最大负载功率有限(总线电压恒定5VDC,最大供电电流500mA),供电特性采用设备供电和总线供电的复合方式。综合上述分析,一个USB信号发生器的设备描述已经初步确定。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/