usb接口范文10篇-ag尊龙app
时间:2023-03-28 04:29:21
usb接口范文篇1
关键词:usb终端人机接口设备(hid)列举
引言
usb作为一种新的pc机互连协议,使外设到计算机的连接更加高效、便利。这种接口适合于多种设备,不仅具有快速、即插即用、支持热插拔的特点,还能同时连接多达127个设备,解决了如资源冲突、中断请求(irqs)和直接数据通道(dmas)等问题。因此,越来越多的开发者欲在自己的产品中使用这种标准接口。而rs232是单个设备接入计算机时,常采用的一种接入方式,其硬件实现简单,因此在传统的设备中有很多采用了这种通信方式。一般的ic卡门禁考勤系统也使用rs232接口与pc机通信。如果将usb技术应用于ic卡门禁考勤系统与pc机之间的数据通信,这样,不仅能使ic卡门禁考勤设备具备usb通信的诸多优点,而且对pc机而言还可以节余1个rs232串口为其它通信所用。
1usb系统概述
usb规范描述了总线特性、协议定义、编程接口以及其它设计和构建系统时所要求的特性。usb是一种主从总线,工作时usb主机处于主模式,设备处于从模式。usb系统所需要的唯一的系统资源是,usb系统软件所使用的内存空间、usb主控制器所使用的内存地址空间(i/o地址空间)和中断请求(irq)线。usb设备可以是功能性的,如显示器、鼠标或者集线器之类。它们可以作低速或者高速设备实现。低速设备最大速率限制在1.5mb/s,每一个设备有一些专有寄存器,也就是端点(endpoint)。在进行数据交换时,可以通过设备驱动间接访问它。每一个端点支持几种特殊的传输类型,并且有一个唯一的地址和传输方向。不同的是端点0仅用作控制传输,并且其传输可以是双向的。
系统上电后,usb主机负责检测设备的连接与拆除、初始化设备的列举过程,并根据设备描述表安装设备驱动后自动重新配置系统,收集每个设备的状态信息。设备描述表标识了设备的属性、特征并描述了设备的通信要求。usb主机根据这些信息配置设备、查找驱动,并且与设备通信。
典型的usb数据传输是由设备驱动开始的,当它需要与设备通信时,设备驱动提供内存缓冲区,用来存放设备收到或者即将发送的数据。usb驱动提供usb设备驱动和usb主控制器之间的接口,并将传输请求转化为usb事务,转化时需要与带宽要求及协议结构保持一致。某些传输是由大块数据构成的,这时需要先将它划分为几个事物再进行传输。
具有相似功能的设备可以组成一类,这样便于分享共有的特性和使用共同的设备驱动程序。每个类可以定义其自己的描述符,如:hid类描述符和report描述符。hid类是由人控制计算机系统的设备组成的,它定义了一个描述hid设备的结构,并且表明了设备的通信要求。hid设备描述符必须支持端点输入中断,固件也必须包括一个报告描述符,表明接收和发送数据的格式。在ic卡门禁考勤系统引入rs232到usb的接口转换模块后,从系统所具有的特性来看,应该属于hid设备。因此,两种特殊的hid类请求必须被支持:setreport和getreport。这些请求使设备能接收和发送一般的设备信息给主机。在没有中断输出终端时,setreport是主机发送数据给hid设备的唯一方式。
2系统要求
为了实现ic卡门禁考勤系统中rs232-usb的接口转换,需要1台支持usb的主机,同时还要提供主机上用于与外设通信的驱动,一般由操作系统提供。此外,还需开发在主机上执行的客户端应用程序。在设备端,需要提供具有usb接口的主控制器芯片,以及编写主控制器上执行的usb通信代码和用于执行外设功能的相关代码。
2.1主机要求
主机必须能够通过设备驱动接收usb数据,并且使这些数据对处理这些请求的应用程序有效。在主机中必须有一个驱动负责处理usb传输、辨识设备、向usb设备收发数据;同时,还需要有一个设备驱动-虚拟化串行口,仿效真实的串口。这个驱动必须能够像真实的串口接收和发送usb数据。
从应用的观点,设备驱动必须能收发数据,可以通过使用一个虚拟化的串口或通过转化为usb数据实现。微软提供了一个叫作usbpos的设备驱动,它允许应用程序访问usb设备时,好像它们连接到标准串口上一样。系统大致结构方框图如图1所示。
2.2设备要求
在定义即将使用的微控制器时,必须说明一些通信要求,如:通信速率、频率、传输的数据量等。考虑到ic卡门禁考勤系统有效的通信速率,可以把转换器作为一个低速的设备使用,低速设备通信速度可以在10~100kb/s的范围变化。考虑到传输的数据量和传输的频率,此系统中使用中断的传输类型。中断传输可以在2个方向进行,但不能同时进行,这种类型的传输要求在规定的时间里完成相当大数据量的传输任务。
对于转换模块,它可以用于pc机的数据收发,操作系统提供了hid驱动,允许使用中断传输模式。对于低速设备的一个事务,中断传输最大的包容量是8字节,如果需要发送大量的数据,则必须把它分割为很多事务。
转换模块要定义的另一个特性是所需端点数。如上所述,端点是微控制器在usb通信过程中所用来发送和接收数据的缓冲区。此系统中,该转换器定义了2个端点:一个端点(端点0)用来控制传输,另一个端点是中断输入端点,定义为发数据给pc机。
根据以上要求,通过研究比较现有的微控制器,考虑到如内存空间、价格和开发包等因素,我们选用cypress家族的一种8位risc微控制器cy7c634xx/5xx。它使用哈佛总线结构,是对较高i/o要求的低速应用设备的低价凯时k66会员登录的解决方案。
图2为ic卡门禁考勤系统usb通信实现硬件方框原理图。
3软件设计和执行
系统软件由6部分组成:定义描述符、设备检测和列举、端点中断服务程序、usb数据交换模块、串行口数据交换模块、usb/serial模块接口。下面简要描述其中部分模块程序的功能和实现思想。
3.1描述符定义
描述符是数据结果或信息的格式化块,它可以使主机知道这个设备。每个描述符包含了这个设备整体的信息或者某个元素的信息。所有的usb外设必须响应对标准的usb描述符的请求。
该系统中使用了1个接口和2个终端(控制和中断输入)。由于受win98的限制还不能使用中断输出终端,因此为了解决这个问题,我们通过在端点0中使用setreport传输pc机欲送往ic卡门禁考勤设备的数据。
数据接收是在outputreports中完成的。它根据送往ic卡门禁考勤设备最大的数据量,系统定义为16k个8位域。发送数据给主机是在输入报告中完成的,它是8k个8位域。
3.2设备检测和列举
当1个usb人机接口类(hid)设备第一次连接到总线,它将被总线供电但仍然非功能性等待1个总线复位。d-端的上拉电阻通知hub连接上了新的设备,主机也同时知道了新连接的usb设备,并将它复位。紧跟输入包之后,主机发送1个配置包,从缺省地址0处读取设备描述符。读到描述符后,主机将分配一个新的地址给设备,并继续查询关于设备描述、配置描述、人机报告描述的信息,设备将开始对新分配的地址作出反应。根据从设备处返回的信息,主机知道了被设备支持的数据终端的数量,完成列举过程。列举结束后,windows将把新的设备加入到控制面板的设备管理器中显示。
为此,在微控制器中必须写入访问描述符的代码,这样便于对主机在列举设备时发送的请求作出有效的辨识和响应。在设备方面需要创建一个inf文件,使windows能够辨识设备,并且为设备找到其驱动。由于操作系统提供了简单的inf文件,因此,开发中只需要编写写入到微控制器中的程序。
3.3数据发送和接收过程
发送数据到门禁考勤系统是通过控制端点0中使用setreport来完成的。主机先向门禁考勤系统请求发送数据,设备响应请求后,主机便开始执行。当有数据到达设备的终端0时,将对设备产生一个中断。此时,相应的中断服务程序便将数据复制到数据缓冲区。一旦进入端点0的中断服务程序,所有的中断必须关闭,确保能够正确地复制数据。
微处理器的数据缓冲区编程为可以接收64个字节,这个值是存放在设置包的包头请求信息中。从主机处接收到的最大包大小,是根据它将发送给门禁考勤系统的最大数据量来决定的。
系统还使用了put_command线程,通过1个i/o端口引脚,向门禁考勤系统串口发送数据。在执行此线程时,根据串口通信协议插入了起始位、停止位以及相应的延时。
从门禁考勤系统接收数据的过程是利用端点1完成的。端点1配置为1个中断输入端点,当有1个起始位到达引脚时,gpio中断必须打开,并关闭所有其它类型中断。设计中通过使用1个get_serial线程来收集i/o引脚发出的串行数据,并把它存入数据缓冲区。同时该线程负责检验接收到的起始位和停止位的正确性。当收到8个字节时,将接收缓冲区中的数据复制到终端1的缓冲区,并且允许微处理器响应中断输入请求。
usb接口范文篇2
关键词:ch371usb接口at89c52
通用串行总线usb(universalserialbus)是由intel、compaq、digital、ibm、microsoft、nec、nertherntelecom七家世界著名的计算机和通信公司共同推出的新一代总线接口标准。作为一种pc机与外设之间的高速通信接口,usb具有连接灵活、可热插拔、一种接口适合多种设备、速度高(usb1.1协议支持12mb/s,usb2.0协议支持480mb/s)、自动配置、无需定位及运行安装程序、可为外设提供电源、低功耗、低成本、高可靠性等优点,因而在数码相机、便携式仪器、便携式存储设备等产品中广泛应用。
但是,usb接口的开发一般要求设计人员对usb的标准、firmware(固件)编程及驱动程序的编写等有较深入的理解,因此限制了一般的硬件工程师对usb接口产品的开发使用。我们在便携式无线抄表系统中使用的usb接口芯片ch371,使用简单、性能卓越,价格低廉,只要熟悉单片机编程及简单的vb或vc应用程序编程,一般的硬件工程师在极短的周期内就能很容易地开发出相应的usb产品。
1usb总线的通用接口芯片ch371简介
ch371是一个usb总线的通用接口芯片,如图1所示。在本地端,ch371具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机、dsp等控制器的系统总线上。在计算机系统中,ch371的配套软件提供了简洁易用的操作接口,与本地端的单片机通信就如读写硬盘中的文件。ch371屏蔽了usb通信中的所有协议,在计算机应用层与本地端控制器之间提供端对端的连接。使用ch371,不需要了解任何usb协议或者固件程序,甚至驱动程序,就可以轻松地将并口、串口的产品升级到usb接口。它具有以下特点:
*屏蔽usb协议,在计算机应用层与本地端之间提供端对端的连接。
*两种通信模式:单向数据流模式、请求加应答模式,支持伪中断。
*自动完成usb配置过程,完全不需要本地端控制器作任何处理。
*标准的usbv1.1接口,即插即用,d 引脚内置上拉电阻。
*内置4个端点,支持usb的控制传输、批量传输、中断传输。
*通用windows驱动程序,提供设备级接口和应用层接口。
图2
*通用的本地8位数据总线,4线控制,即读选通、写选通、写选输入、中断输出。
*占用16个地址,可选直接地址方式或者复用地址方式。
*内置输入输出缓冲区,以中断方式通知本地端控制器传输数据。
*内置硬件实现的i2c主接口,应用层可以直接读写外挂的i2c从设备。
*在主控方式下可以提供16根输入信号线或者12根独立控制的输出信号线。
*内置上电复位,提供高电平有效复位输出和低电平有效复位输出。
*内置可选的看门狗电路watch-dog,为本地端控制器提供监控。
2基于ch371usb接口的硬件设计
图2给出的是ch371与mcu的硬件接口简图。对mcuat89c52的硬件连接比较简单,主要是在该系统的设计中,如晶振的选择连接以及复位电路等,没有什么特殊的要求,而ch371的复位完全可以采用单片机复位电路产生的复位信号。带i2c接口的串行eeprom24c01的作用是存储产品的vid、pid、设备序列号等信息,只要地址不相同,就可以挂接多片带i2c接口的芯片,用户可以利用提供的动态连接库的函数,非常方便地完成对串地eeprom的读出和写入。系统设计中,也可以没有eeprom,ch371将使用默认的vid、pid、产品描述符和电源描述符,并且没有设备的序列号。
需要注意的是:最好在usb连接器的1和4之间跨接1个100μf的电解电容和1个0.1μf的独石或瓷片电容;12mhz晶振的外壳最好接地;阻抗匹配电阻为80ω~150ω。
3信息传输软件实现流程
下位机数据上传子程序流程简图如图3所示。
下位机中断服务程序流程如图4所示。
对于计算机应用层的程序,在计算机上装载winchiphead提供的ch371的通用驱动程序后,不必再考虑usb通信协议、固件程序、驱动程序、自动配置过程和底层数据传输过程。只需要根据提供的动态连接库的接口函数,用vb或vc编制自己的应用程序即可。
usb接口范文篇3
关键词:ft245bmusb接口并行i/o口
引言
1概述
当前,usb外设的开发是一个热点。由于usb总线具有传输速度快、占用资源少及真正的即插即用等优点,越来越受到业界的青睐。可是,usb的开发要求设计人员对usb的标准、firmware(固件)编程及驱动程序的编写等有较深入的理解,因此限制了usb的开发人员;而基于ft245bm芯片的usb产品开发,能够使研发人员在最短的周期内开发出相应的usb产品。该芯片由ftdi(futuretechnologydevicesintl.ltd.)公司推出,使用简单、性能卓越,只要熟悉单片机编程及简单的vb、vc应用程序编程,就可很容易地进行用户产品开发。
2ft245bm芯片功能简介
ft245bm的主要功能是进行usb和并行i/o口之间的协议转换。芯片一方面可从主机接收usb数据,并将其转换为并行i/o口的数据流格式发送给外设;另一方面外设可通过并行i/o口将数据转换为usb的数据格式传回主机。中间的转换工作全部由芯片自动完成,开发者无须考虑固件的设计。
ft245bm内部主要由usb收发器、串行接口引擎(sie)、usb协议引擎和先进先出(fifo)控制器等构成,如图1所示。usb收发器提供usb1.1/2.0的全速物理接口到usb总线,支持uhci/ohci主控制器;串行接口引擎主要用于完成usb数据的串/并双向转换,并按照usb1.1规范来完成usb数据流的位填充/位反填充,以及循环冗余校验码(crc5/crc16)的产生和检错;usb协议引擎管理来自usb设备控制端口的数据流;fifo控制器处理外部接口和收发缓冲区间的数据转换。
fifo控制器实现与单片机(如at89c51等)的接口,主要通过8根数据线d0~d7及读写控制线(、wr、和)来完成和单片机的数据交互。ft245bm内含两个fifo数据缓冲区,一个是128字节的接收缓冲区,另一个是384字节的发送缓冲区。它们均用于usb数据与并行i/o口数据的交换缓冲区。
另外,ft245bm还包括1个内置的3.3v的稳压器,1个6mhz的振荡器、8倍频的时钟倍频器、usb锁相环和eeprom接口。ft245bm采用32脚的pqfp封装,体积小巧,易于和外设做到一块板上。其外形及引脚分布如图2所示,各引脚的功能描述如表1所列。
表1ft245bm引脚功能
引脚号引脚名称类型引脚功能
25d0i/o双向数据总线
24d1i/o双向数据总线
23d2i/o双向数据总线
22d3i/o双向数据总线
21d4i/o双向数据总线
20d5i/o双向数据总线
19d6i/o双向数据总线
18d7i/o双向数据总线
16rdin由低变高时,允许从接收数据缓冲区读取数据
15wrin由高变低时,允许将数据发送到数据缓冲区
14txeout为低时,允许数据写入发送数据缓冲区
12rxfout为低时,允许数据缓冲区的数据被读取
7usbdpi/ousb数据信号线d ,接1.5kω的上位电阻到3.3v
8usbdmi/ousb数据信号线d-
32eecsi/oeeprom片选线
1eeskouteeprom时钟线
2eedatai/oeeprom数据线
10pwrenout电源使能线
11si/wuin发送立刻消息或唤醒信号线
4resetin复位脚
5rstoutout内部复位生成器的输出脚
27xtinin时钟输入脚
28xtoutout时钟输出脚
31testin测试脚
63v3outout3.3v输出脚
3、26vccpwr电池, 4.4~5.25v
13vcciopwr控制引脚10~12、14~16、18~25的信号电平, 3.0~ 5.25v
9、17gndpwr电源地
30avccpwr内部模拟电源
29agndpwr内部模拟电源地
3硬件设计
ft245bm的典型硬件电路如图3所示。该电路采用总线供电模式,同时采用上电复位方式,通过的输出使单片机复位。时钟电路可采用4脚的6mhz晶振模块或由1个6mhz的晶体及2个33pf的电容组成。脚和i/o24脚相连,用于判断usb总线是处于挂起状态还是正常状态。在usb接口的电源端采用一个磁珠,以减少主机和设备的干扰;同时,电源端增加了去耦和旁路电容,以提高电路的抗干扰性能。在pcb板的设计中,数据线的走线应尽可能短并且长度相等。图3中的93c46(93c56或93c66)是一片eeprom,用于存储产品的vid、pid、设备序列号及一些说明性文字等。这些需要用户自己编写,编写的应用程序由ftdi提供。用户只须运行相应的vb应用程序,写入自己相应的信息即可。该eeprom是可选的。若没有eeprom,ft245bm将使用默认的vid、pid、产品描述符和电源描述符,并且没有设备的序列号。
图3ft245bm的典型硬件电路
4软件编程
当ft245bm的usb接口连接到主机后,必须在pc机上安装一个由ftdi公司免费提供的虚拟串行口vcp(virtualcomport)驱动程序。该驱动程序兼容windows98/98se、windows2000/me/xp等不同版本。用户可以在这虚拟串口上进行应用程序的开发。该虚拟串口可以像一个标准的物理串口那样被访问,可本质上所有针对虚拟串口的数据通信都是通过usb总线完成的,在设备端则通过并行i/o口完成。
在pc端,应用vb对虚拟串口(通常为com3)进行应用编程。我们直接应用mscomm控件,将mport置为3,mscomm3.seetings置为“9600,n,8,1”(该速率为默认设置,实际上vcp驱动程序总是使数据以最快速率传输);通过mscomm3.portopen设置com3的开关状态;通过mscomm3.input和mscomm3.output读入或输出数据。在读取数据时,设置mscomm3.rthreshold的值为1。只要有数据传到pc机,就立即触发mevent事件,自动读取com3的数据;而发送数据则可自动或手动发送,由用户自己设置。根据这些,用户就可以轻松编写自己的应用程序了。
在设备端,基于万利的insightse-52仿真器进行编程。根据图4所示接收数据时序图,首先,须采样到信号为低,若为低,表明有接收到来自pc机的数据,允许单片机通过八位数据总线d0~d7读取数据。接着,通过信号由低到高的变化锁存数据(读入数据)。最后,延迟一段时间,重新开始下一字节的读取。软件流程如图5所示。发送数据过程,可根据图6所示发送数据时序图,同理编写发送数据的程序。设备程序可以在此基础上进一步开发,即用户根据自己的具体项目进行编程。
usb接口范文篇4
关键词:通用串行总线(usb)局域网
目前,在局域网内部,计算机接入局域网的传统方法是通过在计算机主板上安装以太网卡来实现网络的互联。这种接入方式需要计算机主板上有闲置的isa或者pci插槽,还需要上级网络设备有足够的接口支持。当上级网络设备的下行接口数量不够时,必须在这个网络设备下面添加集线器(hub)或者交换机(switcher)。
针对这种情况,本文提出了一种多通用串行总线(usb)接口的局域网接入适配器。它将传统意义上的多块以太网卡和集线器的功能集于一身,使多台计算机可以用各自的usb接口连接到上级网络设备的一个下行接口,并在内部采用了比集线器功能更为更强大交换控制器,对各接口的数据流量加以控制,保证可靠地运行。
与传统的通过以太网卡的局域网接入方式相比较,这种通过usb接口的局域网接入方式具有很多优点:安装简便,支持热插拔,而且不需要在计算机内部安装以太网卡,尤其在主板插槽紧张时节省了资源。
1系统硬件组成
本文所述的系统实现了对四路usb接口的局域网接入。图1是整个系统的硬件组成框图。
1.1物理层
物理层芯片连接上级网络设备的下行rj45接口和交换控制器。本文所述系统用台湾realtek公司的rtl8204芯片实现。这块芯片是一块高度集成的10base-t/100base-tx/fx的以太网收发芯片。rtl8204包括了四个独立的通道,可以同时收发四路以太网信号,每路通道都集成了4b5b编解码器、曼彻斯特编解码器、加扰器、解扰器、输出驱动、输出波形形成、滤波、数字自适应均衡和锁相环模块。但在本系统中只用了一路连接外部局域网。与普通物理层芯片所具有的质独立(mii)接口相比较,rtl8204使用了相对简单的简化介质独立(rmii)接口向上与mac层进行连接。这种rmii接口省掉了mii接口中的许多控制信号和数据信号,将15位信号减到了7位,简化了硬件的设计工作[3]。
1.2交换控制器
本系统采用的交换控制器是台湾realtek公司的rtl8308b芯片。这是一块具有8端口10mbps/100mbps的交换控制器。它对各个端口的数据进行处理并交换,并对各端口的流量加以控制。rtl8308b每个端口都能够处理10mbps或者100mbps的数据,可以工作在全双工或者半双工模式下。与rtl8204一样,rtl8308b的接口也是rmii接口,硬件设计非常方便。
rtl8308b片内集成有2mb的dram。可以用作数据包的缓存。rtl8308b支持ieee802.3x全双工流量控制和半双工后退压力算法、地址学习算法、广播风暴控制和环路测试功能。rtl8308b片外用一片串行eeprom24lc02b实现对芯片的配置[4]。
1.3usb转换芯片
usb转换芯片对usb接口的数据、控制信号和rmii接口的数据、控制信号进行转换。本系统采用台湾asix公司的ax88170作为usb协议转换芯片。这块芯片片内5kb×16bit的sram,内部对数据进行usb协议和网络协议转换。它支持usb1.1标准,并可连接基于ieee702.3或ieee802.3u以太网协议下的10mbps/100mbps网络,而且在支持mii接口的同时,还支持简单的rmii接口,方便硬件的设计。
ax88170片外用一片串行eeprom93lc56实现对芯片的配置[5]。
1.4通用串行总线(usb)接口
通用串行总线(usb)设备在即插即用的特性上能够较好地满足用户使用方便的要求。usb规范目前有两个版本:1.1和2.0。目前,绝大多数计算机主板还只是支持usb1.1规范的最高12mbps速率,所以本系统是针对usb1.1规范进行的[1]。
2硬件配置
2.1rtl8308b的配置
交换控制器rtl8308b的配合是通过芯片在上电时读取串行eeprom24lc02b及某些控制引脚的电平来实现的。这其中包括广播控制使能、半双工后退压力函数使能、全双工流量控制、环路监测函数使能位、crc校验允许位、hash算法使能位等。对这些控制位的使能,本系统视需要而定,这里不再一一叙述。
此外,非常重要的是选择好rtl8308b的物理端口,并设置好其对应的物理地址。如果物理地址没有设置正确,交换控制器将能正常地从连接端换数据。在本系统中,根据芯片手册要求及实际需要,选取c端口连接rtl8204的c端口,e、f、g、h分别连接4片usb转换芯片ax88170。在eeprom24lc02b内设置好物理端口对应的物理地址,使rtl8308b的a端口到h端口对应着物理地址08h~0fh。
2.2rtl8204的配置
rtl8204的系统配置通过读取某些控制引脚上电时刻的电平来实现。rtl8204在上电时读取对应的引脚电平,并将其状态写入自己的内部寄存器中。这些控制引脚包括速率的选择(10mbps/100mbps)、全双工/半双工的选择以及自动协商的使能。本系统选择了自动协商工作方式,使rtl8204可以自动地与传输方式未知的上级网络设备协商物理层信号的传输方式。
降此以外,对rtl8204最重要的配置是其端口的物理地址的设备。本系统用rtl8204的c端口连接rtl8308b的c端口,要求这两个端口的物理地址一致。前文所述,rtl8308b的c端口地址应为0ah,所以,应该将该rtl8204的c端口地址设置成为0ah,具体设备方法可以参考文献[3]。
2.3ax88170的系统配置
usb转换芯片ax88170的数据接口可以选择mii接口或者rmii接口,本系统选择了设计较为简单的rmii接口。ax88170还可以工作在phy模式或者mac模式下,在本系统中,rtl8308b工作在mac层,对其他芯片的传输方式进行控制。所以,这里需要将mx88170设置为工作在phy模式下。
和前所述的rel8204、rtl8308b一样,ax88170的物理地址的设置也要与rtl8308b的设置相一致。本文中的4片ax88170分别与rtl8308b的e、f、g、h端口连接,所以对应的物理端口地址应该分别设置为0ch、0dh、0e和0fh。
除此之外,在存储ax88170控制信息的eeprom93lc56中,还存储这个端口的mac地址。这里4个mac地址和rtl8308b的mac地址的选择应该避免自身的重复,并且不应与现有局域网里的mac地址重复。
2.4其它控制信号
整个系统的复位信号的重要性不言而喻,除了每片芯片都有各自最小时间的要求外,交换控制器rtl8308b还要求在复位后完成重新配置的时间不能早于其他物理层芯片(即rtl8204和4片mx88170)的配置暗。也就是说,rtl8308b的复位时间不能短于其他物理层芯片的复位时间。所以本系统还采用了maxim的max809芯片用作所有芯片的复位信号,既保证了复位信号的单稳的可靠性,也保证了rtl8308b和其他物理层芯片的复位时间是相等的。
在本系统中,时钟信号成为重要,特别是50mhz的时钟信号。50mhz时钟信号需要连接到rtl8308b、rtl8204和4片mx88170的rmii接口,需要足够的驱动能力,并且它们之间的相位差要足够小才可以保证传输的可靠性。本系统采用了idt公司的49fct3805(1:5时钟驱动芯片)对时钟信号增加了驱动力,并增大了扇出。
3测试程序和驱动程序
为了方便硬件的调试,还需要编写简单的测试程序来调试系统。除标准usb指令外,ax88170厂家提供了关于mx88170的特殊指令,包括读写eeprom、读写片内收发存储器、读写内部其他控制寄存器等,方便了系统的调试。由于mx88170芯片的厂商免费提供了其在windows98、windows2000和windowsme下的驱动程序,所以本系统仅仅编写了简单的usb设备的测试程序,主要用来调试ax88170的工作状态。图2给出了程序的流程图。程序初始化后打开目标设备,然后读取设备标识和配置标识并判断。如果正确,则继续读取设备标识和配置标识并判断。如果正确,则继续读取eeprom里的mac地址和物理端口地址,之后向mx88170的片内发送sram和接收sram读写数据,如果结果正确即证明ax88170已经能够正常工作。mx88170完整的驱动程序由芯片厂端免费提供。
经过测试,本系统工作性能稳定。
本系统用于办公室或实验室环境下的计算机组网,支持ieee802.3的10mbps/100mbps以太网标准,兼容全双工和半双工网络。图3为它的应用实例,它可以将4台电脑通过usb接口连接在一起,并与局域网相连,从而实现多台计算机的信息交换、资源共享。各用户终端可以通过本设备连接至局域网,进而与internet网络相连。
usb接口范文篇5
关键词:电子巡更系统信息钮扣usb接口设备驱动程序
电子巡更系统是智能楼宇中保安系统的一个子系统。保安巡更时,需按指定的路线和时间,依次以达各个巡更点进行巡更。在此系统中,各巡更点设有信息钮扣,保安用巡更机读取信息钮及当前时间。巡更完毕后,将巡更机交至安保中心,使之与计算机的usb接口相连,将存储在巡更机中的巡更数据输入计算机。所以,通过它可以了解保安的巡更情况,有效地管理和督促保安的工作。
1996年,intel、microsoft、ibm等七家公司共同推出usb1.0通用串行接口标准,随后带usb接口的产品陆续出现。usb接口具有速度快、支持热插拔和即插即用、易扩展、可提供总线供电等优点。
基于usb接口的诸多优点和本设计中巡更机的特点,我们在设计巡更系统时,采用了usb接口。该电子巡更系统具有使用方便、数据传输速度快、易扩展、充电方便、功耗低、性价比高等优点,有效地解决了传统巡更机的不足。
图1巡更机硬件原理框图
1电子巡更系统硬件设计
针对电子巡更系统的特点,为了降低开发成本,提高系统的性价比,本设计采用mcu usb接口芯片的方案。mcu采用atmel公司的at89c52单片机,可以设置成低功耗方式。usb接口芯片采用philips公司的pdiusbd12。带usb接口的电子巡更系统硬件原理框图如图1所示。其中ds1302为高性能、低功耗、宽电压、带有ram实时时钟芯片,它适合于工作电池供电设备的系统时钟。这里mcu通过它读了当前时间;24lc64为低功耗、宽电压、64kb、支持i2c协议的串行cmos电可擦除程序存储器eeprom,这里用于存储巡更点信息钮扣的id值和读取信息钮扣时间数据。ds1990a外形上是一种圆形不锈钢器件,内部存有64b的二进制代码,以此代码作为巡更点的id值。ds1302和24lc64电压工作范围为2.5~5.5v,以i2c总线和mcu通信。ds1990a以单总线(1-wire总线)和mcu通信。
本系统中巡更机采用3.6v可充电电池供电,充电电源由usb接口的5v电源线提供,电源电压监测电路如图2所示。其吕ams1117是一个dc-dc电压变换器,其输入端为usb接口的5个电源线,输出端为3.3v电压,以此电压为3.6v电源充电。max9117是一个带有1.245v基准电压(vref)的比较器。当电池电压下降到3v以下时,led点亮,指示电量不足。
pdiusbd12是一种性能优化的usb器件。它是一种与微控制器进行通信的高速爱用并行接口,它同时也支持本地dma传输。设计人员可以在各种不同类型的微控制器中选择出最合适的微控制器,而且不需要专用的开发设备。这种组件方式增强了系统开发的灵活性,减少了开发时间、风险和费用,是开发usb外设的一种快捷和经济的途径。pdiusbd12符合usb1.1规范,也符合大多数在规范,如成像类、大容量存储类、通信类、打印类和人工输入设备等。因此,pdiusbd12非常适合数设备,如打印机、扫描仪、外部大容易存储器(zip驱动器)和数码相机等的接口芯片。它使得当前使用scsi的系统可以立即降低成本。
2电子巡更系统软件设计
2.1巡更机固件程序
巡更机固件程序从功能上主要分为两部分。
①信息钮扣的读取操作程序。这一部分实现mcu主器件的初始化、读取信息钮以及对ds1302和24lc64的读写操作。调试时要注意i2c总线的时序问题。巡更机固件程序采用c语言编程。信息钮读取操作程序流程如图3所示。
②mcu和usb接口的通信程序。这一部分程序要实现将24lc64中的数据经usb接口读入到上位计算机中。usb接口芯片pdiusbd12的端点适用于不同类型的设备,可通过命令配置为4种不同的模式:模式0(非同步传输)、模式1(同步输出传输)、模式2(同步输入传输)和模式3(同步输入输出传输)。pdiusbd12带有三个端点,即端点0、端点1和端点2。这里仅列出模式0(非同步传输)时各端点的配置表格,如表1所列。
表1模式0各端点配置
端点号端点索引传输类型端点类型方向最大数据包容量/b
00
1控制输出
控制输入缺少值输出
输入16
16
12
3普通输出
普通输入普通
普通输出
输入16
16
24
5普通输出
普通输入普通
普通输出
输入64×2(双缓冲区)
64×2(双缓冲区)
本程序设计时,使用pdiusbd12的端点1和端点2进行上位计算机与巡更机mcu之间的命令和数据的传输。端点1和端点2设置成模式0,其中端点1进行命令的传输和应答,端点2用于数据的传输。端点1接收上位计算机发送过来的8字节的读指令,指令正确回应后,使用端点2返回读成功数据。通信中所使用的端点情况如图4所示(括号内为使用的端点号)。
pdiusbd12收到上位计算机的数据包时,就以中断的方式通知巡更机的mcu。固件程序工作过程如下:当pdiusbd12从usb收到一个数据包时,pdiusbd12就会对mcu产生中断请求,mcu立即响应中断。巡更机固件程序将数据包从pdiusbd12内部缓冲区移到数据缓冲区,并清零pdiusbd12的内部缓冲区,以使之能接收新的数据包。在断处理程序中,mcu判断产生的中断类型,并进行相应的处理。其中断程序流程如图5所示。
2.2巡更机驱动程序
windows98和windows2000已经为一些usb标准设备提供了驱动程序,巡更机目前还不是标准的计算机外设,所以必须针对巡更机的特点来编写驱动程序。本设计中巡更机驱动程序是通过windowsddk来开发的,它是microsoft公司提供的一个开发windows驱动程序的工具,ddk提供了编译驱动程序的环境。该巡更机的驱动程序是wdm类型的,采用vc 编程。
驱动程序中对usb进行操作的请求都应调用系统例程,将其转化为一个urb结构,即usb请求块(usbrequestblock),然后使用系统级的irp将其提交。该驱动程序由四个模块组成:初始化模块、即插即用管理模块、电源管理模块和i/o控制模块。
①初始化模块。driverentry为驱动程序的入口处,通过它来执行大量的初始化函数。
②即插即用管理模块实现设备的热插拔和动态配置。驱动程序初始化完成后,接着对设备进行初始化,这主要是通过即插即用(pnp)管理器调用驱动程序中的adddevice和irp_mj_pnp两个例程来完成的。当驱动程序从pnp管理器中收到irp_mn_start_device请求时,驱动程序启动设备,并且准备好处理i/o操作。
③电源管理模块负责设备的唤醒和挂起。电源管理器(powermanager)从整个系统的角度来管理电源,所有与电源相关的irp都是由它发出的,它发出的请求包可以指定一种新的电源状态以及查询或更改一种状态。支持电源管理的驱动程序,在最大程序地帮助windows合理地利用资源方面起着重要作用。值得注意的是,与电源相关的irp必须在同步操作上有非常严格的要求。例如,任何时候在一个pdo(物理设备对象)中。只能有一个irp_mn_query_power或者irp_mn_set_power;电源irp的处理要尽可能地快等。
④i/o控制模块完成输入输出请求的大部分功能。设备的控制由设备控制例程(irp_mj_device_control)负责,主要是对设备进行一些操作命令的发送或者标志的读取。数据读写主要由irp_mj_read和irp_mj_write两个例程完成,只需在adddevice中申请一个符号链接,并且在startdevice中将此符号链接激活即可。
2.3应用程序设计
在win32系统中,每一个设备对象都抽象为文件,此时的应用程序只需通过几条简单的文件操作api函数,就可以实现与驱动程序中某个设备的通信。在本设计中,应用程序是该电子巡更系统的中心,采用visualc 编程。其主要功能有:启动或关闭usb设备、检查usb设备、设置巡更参数、从巡更机中读取数据以及显示、比较、存储数据等。
usb接口范文篇6
关键词:usb总线接口芯片ch371单片机
1引言
ch371是一种usb总线通用接口芯片。该芯片具有8位数据总线以及读、写、片选控制线和中断输出,可以方便地挂接到单片机、dsp、mcu等控制器的系统总线上;在计算机系统中,通过ch371的配套软件可提供简洁易用的操作接口,从而使其与本地端的单片机通讯就如同读写硬盘中的文件一样简单。由于ch371屏蔽了usb通讯中的所有协议,因而可在计算机应用层与本地端控制器之间提供端对端的连接。在不需要了解任何usb协议或者固件程序甚于驱动程序的情况下,就可轻松地将并口、串口产品升级到usb接口。
ch371的主要特点如下:
●屏蔽了usb协议,可在计算机应用层与本地端之间实现端对端的连接。
●具有单向数据流和请求加应答两种通讯模式,并支持伪中断。
●可自动完成usb配置过程,完全不需要本地端控制器作任何处理。
●采用标准的usb1.1接口,即插即用,d 引脚内置上接电阻。
●内置4个端点,支持usb的控制传输、批量传输、中断传输。
●带有通用windows驱动程序,可提供设备级接口和应用层接口。
●具有通用本地8位数据总线,可用4线控制读选通、写选通、片选输入和中断输出。
●占用16个地址,可选择直接地址方式或者复用地址方式。
●内置输入输出缓冲区,能以中断方式通知本地端控制器传输数据。
●内置i2c主接口,因而应用层可以直接读写外挂的i2c从设备。
●在主控方式下可以提供16根据输入信号线或12根独立控制的输出信号线。
●内置上电复位电路,可提供高电平有效复位输出和低电平有效复位输出。
●内含可选的看门狗电路watch-dog,能为本地端控制器提供监控。
●具有dip28、sop28、dip24、chip等多种封装形式。
2引脚功能
ch371的引脚排列如图1所示,表1所列是其引脚功能。
表1ch371的引脚功能
28脚封装
的引脚号24脚封装
的引脚号引脚名称类型引脚说明
2824vcc电源电源正端
129gnd电源接地
1411xi输入晶体振荡输入端,带偏置电阻
1310xo输出晶体振荡反相输出端
107d 双向usbd 数据线,内置上拉电阻可控
118d-双向usbd-数据线
96off输入用于关闭d 上位电阻,高有效,带下拉
22151912d7d0双向8位双向数据总线,带上拉,可直接输入和独立控制输出
44rd输入读选通输入,低有效,带上拉,同时用于看门狗的清除输入
33wr输入写选通输入,低有效,带上拉
2723cs输入片选输入,低有效,带下拉
22ale输入地址锁存使能,高有效,带上拉,在下降沿可锁存数据总线的复用地址
11int输出中断输出,传输成功,低有效
585部分支持a3a0双向4位地址输入线,带上拉,可直接输入和独立控制输出
2421scl输出i2c接口时钟线
2320sda双向i2c接口数据线,开漏输出,带上拉
2522rst输出上电复位和看门狗复位,高有效
26不支持rst输出上电复位和看门狗复位,低有效
3应用
3.1与usb总线的连接
图2是ch371与usb总线的接口连接电路,ch371芯片可以直接使用usb总线的5v电源。电容c3和c4用于电源退耦;将电阻r1和r2串接在ch371与usb总线之间可进行阻抗匹配;晶振x1、电容c1和c2用于ch371芯片的时钟振荡电路。ch371芯片的scl和sda信号线可以直接连接i2c接口的从设备,如连接24cox器件以用来存储系统断电后不能丢失的重要数据,也可以存储身份识别数据、记费数据等,由于24cox中的数据只有计算机应用层才能够存取。
3.2与单片机的接口电路
ch371芯片具有通用的被动并行接口,可以直接连接多种单片机、dsp和mcu。图3所示是ch371与mcs-51系列单片机的接口电路,ch371可通过d7~d0、rd、wr、cs、ale直接挂接到at89c51的系统总线上。连接ale而不连接a3~a0则采用复用地址方式,连接a3~a0而不连接ale则采用直接地址方式。当采用复用地址方式时,ch371的a3~a0脚空闲,此时可以参考主控方式将a3~a0用于led驱动或状态输入等;当采用直接地址方式时,应该将ch371芯片的ale引脚悬空或者接高电平,然后通过a3~a0直接输入地址。该电路中,ch371可向at89c51提供上电复位信号rst。ch371的中断输出int连接到u2的外部中断into,反相器u5用于简单的地址译码,sram器件62256的地址为8000h-ffffh,ch371的地址为0000h-7fffh(实际只需要16个地址)。
3.3主控方式应用
图4是ch371在主控方式下的应用电路。该电路实际是基于ch371的主控方式设计的8通道数据采集器。可以看出:包括ch371在内,该电路只用到了三个集成电路,并且不需要任何单片机、dsp、mcu等控制器。ch371芯片的双向引脚a3~a0应该设置为输出,其中a3用于以低电平启动模数转换,a2~a0用于选择采集通道,双向引脚d7~d0应该设置为输入,用于输入采集到的结果,cs、ale用于输入采集状态。实际电路应该采用精确的参考电压,并添加辅助电路(如电源退耦电容等)。另外,也可以用自带多通道选择器的模数转换芯片来代替u6和u7,如8通道ad芯片max158等。
3.4与单片机的接口程序
下面是u2(mcs-51单片机)与u1(ch371)的接口参考程序:
;*********************
;需要主程序定义的参数
;ch371_pageequ00h;ch371所在的页面地址,地址译码后自动片选
;ch371_systemequ02h;ch371系统功能设定寄存器的地址偏移
;ch371_configequ02h;ch371设备配置信息寄存器的地址偏移
;ch371_int_setequ06h;ch371中断数据设定寄存器的地址偏移
;ch371_statusequ06h;ch371传输状态信息寄存器的地址偏移
;ch371_lengthequ07h;ch371数据长度寄存器的地址偏移
;ch371_bufferequ08h;ch371o数据缓冲区的起始地址偏移
;save_statusdata29h;保存传输状态信息,根据需要可选
;save_lengthdata2ah;当前数据缓冲区中的长度,用于保存下传长度
;save_bufferdata30h;数据缓冲区,用于保存接收到的下传数据
;*********************
;初始化子程序
;use:acc,dptr
ch371_init:movdph,#ch371_page
;ch371所在的页面地址,地址译码后自动片选movdpl,#ch371_length;ch371数据长度寄存器的地址偏移
图3
mova,#ofh
movx@dptr,a;置上传数据长度寄存器为15,暂时没有数据上传
clra;尚未有数据下传
movsave_length,a;保存下传数据长度
setbito;置外部信号为下降沿触发
clrieo;清中断标志
setbpxo;置高优先级
setbexo;允许中断
ret
;上传数据子程序
;entry:ro指向存放了准备上传数据的缓冲区,r7准备上传的数据长度0至8
;use:acc,b,r0,r7,dptr
ch371_upload:movb,r7;将数据长度暂存到b中
movdph,#ch371_page;ch371所在的页面地址,地址译码后自动片选
movdpl,#ch371_buffer;ch371数据缓冲区的起始地址偏移
mova,r7;上传数据长度
jzch371_upload_o;数据长度为0则不必写入
ch371_upload_1:mova,@ro;读取一字节的数据
incro;指向下一个数据的地址
movx@dptr,a;写到ch371的上传数据缓冲区
incdpl
djnzr7,ch371_upload-1;继续读取上传数据直至结束
ch371_upload_0:movdpl,#ch371_length;ch371数据长度寄存器的地址偏移
mova,b
movx@dptr,a;将本次数据的长度置入上传数据长度寄存器
ret
;中断服务子程序
;use:堆栈6字节,工作寄存器组1的ro,r7
ch371_inter:pushpsw;现场保护
clrieo;清中断标志,防止重复执行,对应于into中断
pushacc
pushdpl
pushdph
setbrso;psw.3,切换至工作寄存器组1
movdph,#ch371_page;ch371所在的页面地址,地址译码后自动片选
movdpl,#ch371_status;ch371传输状态信息寄存器的地址偏移
movxa,@dptr;读取传输状态信息寄存器
movsave-status,a;保存传输状态
movdpl,#ch371_length;ch371数据长度寄存器的地址偏移
jbacc.0,ch371_int_up;传输状态信息寄存器位0为1,则指示上传完成
;是数据下传完成中断
movxa,@dptr;读取下传数据长度寄存器
movsave_length,a;保持下传数据长度
jzch371_int_ret;下传数据长度为0,则直接退出中断
movdpl,#ch371_buffer;ch371数据缓冲区的起始地址偏移
movro,#save-buffer;单片机内部的数据缓冲区,用于存放下传数据
movr7,a;用于读取数据的计数
ch371_int_down:movxa,@dptr;读取一字节的下传数据
incdpl;指向下一个数据的地址
mov@ro,a;保存到数据缓冲区
incro
djnzr7,ch371_int_down;继续读取下传数据直至结束
sjmpch371_int_ret;接收完下传数据,退出中断
;是数据上传完成中断
ch371_int_up:mova,#0fh;15
movx@dptr,a;置上传数据长度寄存器为15,暂时没有后续数据
ch371_int_ret:;中断返回
popdph
popdpl
popacc
poppsw;恢复寄存器并选择工作寄存器组0
reti;中断返回
;
;*********************
usb接口范文篇7
关键词:usb数据采集pdiusbd12
1usb协议和芯片选择
理解好usb协议是usb系统开发的第一步。usb协议版本包括1.0、1.1和2.0,usbotg是对2.0版本协议的补充。虽然usb协议内容繁多且复杂,然而,对usb开发影响较大的却只是少数部分,以下对协议版本1.1[1]中这些部分进行介绍。
1.1usb协议
一般,每个usb设备由一个或多个配置(configuration)控制其行为。使用多配置原因是对操作系统的支持;一个配置由接口(interface)组成;接口则是由管道(pipe)组成;管道与usb设备的端点(endpoint)对应,一个端点可以配置为输入输出两个管道。在固件编程中,usb设备、配置、接口和管道都用描述符报告其属性。
图1为usb多层次通信模型。端点0默认配置为控制管道,用来完成所规定的设备请求(usb协议第九章)。其它端点可配置为数据管道。对开发而言,主要的大数据传输都是通过数据管道完成的[2]。
usb传输类型包括批量传输、等时传输、中断传输和控制传输,每种传输类型的传输速度、可靠性以及应用范围都不同[3]。控制传输可靠性是最高的,但速度最慢;等时传输速度快,满足实时性,但可靠性低。在具体应用中,端点传输类型可根据传输速度和可靠性选择。
在usb通信协议中,主机取得绝对主动权利,设备只能是“听命令行事”,通过一定的命令格式(设备请求)完成通信。usb设备请求包括标准请求、厂商请求和设备类请求。设备的枚举是标准请求命令完成的;厂商请求是用户定义的请求;设备类请求是特定的usb设备类发出的请求,例如海量储存类、打印机类和hid(人机接口)类。固件编程中设备请求必须遵循一定的格式,包括请求类型、设备请求、值、索引和长度。
1.2usb接口芯片选择
usb接口芯片的类型有:
(1)按传输速度的高低:低速(1.5mbps)和全速(12mbps)可选usb1.1接口芯片,例如philips公司的pdiusbd12和cypress公司的ez-usb2100系列;高速(480mbps)可选usb2.0接口芯片,例如philips公司的isp1581和cypress公司的cy7c68013。
(2)是否带mcu(微控制器):一般philips公司的都不带mcu,cypress公司大多都带,例如an2131。
(3)是否带主控器功能:不需要主机参与,主从设备间可进行数据传输,芯片有philips公司的isp1301和cypress公司的sl811hs等。
还有专门用途usb芯片,例如闪存专用芯片ic1114。工程中用户可根据自己的需求选择一款性价比高的芯片。另外可用开发资源也是要考虑的重要方面,例如开发板和芯片厂商提供的网上资源,可大大降低开发的难度。
2基于usb接口的数据采集系统的设计
2.1系统简介
该系统能够实现16路温度数据自动采集,系统的组成框图如图2所示。主要包括8个组成部分:中央处理器选用at89c52芯片,完成各部分控制功能和usb传输协议;实时时钟记录当前测量温度的时间;温度传感器和接口电路主要完成温度采集,并读入mcu处理;复位电路完成对mcu的上电复位和电源电压监视;看门狗电路用来监视mcu是否工作;存储电路主要存储采集到的温度数据以及采集的实时时间;电源电路主要为各部分提供要求的电源;外设与主机间的通信电路采用usb接口。
2.2接口芯片选择
接口电路采用philips公司的pdiusbd12[4](以下简称为d12)芯片。主要因为d12芯片信息、开发资源丰富,具有较高的性价比。
d12芯片的主要特点包括:
·符合usb1.1版本规范;
·可与任何外部微控制器/微处理器实现高速并行接口(2mb/s);
·采用goodlink技术的连接指示器,在通信时使led闪烁;
·主端点的双缓冲配置增加了数据吞吐量并轻松实现实时数据传输;
·在批量和等时模式下均可实现1mb/s的数据传输率;
·完全自治的直接内存存取dma操作。
2.3接口硬件设计
由d12接口组成的通信电路原理如图3所示。关于d12的各引脚说明见参考文献[4]。多路地址/数据总线ale接单片机的ale脚,这样使用movx指令可以与d12接口,对d12操作就象对ram操作一样,此时忽略a0(命令口和数据口地址线)的输入。因为没有使用dma传输方式,所以没有用到dmack_n、eot_n和dmreq_ndma引脚。int_n是usb中断请求脚,发出usb中断请求;gl_n是goodlink指示灯,在调试过程中非常有用,在通信时会不停闪烁。如果一直亮或者一直暗,表示usb接口有问题,如果d12挂起,则led关闭。clkout是d12的时钟输出,可以通过固件编程改变其频率,在调试固件时,可作为参考。
2.4接口程序设计
usb接口程序设计是usb开发的核心。usb接口程序设计包括三部分:单片机程序开发、usb设备驱动程序开发、主机应用程序开发。三者互相配合,才能完成可靠、快速的数据传输。
2.4.1单片机程序设计
单片机程序(又称固件)采用模块化程序设计,主要模块包括:数据采集模块、数据处理、监控模块和数据通信模块。模块化设计的优点是可靠性高、可读性好、升级简单。
通信模块固件结构如图4所示。主循环和中断服务程序之间的数据交换可通过事件标志和数据缓冲实现。图3中usb中断引脚int_n发出中断请求,中断服务程序根据中断请求类型操作,设置事件和填充数据缓冲区再传输给主循环;标准设备请求程序是对标准请求进行处理;用户可以根据实际需要编写厂商请求,例如发出启动或停止数据采集命令。
图3usb接口连接示意图
2.4.2驱动程序设计
驱动开发工具有ddk和第三方开发工具。其中ddk开发难度最大,第三方开发工具有driverstudio和windriver等。driverstudio难度适中,而windriver则属于应用层驱动开发,难度小,但效率低,并存在问题。
ddk驱动程序开发工作包括:开发环境设置(vc编译环境)[5]、驱动程序设计[6]、安装文件(inf文件)设计。
驱动程序设计采用wdm(windowsdrivemode)。wdm设备驱动程序提供了一个参考框架,大大降低了由ddk书写驱动程序带来的难度。
d12驱动使用的例程包括:driverentry、adddevice、dispatchpnp、dispatchread、dispatchwrite和dispatchdevicecontrol例程,以下是d12的wdm驱动程序函数:
driverobject->majorfunction[irp_mj_create]=d12_create;
driverobject->majorfunction[irp_mj_close]=d12_close;
driverobject->driverunload=d12_unload;
driverobject->majorfunction[irp_mj_device_control;
=d12_processioctl;
driverobject->majorfunction[irp_mj_write]=d12_write;
driverobject->majorfunction[irp_mj_read]=d12_read;
driverobject->majorfunction[irp_mj_system_control;
driverobject->majorfunction[irp_mj_pnp]=d12_dispatch;
driverobject->majorfunction[irp_mj_power]=d12_process-powerirp;
driverobject->driverextension->adddevice=d12_pnpadddevice;
驱动程序与应用程序和硬件之间通信都是irp(i/o请求包)完成的。irp_mj_pnp主要是实现usb即插即用,例如设备的添加、删除和资源的分配;irp_mj_power实现电源管理,例如设备的挂起和唤醒;irp_mj_create(创建)、irp_mj_close(关闭)、irp_mj_
device_control(设备控制)、irp_mj_write(读)和irp_mj_read?穴写?雪是主要完成数据通信的函数,实现管道的创建、关闭和数据读写。其中设备控制具有输入输出缓冲区,可实现读和写功能;adddevice和driverunload实现设备管理,在设备添加和卸载时,创建和删除设备,以及管理资源分配。
驱动程序通过安装文件(.inf文件)中pid(产品识别号)和vid(厂商识别号)识别usb设备。
2.4.3应用程序设计
主机应用程序的编写使用vc编译环境中的api函数实现。
应用程序的编程方法与串口编程类似。首先必须查找设备,打开设备的句柄;然后进行读写和控制操作;最后是关闭设备句柄。为了提高效率,可使用多线程技术实现读写。
应用程序通过guid(注册表驱动唯一识别号)查找驱动程序。
2.5调试
首先是固件调试,可用仿真机完成,驱动开发工具windriver也是很好的固件调试工具,例如测试标准请求、厂商请求和管道读写。其次是驱动调试,这是usb接口开发最困难的部分,调试工具可用driverstudio中softice工具和文献[6]中debugprint跟踪工具,监视工具bushound可监视usb的实际数据传输情况。需要注意的是,驱动调试必须在应用程序正确调用的前提下。
2.6usb传输速度
usb接口范文篇8
关键词:usbdsppdiusbd12图像传输接口设计
引言
usb接口(universalserialbus)是一种通用的高速串行接口。它最主要的特点是它的高速传输特性。usb1.1理论速度极限可以达到12mb/s,usb2.0可达到480mb/s。这样,它可以很好解决大数据量的数据在嵌入式系统与pc机之间的互传问题;同时,它支持热插拔,并且最多同时支持127个外设,非常适合嵌入式系统的应用。
本次设计是在一个已有的dsp图像采集嵌入式系统的基础上,为它配接上一个usb1.1的接口,以达到dsp图像采集系统高速地将图像数据回传到pc机中的目的。设计的要求主要有:
①在原有平台提供的接口基础上,加入一个低成本、高速度的usb接口;
②通过usb接口,实现pc机对dsp图像采集系统的操作与控制;
③实现图像数据在dsp摄像系统与pc机之间高速的双向传输。
基于以上几点可以看出,本方案最主要的特点是成本低廉且传输速度高。
1硬件方案选择与设计
1.1方案选择
对于基于dsp平台的usb接口设计,经过综合考虑了几种方案之后决定,采用一个不带mcu内核的usb接口芯片pdiusbd12(成本非常低,一片pdiusbd12的价格仅为20元),再加上简单的电路和时序调整电路。
这种芯片仅仅完成usb底层的数据链路级交换,并提供给本地微控制器一个并行的接口,但是它并不完成协议层的工作。协议层的工作需要对微控制器编程,控制usb接口芯片来实现usb协议。所以,开发难度相对来说大一些,要做的编程工作也多一点。但是这套方案的成本非常低,而且由于直接用dsp作为微控制器,没有原单片机的瓶颈限制,所以可以实现很高的数据传输速率。该系统的原理框图如图1所示。
由于pdiusbd12的并行接口时序较慢,只能达到2mb/s。这个速度相对于dsp来说比较低,而且有些地方不是简单地在程序中加入延时就可以调整,所以需要一个时序调整电路来完成它们之间的配合。
图2tms320c2xx写时序
1.2pdiusbd12芯片
pdiusbd12芯片是由philips公司推出的一种usb1.1接口芯片。它可以工作在5v或者3.3v的工作电压下;具有8位数据总线,且有完全自治的dma传输操作。它还具有可控制的软件连接(softconnect)功能,可以保证在微控制器可靠完成初始化之后再连接上usb总线。另外,它还有一个led驱动脚,可以外接led来监测usb的枚举过程和数据传输过程。当usb接口枚举完成,并且成功配置以后,led将会一直点亮;而在枚举过程以及usb数据通信过程中,led只是有节奏地闪烁。
pdiusbd12只占用微控制器的两个地址资源。也就是说,它只有一根地址线。其中一个地址用来向芯片中写命令,另外一个地址用来向燕片中写数据或者从芯片中读取数据。
pdiusbd12一共有三组端点:端点0完成控制传输;端点1可以配置成中断传输;端点2是主要的数据传输端点。它有64b的缓冲区,如果加上它的双缓冲机制,就有128b的缓冲区;它可以配置成批量传输模式,或者同步传输模式。
总的来说,pdiusbd12是一款性能优异,价格相对软低的usb接口芯片。
1.3时序芯片
为了降低成本、简化电路,本方案不使用dma传输方式,而以ti公司的tms320c2xx作为微控制器(使用20mhz晶振)。它的并口速度非常高,远远高于pdiusbd12所要求的最高限制2mb/s。此处是硬件设计最关键的地方。
经过详细的时序分析发现,大部分问题可以通过在dsp固件设计的加入延时,或者设置dsp的wsgr寄存器来解决。但是有一个问题,必须在硬件上加以解决。图2是dsp(tms320c2xx)的写时序。
图3pdiusbd12写时序
图2中,参数th(w-d)是指在we信号变高(无效)以后,所写的数据将仍然保持有效的时间。这个值最小为3ns,最大为14ns,所以所写的数据在we信号无效以后还会维持有效,大约3~14ns(实际的延时介于这两个值之间)。
图3是pdiusbd12所要求的写时序。图中,参量twdh是与dsp(tms320c2xx)参量th(w-d)相对应的另外一个参量。这个参量反映了pdiusbd12要求微控制器在向其中写数据时,所写的数据在wr信号无效之后,要继续保持有效的时间。这个参量最小值为10ns。也就是说,pdiusbd12要求所写的数据最少要保持有效10ns(在wr无效之后)。
由此可以看出,dsp(tms320c2xx)的写时序不能可靠地保证满足pdiusbd12的要求,而且这个问题无法通过软件加延时的方法来解决,必须通过硬件来处理。经过分析对比,最后决定采用一个很简单但是后来事实证明非常有效的方法来调整它们之间的时序。那就是在dsp(tms320c2xx)与pdiusbd12的总线之间加一个双向缓冲器-74ls245。这个芯片可以在它们的时序之间引入一个延时。虽然这个延时并不可靠、但是由于dsp(tms320c2xx)本身会在wr无效后,继续保持数据有效一段时间(前面已讲过),这要仅仅需要将延时适当延长一点就可以了。74ls245所造成的延时典型值为15ns,最小也为8ns。这样,加上原来dsp写时序的延时,就可以满足pdiusbd12所要求的写时序了。
另外由于加入74ls245所造成的对其它接口时序的影响,可以通过设置dsp(tms320c2xx)的wsgr寄存器来消除,所以这个方案是可行的。(事实上,后来制造好的电路也证明了这个方案是完全可行的)
对其余时序上的配合,经过仔细的计算与核对证明,也是完全可行的。在硬件上,哂方案还采用了一片gal(16v8)来实现对pdiusbd12芯片的片选,以及实现对它的软件和手动复位。硬件总体框图如图4所示。
2软件设计
2.1固件设计
由于采用的是不带mcu内核的usb接口芯片,所以关于usb1.1协议规范的实现都必须靠dsp(tms320c2xx)控制pdiusbd12芯片来完成。固件的主要设计任务是:在dsp(tms320c2xx)的平台上编写程序,以完成usb1.1规范所要求的标准请求及用户根据产品需要自己定义的请求。
为了不影响程序的执行效率,本方案采用中断方式完成固件的编写;同时,为了保证程序的模块化及良好的可移植性,在设计中采用分层结构进行固件的编写,如图5所示。
最下层是硬件接口层,完成硬件上pdiusbd12与dsp(tms320c2xx)的对接。主要是dsp(tms320c2xx)向pdiusbd12中写入数据或者命令,以及从中读取数据。
中间层主要有两个模块,用来完成pdiusbd12的命令接口和中断处理子程序。命令接口是指按照pdiusbd12的命令格式,完成dsp对它的控制。它的基本命令格式是:dsp先向其中的命令地址写入某一条命令,接着从它的数据地址写入或者读出一系列的数据。中断处理子程序是判断中断的产生源,然后跳转到相应的处理子程序。这些子程序不做过多的处理,而仅仅是将命令数据读出然后置标志位,或者是将某些数据送出。
最上层是主循环程序,以及对于usb1.1标准协议请求(这些请求主要是在usb1.1协议规范的第九章中定义的)和用户自定义请求的处理程序。主循环的主要工作是检查标志位。如果标志位被置位,则调用处理子程序,判断是标准请求还是用户自定义请求,然后调用相应的处理程序加以处理,完成请求。
这样分层的好处是:主循环程序在检查标志位以外的时间可以进行其它工作,提高固件的运行效率。
编程过程中,由于涉及了一些严格的接口时序配合问题,所以,整个固件的编写工作全部采用dsp(tms320c2xx)的汇编语言;用的是cc2000编程开发工具。
2.2pc机软件的设计
pc机的驱动程序由philips公司提供。然后,用vc 6.0,通过调用api函数,编写pc的应用程序。这样即可实现pc机对dsp(tms320c2xx)摄像系统的摄像控制以及图像的传输。
主要使用的api函数是deviceiocontrol()、readfile()、writefile()。其中deviceiocontrol()用于pc(主机)向dsp图像采集系统发送请求;readfile()和writefile()分别用于从图像采集系统中读出数据以及向图像采集系统中写入数据。
在设计过程中必须注意的问题是:由于usb接口是主-从方式的接口,它的一切传输过程都必须通过主机向外设发送请求后才可以开始,所以在使用readfile()、writefile()读写数据之前,必须先通过deviceiocontrol()向图像采集系统发送请求。
3结果及分析
usb接口范文篇9
关键词:usb接口,虚拟示波器,ch371,高速数据采集
一、引言
对于学校教学实验以及某些特定需求来说,目前市场上的模拟及数字示波器也许并不适用,价格高昂、体积较大且很多专业功能并不实用。而现在电脑的普及程度也达到了相当的规模,利用电脑以及附加的数采模块实现一个灵活便捷的虚拟示波器能够满足大多数的工作、学习和开发需要,并且可以通过较低代价的硬件和软件升级实现相当复杂的信号处理功能,能够以较低的成本、较小的体积实现配置灵活的智能仪器组合;完全可以与便携电脑结合,构成便携式检测维修工作站。目前已经有计算机并口通信的数据采集器,但是usb的应用日趋广泛和深入,如果将usb功能融合在里面则可以实现更高的数据传输率、更方便的使用方式,更为优越的体现出虚拟仪器的性能。
二、硬件设计
此虚拟示波器的数据采集器由以下功能模块组成:前端信号变换模块、高速模数转换模块、高速数据缓冲模块、单片机控制模块、usb接口模块和电源模块。前端信号变换、高速数据采集有成熟的方案并且可根据需要的指标,譬如采样率、量程控制、采样深度等进行设计,我们这里主要讨论usb接口部分的开发。
usb接口的开发以往都是一个令人头痛的问题,尽管很多设计者向往usb接口高速传输、自主供电、即插即用的优点,但较难逾越它的协议固件开发和驱动程序开发的障碍。在这个方案里,笔者选用了一款不需要开发协议固件和驱动程序的usb总线接口芯片。
南京沁恒公司()推出的ch371是一个usb总线的通用接口芯片,它利用硬件逻辑屏蔽了usb通讯中的所有协议,在计算机应用层与本地端控制器之间提供端对端的连接。基于ch371,设计者不需要了解任何usb协议、固件程序以及驱动程序,可以轻松地将原来的并口、串口的产品升级到usb接口,以较低的风险和成本享用usb接口带来的优越性。
使用时在本地端,ch371具有8位数据总线和读、写、片选控制线以及中断输出,就像操作一般外设芯片一样方便地挂接到dsp、mcu等控制器的系统总线上;在计算机端,ch371的配套软件包括通用驱动程序以及应用软件包,提供了简洁易用的操作接口,与本地端的单片机通讯就如同读写硬盘中的文件一样简单,开发者可以使用vb、vc、c builder等高级语言进行开发。一般情况下,基于ch371设计usb产品不必考虑usb通讯协议、固件程序、驱动程序、配置过程、底层数据传输过程。设计者所要做的工作与设计并口、串口的产品一样,包括两件事:一是从计算机的应用层发出数据传输请求并接收应答;二是当usb产品的控制器被通知有数据传输请求时,作出应答。
同时,ch371在提供了透明的usb协议的基础上还提供了i2c器件的直接管理、16个地址的直接读写以及复位、看门狗等功能,本地端甚至不使用单片机就可完成简单的控制功能,因此具有较强的功能适应性,能够满足不同场合的需要,有效的降低系统成本。
在本系统中使用的是sop28封装的产品,他的管脚定义如下表:
根据不同的工作方式,芯片的接口类型可以有以下几种:被动并行接口、i2c主接口、主控方式接口。其中被动并行接口是最常用的方式,它提供单片机与计算机的连接,ch371作为单片机的一个被动外设;i2c主接口是ch371在计算机端程序的控制下不经过单片机直接读写一个eeprom器件(譬如24c04等),经常用于usb外设的产品信息纪录;主控方式接口是不使用单片机,由计算机端程序直接控制ch371提供的16个地址的8位数据读写或者是十几根io口线,此方式主要用于完成相对简单的外部控制任务。这几种接口方式并非完全对立的,可以根据需要灵活配置。在此虚拟示波器中则将其使用为单片机的一个外设器件,同时将a3~a0用于主控方式由计算机控制四只led。
单片机对于ch371的控制依靠对其内部的16个寄存器的操作来实现。这16个寄存器的地址有两种定义方式。一种是上电复位后默认为直接地址方式,a3~a0四个管脚为寄存器地址,这种方式较为简单,但是需要使用单片机较多的io口资源;另一种是当ch371检测到ale脚上的上升沿信号后,切换到复用地址方式,寄存器地址由数据总线的d3~d0来控制,根据ale的跳变来判断是寄存器操作还是数据读写。在此设计中由于大容量数据缓冲需要使用到74373作为地址锁存,所以即使使用直接地址方式也无需多占用单片机资源,但是为了将a3~a0节省出来驱动led所以选用复用地址方式。
根据系统的要求我们设计硬件如下。
usb接口提供数据交换及电源供应(经适当变换后供高速ad使用),ch371在12m晶振下倍频工作,提供与单片机接口的同时提供看门狗复位输出功能,i2c主控功能没有使用,a3~a0可以由计算控制驱动4只led作为工作显示信号。单片机89c52的p1口组用于控制数据采集模块,包括量程转换控制、ad触发信号、采集数据溢出信号等;高速缓存62256通过低功耗的cpld控制存放高速ad采集的结果,单片机定时将其中数据读出经ch371传送到计算机的数据显示和分析软件,实现虚拟示波器功能。单片机、ch371和ram部分原理图如下:
图三单片机、ch371和ram部分原理图
三、软件设计
单片机端软件:
单片机端软件主要完成数据采集控制、数据报告这两个功能。其中数据采集控制根据计算机端软件设定的增益、时基、触发等参数控制数据采集模块,这里面要用到计算机向单片机发送少量的控制信息;数据报告功能则需要单片机将缓存中的一个采集周期的所有数据传送给计算机端软件,这属于大批量数据的传输。我们把介绍的重点放在单片机与计算机的通信上面。
单片机与计算机通信是通过对ch371的寄存器操作实现的,有关其寄存器定义的具体情况请参考数据手册。
在应用中需要注意的是,ch371提供的单片机接收缓冲区为8个字节,多于8个字节的计算机下传数据被切分;而单片机的发送缓冲区也是8个字节,多于8个字节的上传数据需要分多次上传。另外,ch371的中断包括了上传及接受成功,中断发生后具体的情况需要由传输状态寄存器来辨别;同时其中断电平是单稳态的,一个事件发生后中断信号跳变,但仅维持一个短暂的脉冲便恢复,这是为了配合不同速度的处理器而作的处理。
单片机与计算机的usb通信主要功能子程序示例如下:(请在使用时加入ch371的相应寄存器的地址定义)
file://**********ch371初始化程序******************************
voidch371_init()
{
ch371_int_set=0;file://ch371中断数据设定寄存器的地址偏移
ch371_length=0x0f;file://置上传数据长度寄存器为15,表示暂时没有数据上传
save_length=0;file://保存下传数据长度
it0=1;file://外部信号为下降沿触发
ie0=0;file://清中断标志
px0=1;file://置高优先级
ex0=1;file://允许中断
}
file://***********上传数据子程序********************************
voidch371_upload(unsignedcharlen)file://参数传入数据长度
{
unsignedchari;
unsignedchar*up_buf;
unsignedchar*ch371_buf;
if(len!=0)
{
up_buf=&ret_buffer;file://指向数据的地址
ch371_buf=&ch371_buffer;file://指向数据缓冲区
for(i=0;i{
*ch371_buf=*up_buf;file://写入上传数据缓冲区
ch371_buf ;up_buf ;
}
}
ch371_length=len;file://写入本次数据的长度
}
file://********中断子程序使用中断0寄存器组2********
voidch371_inter()interrupt0using2{
unsignedchar*down_buf;
unsignedchar*ch371_buf;
unsignedchari;
ie0=0;file://清中断标志
if((ch371_status&0x01)==0){
file://读取状态信息寄存器,判断数据传输状态
save_length=ch371_length;file://保持下传数据长度
down_buf=&save_buffer;
ch371_buf=&ch371_buffer;
for(i=0;i{
*down_buf=*ch371_buf;file://读取一字节的下传数据
down_buf ;ch371_buf ;
}
}
elsech371_length=0x0f;file://置上传数据长度寄存器为15
}
计算机端软件:
计算机端软件主要功能是模拟一个示波器的界面,实现数据的显示以及满足不同需要的分析功能,同时完成对数据采集硬件的参数设定。在这个设计中已经实现了基本的功能,虚拟示波器的界面如下图。进一步开发后可以实现量程的自动转换、数据的深度分析(譬如波形测量、频谱分析等),甚至可以结合硬件的升级实现波形发生器、逻辑分析仪、扫频仪、网络分析仪等功能。
图四虚拟仪器计算机软件面板图
计算机端有关usb通信的开发不需要了解usb底层驱动,并且芯片生产商已经以动态链接库的形式封装好了面向功能应用的api函数,开发者可以在多种高级语言中调用,功能强大且灵活方便。ch371动态链接库提供的api函数主要包括:设备管理api、数据传输api、中断查询api、i2c操作api和直接控制api。
其中设备管理api对于一般产品开发不需要用到;数据传输api是最重要最常用的一组函数,他提供了多种数据传输模式;中断查询api一般用于usb设备使用到中断传输的场合,我们这里没有用到;i2c操作api用于对ch371控制的i2c器件进行读写,一般用于存放产品信息,我们这里也没有用到;直接控制api是用于ch371直接输入输出信号,包括设置、输入和输出三部分组成,我们使用这一组api实现对led进行控制。
在实际应用中笔者使用vb6作为计算机端应用软件的开发平台,首先要将沁恒公司提供的驱动程序、动态链接库拷贝到计算机中,再将动态链接库的访问入口及函数定义入口添加至vb6项目中,就是将提供的vb6实例程序中的module功能模块添加到自己的工程项目下即可。此时对usb设备的通信编程就几乎和访问本地硬盘中的文件差不多了,具体差别可以通过分析实例程序的句法来解决。下面给出计算机接收与发送数据的相关程序。
optionexplicit''''变量定义
dimmyreqasdemo_req
dimmopenasinteger
privatesubform_load()''''窗口加载事件
dimmlengthaslong
mindex=0
mopen=ch371opendevice(mindex)''''窗体加载时打开设备
ifmopen=-1then
msgbox"无法打开ch371设备"''''加载失败提示
endif
myreq.mcommand=&hff''''用户定义命令
myreq.mbuffer(0)=&h11''''用户定义数据
myreq.mbuffer(1)=&h22''''用户定义数据
mlength=len(myreq)
ch371writedata(mindex,myreq,mlength)''''通过ch371发送命令数据
……
ch371readdata(mindex,myreq,mlength)''''通过ch371接收应答数据
……
endsub
usb接口范文篇10
关键词:通用串行总线usb接口接口标准
一、usb接口背景
在早期的计算机系统上常用串口或并口连接设备。每个接口都需要占用计算机的系统资源(如中断,i/o地址,dma通道等)。无论是串口还是并口都是点对点的连接,一个接口仅支持一个设备。因此每添加一个新的设备,就需要添加一个isa/eisa或pci卡来支持,同时系统需要重新启动才能驱动新的设备。
usb总线是intel、dec、microsoft、ibm等公司联合提出的一种新的串行总线标准,主要用于pc机与设备的互联。usb总线具有低成本、使用简单、支持即插即用、易于扩展等特点,已被广泛地用在pc机及嵌入式系统上。
二、usb总线优缺点
1.优点
(1)使用简单
所用usb系统的接口一致,连线简单。系统可对设备进行自动检测和配置,支持热插拔。新添加设备系统不需要重新启动。
(2)应用范围广
usb系统数据报文附加信息少,带宽利用率高,可同时支持同步传输和异步传输两种传输方式。一个usb系统最多可支持127个物理设备。usb设备的带宽可从几kbps到几mbps(在usb2.0版本,最高可达几百mbps)。一个usb系统可同时支持不同速率的设备,如低速的键盘、鼠标,全速的isdn、语音,高速的磁盘、图像等(仅usb2.0版本支持高速设备)。
(3)较强的纠错能力
usb系统可实时地管理设备插拔。在usb协议中包含了传输错误管理、错误恢复等功能,同时根据不同的传输类型来处理传输错误。
(4)总线供电
usb总线可为连接在其上的设备提供5v电压/100ma电流的供电,最大可提供500ma的电流。usb设备也可采用自供电方式。
(5)低成本
usb接口电路简单,易于实现,特别是低速设备。usb系统接口/电缆也比较简单,成本比串口/并口低。
2.缺点
usb技术还不是很成熟,特别是高速设备。市场上现有的usb设备价格都比较昂贵,但随着usb技术的日益成熟,设备的不断增加和广泛应用,其价格将会有所降低。
三、usb系统拓扑结构
一个usb系统包含三类硬件设备:usb主机(usbhost)、usb设备(usbdevice)、usb集线器(usbhub),如图1所示。
(1)usbhost
在一个usb系统中,当且仅当有一个usbhost时,usbhost有以下功能:
◇管理usb系统;
◇每毫秒产生一帧数据;
◇发送配置请求对usb设备进行配置操作;
◇对总线上的错误进行管理和恢复。
(2)usbdevice
在一个usb系统中,usbdevice和usbhub总数不能超过127个。usbdevice接收usb总线上的所有数据包,通过数据包的地址域来判断是不是发给自己的数据包:若地址不符,则简单地丢弃该数据包;若地址相符,则通过响应usbhost的数据包与usbhost进行数据传输。
(3)usbhub
usbhub用于设备扩展连接,所有usbdevice都连接在usbhub的端口上。一个usbhost总与一个根hub(usbroothub)相连。usbhub为其每个端口提供100ma电流供设备使用。同时,usbhub可以通过端口的电气变化诊断出设备的插拔操作,并通过响应usbhost的数据包把端口状态汇报给usbhost。一般来说,usb设备与usbhub间的连线长度不超过5m,usb系统的级联不能超过5级(包括roothub)。
四、usb总线数据传输
usb总线上数据传输的结构如图2所示。
从物理结构上,usb系统是一个星形结构;但在逻辑结构上,每个usb逻辑设备都是直接与usbhost相连进行数据传输的。在usb总线上,每ms传输1帧数据。每帧数据可由多个数据包的传输过程组成。usb设备可根据数据包中的地址信息来判断是否响应该数据传输。在usb标准1.1版本中,规定了4种传输方式以适应不同的传输需求:
(1)控制传输(controltransfer)
控制传输发送设备请求信息,主要用于读取设备配置信息及设备状态、设置设备地址,设置设备属性、发送控制命令等功能。全速设备每次控制传输的最大有效负荷可为64个字节,而低速设备每次控制传输的最大有效负荷仅为8个字节。
(2)同步传输(isochronoustransfer)
同步传输仅适用于全速/高速设备。同步传输每ms进行一次传输,有较大的带宽,常用于语音设备。同步传输每次传输的最大有效负荷可为1023个字节。
(3)中断传输(interrupttransfer)
中断传输用于支持数据量少的周期性传输需求。全速设备的中断传输周期可为1~255ms,而低速设备的中断传输周期为10~255ms。全速设备每次中断传输的最大有效负荷可为64个字节,而低速设备每次中断传输的最大有效负荷仅为8个字节。
(4)块数据传输(bulktransfer)
块数据传输是非周期性的数据传输,仅全速/高速设备支持块数据传输,同时,当且仅当总线带宽有效时才进行块数据传输。块数据传输每次数据传输的最大有效负荷可为64个字节。
五、典型应用
usb系统的典型应用如图3所示。
在图3所示系统中,显示器、audio、modem皆为全速设备,键盘、鼠标为低速设备。其数据传输为:
◇usbhost通过控制传输更改显示器属性。
◇usbhost通过块数据传输将要显示的数据送给显示器。
◇usbhost通过控制传输更改键盘、鼠标属性。
◇usbhost通过中断传输要求键盘、鼠标输入读入系统。
◇usbhost通过控制传输更改audio属性。
◇usbhost通过同步传输与audio设备传输数据。
◇usbhost通过控制传输更改modem属性。
◇usbhost通过块数据传输与modem设备传输数据
六、一个usbhost接口的软硬件设计
市场上现已有很多公司提供的usb接口器件,如philips的pdiusbd11/pdiusbd12,oki的msm60581,national的usbn9602,lucent的uss-820/uss-620,scanlogic的sl11,等等。
同时也有很多带usb接口的处理器,如cypress的ez-usb,amd的am186cc,atmel的at43320,motorola的ppc823/ppc850,等等。下面给出用scanlogic的usb接口器件sl11ht实现嵌入式usbhost的例子。
1.sl11ht特点
◇遵从usb1.1标准;
◇支持全速/低速传输;
◇支持主机/设备端两种模式;
◇3.3/5.0v供电;
◇片内包含256个字节的sram;
◇48mhz晶振输入。
当sl11ht被用作usbhost接口时,对系统有以下要求:
◇由系统维护sof帧数目;
◇由系统生成crc5效验码;
◇要求系统中断潜伏期小于1.5μs。
2.sl11ht接口硬件框图
图4简单地给出了使用sl11ht扩展usb接口的框图,更详细的硬件连线图请见参考文献2,3。
3.usbhost端软件结构
usbhost端软件结构如图5所示。
(1)usb接口驱动程序
usb接口驱动程序需实现以下功能:
◇usb接口器件的初始化;
◇计算上层数据包的效验和,发送上层的数据包;
◇发送sof帧;
◇接收从usb接口传送来的数据,并检查数据的有效性;
◇将接收到的数据送往上层。
(2)usb协议栈驱动程序
usb协议栈驱动程序需实现以下功能:
◇提供与设备驱动程序的接口;
◇读取并解析usb设备描述符,配置描述符;
◇为usb设备分配唯一的地址;
◇使用默认的配置来配置设备;
◇支持基本的usb命令请求;
◇连接设备与相应的驱动程序;
◇转发设备驱动程序的数据包。
(3)设备驱动程序
设备驱动程序需实现以下功能:
◇提供与应用程序的接口;
◇读取并解析usb设备特有的描述符,获得设备提供的传输通道;
◇发送设备特有的和基本的usb命令请求;