您的位置 首页 厂商

Linux下USB主机接口规划

迫切要求开发出能够识别USB设备的主机端口。这样使用U盘等设备就能实现数据传输。本系统设计在AT91SAM7X256控制器的基础上,增加了主机端口,适用于工矿企业中称重设备的数据更新和系统升级。

由于人们对数字方法信息的需求量越来越大,数据通讯及其运用技能遭到越来越广泛的重视和运用。跟着技能的开展。USB通讯正向高速、便利便利、安稳牢靠的方向开展。现在,大多数USB设备都是需求与PC机相连进行通讯,而USB设备之间的通讯则无法完结。而关于一些处在特别环境下的称重设备的数据传输和体系升级,PC机很不便利完结,因而迫切要求开宣布能够辨认USB设备的主机端口。这样运用U盘等设备就能完结数据传输。本体系规划在AT91SAM7X256操控器的基础上,增加了主机端口,适用于工矿企业中称重设备的数据更新和体系升级。

  1体系全体计划

  USB(UniversalSerialBus)即通用串行总线,供给一种兼容不同速度的、可扩大的,运用便利的外围设备接口,一起也是为处理计算机接口太多等问题而规划的。在嵌入式体系中假如处理器集成了OHCI规范的USB主机操控器,则直接就能够引出USB主控端口:而关于没有集成的处理器,则需求运用USB主控器材,从总线上扩展USB主机接口。许多IC制作商都供给这种主控器材,如Scanlogic公司的SL811HS/T等。在编写USB设备驱动程序规划时,能够分为3部分编写:主机端设备驱动程序、主机操控器驱动程序规划和设备端驱动程序。关于一些不具备USB主机端口的设备,为了完结通讯的便利、便利性,如与U盘直接通讯等设备是彻底有必要在本来设备的基础上扩展USB主机端口。

  该体系硬件规划是由电源、复位、时钟电路、以太网口、USB主机和设备端口以及串口组成,其结构框图如图1所示。其间,以太网口用于将设备接入网络实施长途办理和监控。将设备的数据接入Internet,完结长途监控,适用于工矿企业设备的集中化办理和保护。USB主机端口通过主机操控器SL811HS/T与操控器AT9lSAM7X256相连,进行数据通讯。USB设备端口作为与PC机通讯的接口。该体系规划的立异在于该设备抛开了PC机,既可作为主机,也可作为外设,并与其他0TG设备直接完结点对点通讯。

  2硬件电路规划

  USB主机与设备之间的通讯终究都是通过USB主机操控器和USB设备的总线接口间的电缆完结的,任何一个输出恳求都是由主机操控器组成包的方法发往总线的。USB,总线中只需一个主机,它是USB树形结构的根,通过一个根HUB供给一个或多个衔接点,由其衔接各个USB设备。

  2.1中心器材选型

  该体系规划选用Scanlogic公司的SL811HS/T作为USB主机接口器材,该器材是既能用作Host方法又能用作Slave方法的,具有规范微处理器总线接口USB操控器,适用于非PC设备在Host方法下,它支撑嵌入式主机与USB外围设备的通讯,在Slave方法下,可作为主机的一个外设。SL811HS具有以下特色:是遵从USBl.1协议的嵌入式USBHost/Slave器材;供给8bit宽数据总线及中止支撑,便利与微处理器、微操控器衔接;通过硬件设置或软件设置,作业在Host或Slave方法;主动勘探所接设备是低速设备仍是高速设备:8bit双向数据总线;片上SI-E、USB收发器;软件操控下运行为单个USB主或从设备主机或从设备方法有1.5Mb/s的低速,12Mb/s的全速,主动辨认低速和全速设备8位双向数据,作业于12MHz或48MHz晶振或振荡器。

  微处理器是体系中心,其功用直接决议该体系规划的准确性,安稳性和牢靠性。根据本体系对精度和实时性的要求。选用ATMEL公司的AT9lSAM7X256单片机。它具有以下特色:1)内部集成ARM7TDMIARMThumb处理器,支撑嵌入式ICE内电路仿真以及调试通讯接口:2)复位操控器(RSTC),根据上电复位单元,供给外部信号整形和复位源状况;3)时钟产生器(CKGR),低功耗RC振荡器,3~20MHz片上振荡器和1个PLL;4)电源办理操控器(PMC),具有电源优化功用,包含慢速时钟方法(低于500Hz)和闲暇方法,4个可编程外部时钟信号;5)USB2.0全速(每秒12Mbit)设备接口,具有片上收发器,巨细为1352字节的可装备成FIF0;6)10/100base-T(Mb/s)的以太网口;7)供给片上1.8V稳压器,为内核及外部组件供给高达100mA的电流,3.3VVDDIO供给I/O线电源,独立的3.3VVDDFLASH供给Flash电源,具有掉电检测的1.8VVDDCORE供给内核电源。

  2.2AT91SAM7X256的USB设备端口规划

  AT91SAM7X256的USB设备端口原理图,如图2所示。由于AT91SAM7X256支撑USB2.0全速(每秒12Mbit)设备接口,故AT91SAM7X256的2个引脚DDM和DDP与外界USB相连,直接完结USB设备端口。

  由USB接口输入5V直流电源,二极管VD1用于约束电源的导通方向,通过C18、C19滤波,然后通过SPXll7M-3.3将电源稳压至3.3V。为了下降噪声和出错率,应阻隔模仿电源与数字电源,图3中的L1和L2用于电源阻隔元件(将数字电源的高频噪声阻隔)。SPXll7M-3.3是Sipex公司的LDO器材,其特色为输出电流大,输出电压精度高安稳性高。SPXll7M系列LD0器材输出电流可达800mA,具有电流保护和热保护功用,可广泛运用于数字家电和工业操控等范畴。

  2.3USB主机端口规划

  AT91SAM7X256的USB主机端口原理图,如图3所示。SL811HS/T选用48引脚的TQFP封装方法,SL811HS/T既能用作Host方法又能用作Slave方法。将SL811HS/T的M/S引脚接地,即设为低电平信号(M/S=0),挑选作为主机端口。

  SL811HS/T的D0~D7端口为双向数据I/O端口,与操控器的PAl0~PAl7端口相连,完结数据通讯。SL811HS/T的nRD引脚与AT91SAM7X256的PA9相连,nWR引脚与AT9lSAM7X256的PA8相连,SL811HS/T的nCS引脚与AT91SAM7X256的PA7相连,AO引脚与AT91SAM7X256的PA6相连,操控SL811HS/T的读写状况,如图4所示。

  拜访存储器和操控寄存器的空间时,先设A0=0后写地址,接下来设A0=1,再进行寄存器/存储器读/写周期。当nWR或nCS处于无效时,SL811HS写或读操作停止。关于衔接到SL81lHS的设备,在writenWR信号之前撤销片选nCS,数据将一向坚持并与指定的值相同。SL811HS/T的nRST引脚与AT91SAM7X256的PAl8相连,完结软件低电平复位功用。SL811HS/T的引脚7、8与USB接口的DATA+,DATA-相连完结数据通讯。S-L811HS/T的Clk/X1引脚和X2引脚与外接12MHz晶振相连。

  3体系软件完结

  USB设备驱动程序规划包含主机端设备驱动程序、主机操控器驱动程序和设备端驱动程序3部分组成。主机端设备驱动程序便是设备驱动程序,它是主机环境中为用户运用程序供给一个拜访USB外设的接口。Linux为这部分驱动程序供给编程接口,规划者只需依照需求编写驱动程序结构,通过调用操作体系供给的APl接口函数能够完结对USB外设的特定拜访。

