




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨理工大学学士学位论文usb数据采集器的设计摘要随着工业现场数据的复杂性,数据的采集正在向智能化、网络化和集成化方向发展,传统的数据采集方式包括:安装数据采集板卡、并口采集数据、串口采集数据等。其中常用的是安装数据采集板卡的方法,由于其传输速度慢、安装麻烦、抗干扰能力弱等诸多问题已难以适应如今数据采集的要求。通用串行总线usb具有传输速度快、支持热插拔及即插即用等优点,设计usb数据采集器时充分利用usb的上述优点,有效解决了传统高速数据采集器的安装麻烦,价格昂贵等缺陷,具有广泛的应用价值。现阶段操作系统全部支持usb标准,usb的应用日渐成熟,目前已经发展为usb3.0版本。本文针对高速数据采集系统的需要,设计了基于usb2.0的数据采集系统。首先介绍课题的背景及意义,其次进行了usb简介及主控芯片简介,然后给出基于单片机的数据采集器的硬件设计和软件设计,硬件部分本系统选用了cypress公司的ez-usb fx2系列中的cy7c68013,ad7862作为模数转换芯片,at89c5131负责接收由ad转换得到的数字量数据,并通过其内置的usb控制器实现单片机和pc机之间的usb数据通信。 本系统的软件设计包括固件程序、usb驱动程序和应用程序三部分。其中,固件程序利用keil c软件开发,而usb驱动程序则通过driverworks自动生成并适当修改而成;通过固件程序和usb驱动程序的设计使得单片机可作为usb设备被pc识别,从而可以将采集的数据通过usb数据线传输给pc。pc上的应用程序利用vc+开发,并使用mfc设计了pc机上的usb数据采集界面,可实现采集数据的波形图显示功能。把数据采集器与usb相结合,充分发挥usb的优势,使得数据采集器应用更加便捷高效。关键词usb;单片机;数据采集abstract.keywords不要删除行尾的分节符,此行不会被打印- ii -目录摘要iabstractii第1章 绪论51.1 课题背景及研究意义51.2 课题研究内容6第2章 usb简介82.1usb规范产生背景及主要内容82.2usb线缆和信号102.3usb传输体系简介122.3.1usb主机和设备132.3.2 usb设备的端点、接口和配置152.3.3usb传输类型152.3.4管道(pipe)152.3.5usb通讯流模型152.4usb接口通信协议 162.4.1数据域格式182.4.2包格式182.4.3事务格式(packet format)182.4.4标准usb描述符定义(standard descriptor definition )182.4.5 usb设备请求(device request)182.4.6设备状态图和总线枚举过程182.5系统配置过程.182.6本章小结 16第3章 系统硬件设计193.1 系统硬件设计方案203.2微控制器及usb控制器接口电路的设计203.2.1 at89c5131封装及引脚说明203.2.2 at89c5131内置usb控制器及其接口电路213.3 a/d转换模块223.3.1 a/d转换器223.3.2 a/d转换器接口电路223.4外接存储器接口电路223.4.1外接存储器223.4.2外接存储器接口电路223.4.3系统外围电路223.5本章小结22第4章 系统软件实现 244.1 1固件程序设计244.2 usb驱动程序254.3 应用程304.4本章小结31结论38致谢38参考文献39附录a41附录b50千万不要删除行尾的分节符,此行不会被打印。在目录上点右键“更新域”,然后“更新整个目录”。打印前,不要忘记把上面“abstract”这一行后加一空行- iv -第1章 绪论1.1 课题背景及研究意义在工业生产和科学研究等行业中,常常需要利用pc 或工控机对各种数据进行采集处理,如液位、温度和压力等。数据采集器主要完成数据信息的采集、a/d 转换,然后通过pc 接口总线将处理后的数据送入计算机作进一步处理。目前,以这样的系统为核心的设备在国内外得到了广泛的应用,比如工业控制中现场数据的采集设备;生物医学方面的电生理信号的采集系统;机场、商场等人流量大或比较重要的场所安装的监控设备;家庭影院、视频会议、可视电话等多媒体设备。数据采集卡同计算机外设一样,与主机的通讯接口一般是基于pc上的rs-232 总线、isa总线、pci总线或epp/ecp等。pci总线虽然具有较高的传输速度(132mbps),并支持“即插即用”功能,但其缺点是插拔麻烦,而且由于pc扩展槽一般为 56 个,因此最多也只能有 56 个pci数据采集卡同时用在一台微机上;并且pci插槽占用主板相当大的空间,这也不利于微机系统的小型化,对于isa总线也存在同样的问题。rs232c串行总线虽然连结简单,但其传输速度慢(只有 56kbps),并且主机的串口数目也十分有限。总之,采用这些传统接口的数据采集设备存在以下缺陷:安装麻烦;价格昂贵;受计算机插槽数量、地址、中断资源的限制,可扩展性差;在一些电磁干扰性强的测试现场,可能无法专门对其作电磁屏蔽,从而导致采集的数据失真。随着通用串行总线usb的出现,很好的解决了以上这些问题。采用usb总线接口的采集器具备了如下优点:1. 设备安装和配置容易。usb 设备支持即插即用和热插拔,安装usb 备不必再打开机箱,加减已安装过的设备,完全不用关闭计算机。2. 接口数目多。每个 usb 主机通过usb 集线器,可以同时挂接最多127个外围设备,有效地解决了多点数据采集系统i/o 口不够用的问题。3. 数据传输速度比一般的串行总线(如rs232,rs485 等)快,usb1.1 标准的接口最快可以达到12mbps,可以满足绝大多数多点数据采集系统的要求。在pc 主机和采集系统都具备支持usb2.0 标准的接口芯片时,最快可以达到480mbps,可以满足高速数据采集系统的要求,而最新的usb3.0传输速率理论上能达到4.8gbps。4. 设备能够直接由 usb 总线进行供电。为了优化数据采集设备和提高数据采集速率,研究设计一种基于usb接口技术的数据采集器可具有十分重要的实用价值。1.2 课题研究内容本课题利用usb总线传输速度快,支持热插拔及即插即用的特点,通过usb总线完成数据采集系统与pc的通信,课题的研究内容如下:(1)设计系统硬件电路:选择合适的微控制器及usb控制器芯片,使采集的数据通过ad转换变为数字量进入微控制器,再通过usb总线将数据送到上位机(pc)中进行处理,从而完成usb数据采集系统的硬件实现。(2)系统固件程序的开发:通过设计基于usb接口的设备固件程序,完成usb控制器的初始化和usb设备枚举,同时实现数据的采集和传输。(3)usb设备驱动程序设计:通过合适的usb驱动程序开发工具设计usb设备驱动程序,完成usb设备与主机的通信。(4)主机应用程序的设计:通过设计用户界面应用程序,实现数据波形图在pc界面上的显示。(5)对系统数据采集功能进行测试,并提出进一步的改进方案。第2章 usb简介 2.1 usb规范产生的背景及其主要内容传统的计算机外部设备一般都是使用并口(parallelport)和串口(serialport)与计算机相连。这两种端口在计算机上使用了很多年,物理层的协议己经相当成熟,但却己经无法满足目前计算机设备不断提高的速度和使用要求。串口使用的协议是rs-232串行通讯标准,适用于设备之间的通讯距离不大于15m,传输速度最大为20kb/s的场合。它的优点主要是开发方便,几乎所有的硬件开发人员都能很容易地使用串口实现设备与计算机间的通讯。并口使用的是并行通讯协议,在开发和使用上都不是很方便,但它的速度较串口有很大的提高,要达到每秒1m字节以上的传输速度并不困难。这些传统的端口和总线协议都比较简单,一般只对物理层做了一些定义和约束,并没有涉及到设备和计算机的具体通讯行为和网络模型。这使得开发者在开发时有了很大的灵活性,但也带来了兼容性的问题。以上所提到的种种因素,促使硬件开发商不得不推出了一些新型的总线协议,以适应当前计算机和设备的需要。从20世纪90年代以来,有很多串行总线问世,其中最成功之一的便是以intel为首的七家公司于1994年推出的usb协议。usb(universal serial bus)规范的前身是access.bus规范,后由intel为首的七家公司于1994年11月共同提出第一个usb规范,目的是为了简化计算机和外设的连接,提高计算机和外设传递信息的速度。为了普及和使用这一技术,1995年由usb-if论坛对其进行了标准化,并制订出相应的技术规范usb1.0,1998年9月推出的usb1.l规范(usb1.0和usb1.1统称usb1.x),对usb1.0存在的问题做了全面的修订,并且增加了一个新的传输类型中断传输。但是由于在win98以前的操作系统均不支持usb,使得它的推广受到影响,支持usb的外设也非常少。自从win98操作系统于1998年7月推出以后,这一技术才真正进入实用阶段,支持usb的外设也日益增多,像usb键盘、usb鼠标、usb相机、usbcd-rom等等。由于usb1.x的最高数据传输率为12mbps,阻碍了它的进一步发展,为了提高usb数据传输速度,增强计算机和音、视频设备传送信息的实时性,usb-if于2000年4月发表了usb2.0,在原来usb1.1的基础上增加了高速模式,数据传输率可达到480mbps,并向下兼容usb1.1。由intel、微软、惠普、德州仪器、nec、st-nxp等业界巨头组成的usb 3.0 promoter group于2008年11月公开发布制定的新一代usb 3.0标准,最大传输带宽高达5.0gbps,同时在使用a型的接口时向下兼容。usb 2.0基于半双工二线制总线,只能提供单向数据流传输,而usb 3.0采用了对偶单纯形四线制差分信号线,故而支持双向并发数据流传输,这也是新规范速度猛增的关键原因。除此之外,usb 3.0还引入了新的电源管理机制,支持待机、休眠和暂停等状态。2.2usb线缆和信号usb总线采用自己独特的四芯线缆、接头和nrzi信号编码方式。本节这些内容进行简要介绍。1usb接头和电缆usb(universal serial bus)协议是由microsoft,inter等多家公司为取代pc现有的各种外围接口,使外围设备的连接具有单一化,即插即用,热插拔等特性而制定的新型串行通信接口。在此背景下,软件与硬件商纷纷推出支usb的产品,usb接口被广泛使用起来。usb总线采用的是非对称的主从结构,为避免连接错误,usb接口有两种形状的插口,分别称为a型口和b型口。其中a口主要用于主机方向插口,也可用于设备方向插口。b型口只用于设备方向插槽,且其为可选口型,用于对体积要求较严格的设备上。usb电缆由电源线(vbus),地线(gnd)和两条双绞数据线(d+和d-)组成。其中一对的电源线采用2028awg(america,wiregauge,美国线规范)的导线。另一对为传递差分数据的导线,可以使用28wag的导线。但全速差分数据信号线必须采用绞线形式,而且还需加屏蔽的处理方可屏蔽的作用是防止高速传递时所产生的电磁干扰。但对于低速的差分信号数据程号线就无需使用绞线、屏蔽处理。2usb接口电器特性4如图2-1展示了一个全速设备与pc主机之间电器特性的连接实例。除了vcc(+5v)与接地线外,需要特别注意的是d+与d-的差分数据信号线。首先,在连接至usb收发器之前必须串接2944的电阻。而后根据不同的usb设备传输速度(全速或慢速),改变在设备端的提升电阻(1.5k)的位置。对于全速设备(12mbps),就将提升电阻器接至d+信号线与电源之间的位置。如果是慢速设备(1.5mbps),则将提升电阻器接至d-信号线与电源线之间的位置。这个电源的范围在3.03.6v之间(可由5v的总线电压转换得到)。最后,d+与d-两条信号线在pc主机的根集线器或集线器端同时接上15k的下拉电阻并连接至地线。图2-1 全速设备与pc主机之间电器特性连接图当设备未连接至pc主机的根集线器或集线器的连接端时,由于d+、d-两条信号线因为下拉电阻的关系,几乎都视为接地(0v),但是若有一个设备刚连接上时,提升电阻(1.5k)与下拉电阻(15k)就会形成一个分压器。因此其中有一条数据信号线(d+或d-)的电位将被提升至电源电压的90%左右。此时,当集线器测得一条数据信号线电压趋近vcc时,另外一条仍维持接地状态时就可以确定有一设备已经连接上了。当d+(或d-)信号线电压上冲超过2.0vdc且保持2.5s以上时,集线器就确认设备已经连接上了。反之,当d+(或d-)信号线电压低于0.8vdc并保持了2.5s以上时,集线器就可以确认5设备已经脱离了。这里的2.0vdc与0.8vdc,就是usb规格书中所定义的d+(d-)电压的两个临界值,分别称为 vse(max)与vse(min)。主机将不断的没隔一个周期来轮训根集线器,检查d+或d-的电位变化,借以了解设备的连接状态。usb规格书中将信号的传递状态分为j,k两种状态,但是这两种状态的定义在全速和低速设备中的定义刚好相反,对于全速设备而言其j状态对应差分1,对于低速设备而言其恰好对应差分0,而k状态对应全速设备差分0,低速设备差分1。所谓差分信号1指的是(d+)(d-)200mv,且d+或d-大于vse(max)。差分信号0则是指(d+)(d-)200mv,而且d+或d-大于vse(min)。据此可以想象当设备一连接上时,d+或d-其中一条信号线的电平会趋近vdc,而另一条则接地,此时设备称为处于j状态,这也就是它的闲置状态。一旦有启动的信号进来,则切入转换为k状态,在这个时刻也可视为进入了sop(startofpacket)状态封包开始状态。usb编码方式6从最底层角度来看,usb总线作为串行的数据总线其总线上的数据是诸多的“位”串行排列而成的,但是为了使设备能正确无误的接受主机端传来的数据,并且正确的进行响应,故而d+与d-的差分数据线就必须采用一种特别的编码方式来传送,以解决usb电缆所产生的信号延迟,以及误差等问题。usb采用了nrzi(non return to zero invert,不归零翻转)的编码方式,对于不同的脉冲信号也能产生同步的数据存取。nrzi的编码原则是,当数据位为“i”时不翻转,为“0”时翻转。图2-2所示的一个nrzi译码编码的范例。经过nrzi编码后的数据采用差分驱动器件以差分信号的方式进行传送,采用差分方式有如下三点益处:1)减小信号被放大的噪声2)减小电缆的噪声3)电路cmos电路缓冲器件支持差分信号是由半双工形式实现的,收发均一次只有一个方向上。总线不传输时,输出高阻状态。usb能够检测到总线上是否由设备连接或删除,关键在于两个差分信号的变化。图2-2 nrzi数据编码如此编码运作后将遇到一个新的问题,假若数据中出现一直是相同重复的连续“1”时,数据就会出现长时间没有转换,而是逐渐的累积,使得读取发生严重错误。因此,在nrzi编码之前,还需要执行所谓的“位填充(bit stuffing)”的工作。其具体规则是如果原始的串行数据中含有连续六个“1”时,就在其后填充一个“0”位,相应的在nrzi译码过程中若发现连续的六个“1”时,则先去处其后填入的“0”,重新补回“1”。在这样的规则下,数据在传输之前需要先进行位填充,nrzi编码的工作。相对的,接收端在作数据接收之前,就必须先执行nrzi译码,而后再作反填充(unbit stuffing),就可将数据恢复成原始的状态。2.3usb传输体系简介usb总线采用分层星型的总线拓扑结构,如图2-3所示。主控制器(包括根集线器)是拓扑结构的起点,usb集线器是其中心,每一层都是集线器和功能设备之间点到点的连接,其最多可分为7层(包括根层)。通过这种层次的星型拓扑结构,usb系统可以支持多达127个usb设备(包括根集线器)的连接。在这7层中,除根集线器外,最多支持5个集线器的级连,即一个usb设备最多可以经过5个集线器来连接到主机。因此若采用5m长的电缆,则最大的级连长度为30m,可见usb总线目前还不适合长距离的数据传输。2.3.1usb主机和设备usb系统中的pc机称为usb主机。每个usb系统中只存在一台主机,usb上的所用通信都是由主机在软件控制下发起。usb设备包括以下类:集线器设备(hub)usb结构中的重要成分,提供附加连接点,将更多的usb设备或集线器接到usb总线。一台集线器有一个连接主机的上行端口和多个连接设备的下行端口。集线器主要负责下列工作:检测设备的插入和拔出、控制和管理端口的电源、禁止和使能端口、设置并向主机报告各端口状态、总线故障检测和恢复。usb集线器主要由两部分组成:集线器中继器(hub repeater)和集线器控制器(hub controller)。中继器负责实现数据流的连接将到达集线器的信息转发到上行端口(设备到主机的信息)或者下行端口(主机到设备信息)。控制器负责提供状态和控制,并允许主机访问集线器,具体说来控制器具有以下特征和功能:包含一个usb接口或串行接口引擎(sie),并包含描述自身信息的描述符。收集各端口状态信息,这些信息将被主机软件读取以检测设备的插入/拔出及其他状态信息:接受来自主机软件的命令、控制集线器各种操作。功能设备(function)7通过端口与总线连接,为主机提供附加功能的设备。例如键盘、扬声器、数据游戏操作摇杆等。usb功能设备可简称为usb设备包含多种描述符信息,指出设备属性和特征。组合设备(compound device)同时具有多种功能的设备。例如,提供内置集线器的显示器、键盘等等称为组合设备。以上介绍了usb设备的分类。逻辑上,一个usb系统可以看作一台或多台usb设备连接到一台usb主机,即每个连接断都是“主机设备”点点连接。2.3.2usb设备的端点、接口和配置一台usb设备对于主机表现为一组端点(endpoint)。端点是主机与设备通信的终点,在一台usb设备上可唯一识别。设计时为设备上每个端点指定一个唯一标识符,称为端点号(0、1、2.)。各端点指定某种数据传输类型和传输方向。一组端点实现一个接口(interface),每个接口对应一种功能。组合设备可以说是包含多个接口的设备。通常,每个usb设备有一个或多个配置(configuration)来控制其行为,使用多配置的一个原的支持。设备的每个配置中包含一个或多个的接口。必须选择一种配置之后才能使之成为对操作系统可用的设备在usb驱动程序开发将涉及usb配置问题。2.3.3usb传输类型usb支持下列4种传输类型,每种传输类型决定了数据的格式、通信流方向、数据包大小限制、总线访问限制、延迟限制、数据序列和错误处理等通信流特征。8控制传输(control transfer)由主机发起,用于主机与外设之间控制、状态和配置等信息的传输,通常在配置设备器件发生。每种usb设备都必须支持该类型传输,从而为主机与设备之间提供一个控制通道。等时传输(isochronous transfer)支持要求固定时延和带宽、周期性且固定速率的数据传输、例如音频系统和计算机一电话集成系统(cti)与主机之间的数据传输。批量传输(bulk transfer)支持打印机、扫描仪、数据相机等设备。这些设备所要求的数据传输的特征是数据量大,非周期性并且可以延时等待。中断传输(interrupt transfer)支持键盘、鼠标和游戏杆等人工输入设备。这些设备要求的数据传输量小,无周期性,但具有固定时延。usb不支持硬件中断,因此主机需要定期查询具有中断传输功能的usb设备是否有中断数据发送,因此所谓中断传输也是由主机查询的方式实现。设备上的每个端点都指定某种传输类型。例如,当一个文件管理程序访问usb总线的cdrom时,数据端点定义为块传输端点。而当cd音频程序访问此cdrom时,所有访问数据端点将采用等时传输类型。2.3.4 管道(pipe)主机与设备的端点之间的连接称为管道。usb系统软件与端点0之间的连接称为缺省控制管道(default control pipe),用于配置和控制设备;客户软件则使用一组管道与接口通信。管道代表通过内存缓冲区在客户软件与设备端点之间移动数据的能力,其具有如下两种模式。流(stream)管道:流管道中传输的数据不具有usb定义的结构,它可以用作块传输、同步传输和中断传输,且通常是单向的。因而,如果客户软件要完成同设备的in传输和out传输,则必须使用两条管道分别进行in传输和out传输。消息(message)管道:在消息管道中传输的数据具有usb定义的结构,它一般只用作控制传输的管道,且是双向的,既支持in传输又支持out传输。usb设备中的0号端点所实现的缺省控制传输管道就是这样的消息管道。usb系统软件确保不会又多个请求同时发送到消息管道。设备每个消息管道在同一时刻只能相应一个请求。主机上多个客户软件可以通过缺省控制管道提出请求,但是这些请求是按照先进先出的顺序发送到设备。2.3.5usb通信流模型一个usb设备可以在逻辑上分为三层:总线接口层(bus interface)、设备层(device layer)和功能层(function layer)。总线接口层处于最低层,它的工作是发送和接收数据包。设备层是中间层,它的功能是把总线接口层的数据发到各个端点。最上层是功能层,实现设备特定的功能。本节主要介绍所有usb设备的中间层的一些共同特性和操作。实际上,设备的功能层正是通过这些特征和操作来实现与主机的通信。usb设备和功能设备分别通过控制管道和一组数据管道实现各层的逻辑通信,但是实际的数据传输要通过总线接口层完成。102.4usb接口通信协议本节讲述usb协议最底层的东西,主要介绍要实现一个usb通信系统应关心的问题。前面曾提到usb是串行总线,尽管经过编码、译码等工作,但仍可以看作串行排列的“位”组织而成。但单纯从“位”的角度来看总线上的数据信号没有任何意义。实际上若个“位”组成一个“域”,若干个“域”组成一个有特定含义的“数据包”,而若干“数据包”再组成一次“事务”(transaction,也有译作“数据交易”)。下图展示了pc主机同设备尽心通讯协议的过程。从中可以看出在usb总线上执行通讯协议的基本单位就是最下层的数据域。几个不同形式的数据域组合成一个数据包,而由若干不同形式的封包又可以组成一次“事务”。对于高速设备而言,在lms的帧内可能包含各个设备所提出的“事务”。这些“事务”可能涵盖不同的客户端驱动程序所启动的输出输入请求包(io request packet,irp)而图中展示的是两个客户端驱动程序。在总线上的数据的发送顺序是一个字节的最低位(lease-significantbit)最先发送,最高位(most-si加ficantbit)最后发送。在本节的图表中,数据都是按照最低位在左,最高位在右排列的。图2-3 sb总线的信号格式2.4.1数据域格式正如上图所示,usb总线上最小的有意义的数据单位是“域”(或称字段)。若干按相应规定排列的位组成域,而不同意义的域进行合理的组合后就称为各种不同作用的数据包。下面对usb协议中的各种不同数据域进行简要介绍。sync域(sync field)所有包的开头都有一个sync域,其由8位组成,作为每一个数据包的前导。顾名思义,其作用就是用来产生同步的作用,所以它的数值是固定的00000001。它在总线上由kjkjkjkk信号组成。其中k对全速设备而言表示差分码的1,j表示0;对低速设备而言恰好相反。包标识符域(packet identifier,pid)每一个usb包都有一个pid(包标识符),它处于sync之后,用来表示包的类型。一个pid域由四位包标识符栏(pid3pid0)和四位与之为补码的检查栏(pid7pid4)组成。检查栏是包标识域的取反,用于保证pid的可靠性。传输时按照从pid0至pid7的顺序进行。如果接收数据方包标识域取反后不等于接收到的检查域,则它将不接收整个包。usb协议规定了多种的pid,用来表示不同的数据包种类;例如setup包即为0xb4,其中前四位(pidopid3)的取值如下表中所示(对应的十六进制码为“b”)。表中还列出了其他各种封包的类型和规格。 表2-1 数据封包类型与格式地址(address,addr)数据域addr数据域是由7个位所组成的,用于寻址最多127个外围设备。显然每个设备必须对应一个唯一的地址,每当新的外围设备刚连接到usb接口时,就会拥有默认的地址0,通过此地址主机得到设备的相关信息报告后再分配给新的地址。端点(endpoint,endp)数据域endp数据域是由4个位组成,所谓端点是类似微管线的概念。通过这4位,最多可以寻址32个端点。这个endp数据域仅用于in、out与setup令牌包中。循环冗余校验(cycle redundancy checks,crc)数据域根据包的不同类型,crc数据域由不同数目的位所组成。其中,数据封包采用crc16的数据域(16个位),而其他的封包则采用crcs的数据域(5个位)。所谓的crc是一种错误检测技术。由于数据在传输时,有可能会发生错误,而crc可以根据数据算出一个校验值,然后依据其判断数据的正确性。data数据域仅存在于data封包内,根据不同的传输类型,拥有不同的字节大小,从01023字节(实时型传输)。帧号(frame number)数据域帧号域仅存在于sof封包中,长度为11比特,逐帧加一,到达7ffh后清零。主机在每帧的开始发送一个帧开始(sof)令牌,帧号域是其中的一个域。2.4.2包格式通过上述所介绍的各种数据域就可以组成执行usb通信协议所需要的各种封包类型,这一节对令牌包、数据和握手包等封包的完整格式分别作一个说明。令牌包(token packet)由于usb的事务是由pc主机启动的,所以在每一个事务中必须以下列的s个数据域所组成的令牌包为开始,执行通信协议的前导工作。表2-2 令牌包格式 另外,所有令牌包的pid数据域中pid1、pido两位均相同(pid1=0, pid0=1),而pdi3、pid2取不同值以区分不同的令牌含义(out、 in、setup等)具体的对应关系可见前文列出的表2-1。假设主机要通过默认的地址取得设备描述符(get_descriptor),那么就必须先执行下面的setup令牌包,作为每一次控制传输的开始。其中pid数据域需要设定为setup,查询前面的pid类型表可知其取值为0xb4。此外,addr域应为默认地址,因此设定为0x00,endp域由于是执行控制传输,使用零号端点,所以取值为0x00。表2-3 令牌包实例数据包(data packet)数据包由pid域、0-1023字节长度的数据域和16比特的crc检查域组成,如表2-4所示。表2-4 数据包格式其中数据封包的pid数据域包含两种类型:data0和data1,根据usb协议规定,最初的数据封包都是以data0位开始,其后才是data1,然后以此方式交替切换,这个动作称为“data toggle”。如此就可以保持整个传输过程中主机能与设备维持同步。沿用上面取得描述符(get_descriptor)的例子,此时主机针对特别寻址的设备端点发出了取得设备描述符的命令。如下显示了含有命令的数据封包。其中,需特别注意的是,由于是控制型传输,所以data数据域中仅有8个字节。表2-5 数据包实例握手包(handshake packet)握手包用于表示一次事务(transaction)的完成状态。它的格式最简单,只有一个8个比特的pid域。表2-6 握手包格式握手信号封包的pid数据域包含ack,nak,stall三种类型名称。也就对应了ack握手信号封包、nak握手信号封包以及stall握手信号封包。帧开始包(start-of-frame packet)帧开始(sof)包也是令牌包的一种,具有独立的pid类型名称;用于辨别帧的起点。由主机每隔lms发出,它由pid域、帧号域和5个比特的crc检查域组成,sof封包的帧号码范围是00x7ff之间。特殊(special)封包11该封包仅用于主机想要从高速传输转换成低速传输时,pid类型名称为pre。具体格式此处从略。2.4.3事务格式(packet format)不同的封包组合与搭配之后就可以形成所谓“事务”。但是事务的格式必须与相应的实时传输、控制传输、中断传输、批量传输四种传输类型相对应,不同的传输类型就会执行不同的事务。对于控制传输、中断传输、批量传输而言,它们都由下面的三个过程或者说三个数据封包组成一次“事务”。在其设置阶段的事务中包含的三个数据封包逐一罗列如下:表2-7 get descriptor请求设置阶段事务组成上面表格中,第一列为封包类型,对应其右侧的两行,首行为该封包中数据域的名称,次行为该数据域中的实际内容。而实时传输的每一次“事务”只包含如下所列的两个过程数据封包。表2-8 实时传输事务格式 上面提到不同的传输形式中“事务”具有不同的格式;但同时大多数情况下每一次“传输”并不是由单一的一笔“事务”完成,而是由若干“事务”组合完成的。下面就针对不同的传输形式,说明每一次传输是如何由多笔“事务”组合而成的。控制传输事务格式 根据不同的功用,控制传输可以分成控制读、控制写以及无数据控制。一次控制传输包含2或3个阶段:设定阶段、数据阶段(非必需)以及状态阶段。这里的所谓阶段实际上就是一次“事务”。在两次“事务”之间会有一个短暂的时间间隔,称之为“空闲”(idle)。usb总线在完成一次“事务”后就进入空闲阶段,等待下一次“事务”的开始。仍然以前面获取设备描述符为例,当完成一个setup事务完成设定阶段后,总线空闲(idle)下来,等待下一次事务,进而形成如图2-4所示接连的“事务”。图中,每个方框代表一次事务,在方框内,首行代表对应的pid,次行代表各种封包的名称,末一行代表此封包是由主机还是设备发出的。需要指出的是在设定阶段与状态阶段都只包含一个数据交易,但在数据阶段中,需要根据所读取的数据量来决定数据交易的数目。例如,设备描述符是18个字节的数据,因此需要3次的数据交易才能完毕对低速设备而言,每次8个字节。此外设定阶段的握手包只能为ack相应,若无法正常接收则放弃这笔数据。 图2-4 控制传输示意图实时传输事务格式实时传输只需要令牌与数据两个封包阶段就可以形成一个事务的动作。如下图所示,如果主机送出in令牌包的话,设备将返回数据封包给主机。如果主机送出一个out令牌包的话,将会有一个数据封包紧随其后送出给设备。由于实时传输不支持握手信号封包,所以数据发生错误时不会重新传一次。图2-5 实时传输系统批量传输事务格式在批量传输中,除了在数据封包阶段后跟随握手信号封包外,其余都与实时传输类似。这是为了确保数据在传送或接收的过程中不会发生错误。如果主机或设备所送出的数据在彼此接收的过程中没有发生错误,则送出ack握手信号。反之,送出nak握手信号就表示设备暂时无法执行主机所提出的要求。stall握手信号封包则进一步的表示设备端有错误的状况,需要主机软件的介入。所有的事务中的数据包,第一次设定或是主机软件清除后的重置状况,一定是以data0为开始的,然后在执行“data toggle”的同步机制。批量传输的数据封包最大容量限制为8、16、32与64个字节等4种格式。所以执行批量传输时,除了最后一个数据封包可能不足所设定的封包容量的大小外,其余皆需要符合容量设定值。如果未按此格式传输时,就会发生错误或stall。中断传输事务格式在中断传输中,除了只有in令牌包(针对usb1.0规格)外,其余的皆与批量传输类似。下面列出了两种事务的类型:图2-6 中断传输示意图在第一种事务类型中,如果执行了中断传输,那么该设备就以数据封包作为中断的信息返回给主机。在数据包阶段中,如果数据在接收过程没有任何错误的话,主机就返回ack握手封包给设备。但是,如果发生错误的话,那么主机则就不传握手包了。中断传输如同批量传输,设备仅允许返回ack、nak与stall握手封包,而usb主机仅返回ack握手封包。一旦主机送出in令牌包后,设备可以返回数据或是nak与stall令牌包。如果设备没有新的中断数据要返回给主机时,就直接跳过数据封包阶段,以nak握手封包相应之。再者,如果设备因故停滞了,就需要主机软件的介入并返回stall握手封包。这两种非正常的传输形式以第二种数据交易来表示。所有的数据交易种的数据封包,一定也是以data0为开始的。此外,数据封包在全速传输时为64个字节,而慢速传输仅有8个字节。因此,当数据的容量小于所设定的大小时,就表示是最后一次的传输了。此外,对于usb1.1与usb2.0协议而言,增加了out令牌包。因此,中断传输就有些类似批量传输了。主机和设备端点之间的逻辑连接称为管道(pipe)。usb定义了两种管道:流管道(stream pipe)和消息管道(message pipe)。其中消息管道有特定的结构。不同的管道有不同的带宽和不同的端点特性。大多是管道在usb系统软件和设备端点0之间连接。它在设备插入,系统对设备供电后建立。主机与之通信,对设备进行配置。在设备正常工作时,主机用它对设备进行一些基本的控制。综合考虑以上的四种传输方式,可见对数据采集系统而言控制传输是必不可少的,其用于设备的配置和基本的控制操作,控制传输的管道就是所谓“消息管道”,其他传输方式对应的管道就是“流管道”。数据采集系统中采集到的数据为保证在较大带宽下并保证数据正确性的传输到主机,应该使用块传输方式。2.4.4标准usb描述符定义(standard descriptor definition )usb设备用描述符的形式向主机报告它的基本性能。描述符具有一定的数据结构。所有描述符的第一个字节为blength,指明此描述符的总长度,第二个字节指明描述符的类型。如果一个描述符返回的blength值小于usb协议规定的值,则主机的系统软件认为它是一个无效(invalid)描述符,但是多余的字节被丢弃。标准设备描述符包括设备描述符(device descriptor),配置描述符(configuration descriptor),接口描述符(interface descriptor),端点描述符(endpoint descriptor)和字符串描述符(string descriptor)。字符串不是必须的。描述符向用户提供一些可阅读的信息,替班成熟的产品都包括字符串描述符。如果设备不支持字符串描述符,则在相应的字节和域都应该填入0。除了标准描述符,usb协议还支持类描述符和销售商描述符。他们主要是被生产商或销售商用来实现设备的一些特定功能。它们的格式仿照标准描述符的形式定义。usb的描述符掌握着关于设备的各种信息,定义在设备的固件中。标准的usb描述符总共有5种,分别是设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。主机将以get descriptor这样的请求来获取描述符。下面罗列各种描述符的格式和内容,具体其实现方式在后面“固件编程”一节中说明。设备描述符(device descriptor)设备描述符的长度为18个字节,它描述设备的基本信息。一个usb设备只能有一个设备描述符。 配置描述符(configuration descriptor)配置描述符描述设备某一种配置的信息,它包括配置有几个接口,每个接口的端点如何安排等。当主机要求获得某个配置描述符时,设备返回和此配置相关的接口描述符和端点描述符。其具体数据结构和设备描述符有很多相似指出,在usb协议书中有详细说明,在此不赘述。接口描述符(interface descriptor)接口描述符描述一个接口的信息。主机不能要求单独获得某个接口描述符或端点描述符。它们只能和配置描述符一起被主机获得,具体数据结构从略。端点描述符(endpoint descriptor)除了端点0以外,一个接口中用到的所有端点都有自己的端点描述符。具体数据结构可参阅usb协议书。2.4.5usb设备请求(device request)usb定义了11种标准usb设备请求,主要功能是完成usb设备的配置操作。下面简要介绍其内容。getstatus请求getstatus请求用于主机读取设备、接口或端口的状态。下表列出了其在setup事务8个字节数据包中定义的格式。在请求的数据阶段,usb设备将向主机返回2字节具有特定格式的数据。表2-9 getstatus 请求数据格式 windex字段中的“接口”和“端点”的取值分别对应usb设备中接口描述符的binterfacenumber字段值和端点描述符的bendpointaddress字段值,getstatus请求只在usb设备处于地址状态和配置状态时有效,如果它指向的接口或端点不存在,usb设备将对其返回stall握手。clearfreature请求clearfreature请求用于清除或者禁止设备、接口或端点的某些特性。下表列出setup事务8字节数据包中的定义格式。该请求无数据阶段。表2-10 clearfreature请求数据格式wvalue字段指明设备、接口或端点特性选择符的值,以清除或禁止相应的特性,它必须与clearfeature请求的接收方相对应。c1earfeature请求只在usb设备处于地址状态和配置状态时有效,如果它指向的接口或端点不存在,usb设备将对其返回stall握手。setfeature请求setfeature请求用于设置或者使能设备、接口或端点的某些特性,与c1earfeature请求相对应,该请求无数据阶段。具体其请求格式从略,需要是可参阅usb协议书。setaddress请求setaddress请求用于为usb设备分配一个唯一的设备地址。下表列出其在setup事务8字节数据包中的定义格式。该请求无数据阶段。getdescriptor请求getdescriptor请求用于主机读取指定的描述符。下表列出了其在setup事务8字节数据包中的定义格式。在该请求的数据阶段,usb设备将向主机返回指定的描述符。getdescriptor请求在usb设备处于缺省状态、地址状态和配置状态时均有效,如果它指定的描述符不存在,usb设备将对其返回stall握手包。setdescriptor请求setdescriptor请求用于更新usb设备己有的描述符向其添加新的描述符。下表列出了其在setup事务8字节数据包中的定义格式。在该请求的数据阶段,主机将向usb设备发送指定的描述符号。setdescriptor请求仅支持三种类型的描述符:设备描述符、配置描述符和字符串描述符。接口和端点描述符都将作为usb设备配置的一部分在设备配置描述符setdescriptor(configuration)请求中设置。另外,setdescriptor请求是可的,且它仅在usb设备处于地址状态和配置状态时有效。如果不支持该请求,usb设备将对其返回stall握手包,以表示请求处理失败。getconfiguration请求getconfiguration请求用于主机读取usb设备当前的配置表。下表列出setup事务8字节数据包中的定义格式。在该请求的数据阶段,usb设备将向主机返回一字节的配置。usb设备处于地址状态时,其将对getconfiguration请求返回0值;在usb设备处于配置状态时,其将返回当前配置描述符中bconfigurationvalue字段的值;在usb设备处于缺省状态时,getconfiguration请求无效。setconfiguration请求setconfiguration请求用于对usb设备选择一个合适的配置。下表列出其在setup事务8字节数据包中的定义格式。该请求无数据阶段。在usb设备处于地址状态时,如果接收到wvalue字段值为0的setconfiguration请求,则它将仍停留在地址状态,如果其接收到wvalue字段值不为0的setconfiguration请求,则它将使用该配置,并进入配置状态。getlnterface请求getinterface请求用于主机读取指定接口的当前可替换设置值,接口描述符中balternatesetting字段的值。下表列出其在setup事务8字节数据包中的定义格式。在该请求的数据阶段,usb设备将向主机返回1字节的可替换设置值。getinterface请求只在usb设备处于配置状态时有效。在地址状态,usb设备将对其返回stall握手包。setlnterface请求setinterface请求用于为指定的接口选择一个合适的可替换设置。下表列出其在setup事务8字节数据包中的定义格式。该请求无数据阶段。当usb设备的一个接口存在多个可替换的设置时,setinterface请求使得主机可以为其选择所需要的可替换是指。如果usb设备的某一接口只支持一个缺省的可替换设置,则它将在该请求的状态阶段返回stall握手包。setlnterface请求只在usb设备处于配置状态时有效,如果它指定的接口或可替换设置不存在,usb设备将对其返回stall握手包。synchframe请求synchframe请求用于设置并报告端点的同步帧号,它只使用于同步端点。下表列出了其在setup事务8字节数据包中的定义格式。在该请求的数据阶段,usb设备将向主机返回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校蒸饭柜管理制度
- 学生激励与管理制度
- 孵化器财务管理制度
- 安全穿透式管理制度
- 安检科奖惩管理制度
- 官方工作群管理制度
- 实验高中园管理制度
- 客房质检部管理制度
- 室外吸烟点管理制度
- 应届毕业生管理制度
- 2025长春中医药大学辅导员考试题库
- 2025年-四川省安全员《A证》考试题库及答案
- 成都建材院煤矸石悬浮煅烧中试线投产成功
- 锂电消防知识安全常识
- 2025年广东省佛山市南海区中考一模英语试题(原卷版+解析版)
- 2025年个人黄金首饰作为抵押借款合同
- 镇江市京口区2024-2025学年小升初总复习数学测试卷含解析
- “五步一练”六环节在高中化学课堂教学中的实践研究
- 抖音来客本地生活服务休闲娱乐购物行业商家运营策划方案
- 不断提升法治素养课件
- 不坐班申请书
评论
0/150
提交评论