3.1USB设备驱动程序结构

  图5所示Linux中USB驱动的体系结构。LinuxUSB主机驱动由3部分组成:USB主机操控器驱动,USB驱动和不同的USB设备类驱动。USB驱动程序首要要向Linux内核进行注册自己,并告之体系该驱动程序所支撑的设备类型及其所支撑的操作。这些信息通过usb_driver结构传递。


  3.2注册和刊出

  USB驱动程序注册,便是把在初始化函数中填好的use_driver结构作为参数传递给use_register()函数即可,函数的调用办法为:result=usb_register(skel_driver);当要从体系卸载驱动程序时,也是将use_driver结构作为参数传递给usb_deregister函数处理。函数的调用格局为:

当USB设备刺进时,为了使linux-hotplug体系主动装载驱动程序,需求创立一个MODULE_DEV%&&&&&%E_TABLE。中心代码如下(这个模块仅支撑某一特定设备):

3.3probe()函数

  probe()函数的编写格局为:staTIcvoid*skel_probe(structusb_device*dev,unsignedintifnum,conststructusb_device_id*id);驱动程序需求承认刺进的设备是否能够被接纳,假如不接纳,或许在初始化的进程中产生任何过错,probe()函数回来一个NULL值。不然回来一个含有设备驱动程序状况的指针,通过这个指针,就能够拜访一切结构中的回调函数。

  在驱动程序里,最终一点是要注册devfs(设备文件体系)。首要创立一个缓冲用来保存那些被发送给USB设备的数据和那些从设备上接纳的数据,并为设备传输创立一个USB恳求块(URB)以向设备写入数据,一起USBurb被初始化,然后在devfs子体系中注册设备,答应devfs用户拜访USB的设备。注册进程如下:

  

  假如devfs_register函数失利,devfs子体系会将此状况报告给用户。假如设备从USB总线拔掉,设备指针会调用disconnect函数。驱动程序就需求铲除那些被分配了的一切私有数据,封闭urbs,而且从devfs上刊出调自己。

  3.4open(),write()和read()函数

  首要,要翻开此设备。在open()函数中MODULE_INC_USE_COUNT宏是一个要害,它起到一个计数的效果,有一个用户态程序翻开一个设备,计数器就加1。read()函数首要从open()函数中保存的fi。write()函数和read()函数是完结驱动对读写等操作的呼应。在skelwrite中,一个FLL_BULK_URB函数,就完结了urb体系callbak和的skel_write_bulk_callback之间的联络。read函数与write函数稍有不同在于:程序并没有用urb将数据从设备传送到驱动程序,而是用usb_bulk_msg函数替代,这个函数能够不需求创立urbs和操作urb函数的状况下,来发送数据给设备,或许从设备来接纳数据。调用usb_bulk_msg函数并传到一个存储空间,用来缓冲和放置驱动收到的数据,若没有收到数据表明失利并回来一个过错信息。usb_bulk_msg函数,当对USB设备进行一次读或许写时,usb_bulk_msg函数对错常有用的;但是,当需求接连地对设备进行读/写时,应树立一个自己的urbs,一起将urbs提交给USB子体系。

  MOD_DEC_USE_COUNT宏也会被调用到,首要承认当时是否有其他的程序正在拜访这个设备,假如是最终一个用户在运用,能够封闭任何正在产生的写,操作如下:
 

  USB设备能够在任何时刻点从体系中取走,即便程序现在正在拜访它。USB驱动程序有必要要能够很好地处理处理此问题,它需求能够堵截任何当时的读写,一起告诉用户空间程序:USB设备现已被取走。

  4实验成果

  通过很多的实验,该体系作业安稳牢靠,传输速度快且具有极低的误码率。使用逻辑剖析仪和BusHound软件进行相应的逻辑功用剖析,USB主机与设备之间能够正常通讯。由于整个电路首要运用于称重体系,所以侧重测试了操控传输和批量传输这两种数据传输方法。批量传输的有用数据传输速率能够到达1Mb/s,这是传输带宽的约束和数据包中冗余信息的存在所导致的。整体来讲,1Mb/s的传输速率仍是令人满意的。

  5结束语

  本体系以AT91SAM7X256单片机为中心进行规划,选用SL811HS/T主控器材,完结了USB主机端口的扩展,使称重设备中一起具有USB设备端和主机端口,因而,该体系规划完结数据的点对点通讯,完结称重设备数据更新、体系升级的牢靠、便利,合适工矿企业特别环境下设备数据的更新,便于对设备的办理和保护。并在称重体系中引进USB主机端口具有十分有用的特色。因而,该体系规划具有很好的运用远景。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/198796.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部