CN1560748A - 一种usb接口的驱动方法 - Google Patents
一种usb接口的驱动方法 Download PDFInfo
- Publication number
- CN1560748A CN1560748A CNA200410015403XA CN200410015403A CN1560748A CN 1560748 A CN1560748 A CN 1560748A CN A200410015403X A CNA200410015403X A CN A200410015403XA CN 200410015403 A CN200410015403 A CN 200410015403A CN 1560748 A CN1560748 A CN 1560748A
- Authority
- CN
- China
- Prior art keywords
- usb
- root hub
- request
- interface
- driving method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Transfer Systems (AREA)
Abstract
本发明公开了一种USB接口的驱动方法,其包括以下步骤:初始化USB总线,包括初始化根集线器,其中初始化根集线器包括配置根集线器、提交USB请求块到中断服务子程序队列当中以及创建USB接入设备内核守护进程;每个通用主控制器接口的时间片结束会产生中断信号,每次产生中断会扫描挂在驱动骨架程序上的每个装有数据的传送盒,轮流执行中断服务子程序队列中的应用程序,并且通知USB总线上连接的设备;执行根集线器中断,周期性唤醒USB接入设备内核守护进程,并扫描根集线器的各个端口;周期性检查根集线器的端口是否有设备接入;若有USB设备接入,则对USB设备的配置或者设备的描述进行读取;为新加入的USB设备绑定驱动程序,并且开始初始化USB设备。
Description
【技术领域】
本发明涉及一种USB接口的驱动方法,尤其涉及一种基于ARM 7312处理器的USB接口的驱动方法。
【背景技术】
USB(Universal Serial Bus,通用串行总线)是电脑系统与其周边装置连接或通信的标准接口,现在在使用Windows操作系统的电脑系统中使用较广泛的版本是USB1.1,但是在Linux操作系统中,尤其是使用ARM7312处理器的电话机中目前还没有可以实现USB1.1传输的,而随着Linux操作系统使用的日渐广泛,不能实现USB1.1传输的基于Linux操作系统的产品存在使用不便的缺点。
【发明内容】
为了克服现有的使用ARM 7312的电话机不能实现USB1.1传输的缺点,本发明提供一种基于ARM 7312处理器的USB接口及其驱动方法,其能使使用ARM 7312处理器的电话机实现USB1.1传输。
为实现本发明的目的,本发明所采用的技术方案是:提供一种USB接口的驱动方法,其包括以下步骤:
初始化USB总线,包括初始化根集线器,其中初始化根集线器包括配置根集线器、提交USB请求块到中断服务子程序队列当中以及创建USB接入设备内核守护进程;
每个通用主控制器接口的时间片结束会产生中断信号,每次产生中断会扫描挂在驱动骨架程序上的每个装有数据的传送盒,轮流执行中断服务子程序队列中的应用程序,并且通知USB总线上连接的设备;
执行根集线器中断,周期性唤醒USB接入设备内核守护进程,并扫描根集线器的各个端口;
周期性检查根集线器的端口是否有设备接入;
若有USB设备接入,则对USB设备的配置或者设备的描述进行读取;
为新加入的USB设备绑定驱动程序,并且开始初始化USB设备。
本发明的有益效果是使在ARM 7312嵌入式处理器上实现USB1.1传输,因此可使使用ARM 7312嵌入式处理器的电话机理想地连接多种外设。。
【附图说明】
图1是本发明基于ARM 7312处理器的USB接口的电路原理图。
图2是图1所示的USB接口的驱动方法的流程图。
图3是初始化USB设备的流程图。
图4是USB传输的中断处理流程图。
【具体实施方式】
请参阅图1,本发明的基于ARM 7312处理器的USB接口是用于基于Linux操作系统且是使用ARM 7312处理器的电话机。在ARM 7312处理器上实现USB1.1传输是采用CYPRESS公司生产的SL811HST(USB-HOST)接口芯片,SL811HST是SL811的主控制芯片,它的主要工作就是支持SL811的USB HOST协议,这个芯片实现了等时传输、块传输和中断传输等方式,在SL811HST芯片中有一个USB传输的缓冲区队列和扫描执行队列,驱动程序只需要把数据挂在缓冲区的队列上,并且设定具体的传输方式,就可以执行主机和USB设备之间的数据交互。
SL811HST芯片的D[0..7]是数据总线,这些数据总线直接连接到ARM 7312嵌入式处理器的第0-7位;A0为数据/控制器总线,直接连接到ARM 7312的A0地址线上;nCS3、nMWE和nMOE分别连接到ARM 7312的片选3、读和写信号线上;在nCS3上要加一个15K的上拉电阻R21,由于SL811和ARM 7312的口输出/输入能力不能匹配,所以需要使用一个上拉,这样就不会出现半高电平的可能性;EINT1是SL811HST芯片的中断信号线,这里由于是低中断有效,所以要通过一个74HC04反向门把信号电平反向;nRST是SL811HST芯片的复位信号线,由于在规格书中规定该信号线需要接到一个GPIO口上,但是事实上GPIO口不能稳定实现一个延迟200ms的脉冲,所以和ARM 7312使用同一个复位脚比较好,可以正确让它复位;SL811HST芯片的D-端口和D+端口分别与一滤波电路连接,与D-端口连接的滤波电路由电感L10和电阻R23串联而成,电感L10的一端与SL811HST芯片的D-端口连接,另一端与从设备USB-A的D-端口连接,与D+端口连接的滤波电路由电感L11和电阻R22串联而成,电感L11的一端与SL811HST芯片的D+端口连接,另一端与从设备USB-A的D+端口连接,L11和L10两个电感(取值在10-100uH以内)和R22和R23两个电阻(取值在15K-18K以内)必须要加上,如果没有,则在USB等时传输时会造成大量的错误,而且整个USB系统的EMC能力也会降低;SL811HST芯片的X1和X2端口均与晶振电路连接,该晶振电路中的晶振Y1没有选用规格书中的48MHz,而选用了12MHz,原因是如果使用48MHz三次和四次的杂波非常高,造成在USB等时传输的时候出现严重的误码,该晶振电路中的电容C22和C23必须在15-50pF之间,同样也是因为等时传输的原因,如果不在该范围内等时传输出错率在10倍以上;RYC8220-2M芯片是一个USB的电源芯片,负责给USB的从设备,例如USB-A,提供电源。
Cypress公司的SL811HST芯片在Linux内核的源码目录中提供了一个最基础的USB驱动程序,即USB驱动骨架程序(usb-skeleton),通过该USB驱动骨架程序我们仅需要修改极少的部分,就可以完成一个USB设备的驱动。该USB驱动骨架程序是以PCI(Peripheral Component Interconnection,周边元件扩展接口)骨架为模板的。
Linux USB驱动程序需要做的第一件事情就是在Linux USB子系统里注册,并提供一些相关信息,例如这个驱动程序支持哪种设备,当被支持的设备从系统插入或拔出时,会有哪些动作,所有这些信息都传送到USB子系统中。
USB驱动骨架程序的关键几点如下:
1.USB驱动的注册和注销
USB驱动程序在注册时会做usb_register的函数处理;
当要从系统卸载驱动程序时,需要注销USB子系统,即需要usb_unregister函数处理;
当USB设备插入时,为了使Linux的热插拔(Linux中PCI、USB等设备热插拔支持)系统自动装载驱动程序,则需要创建一个MODULE_DEVICE_TABLE(模块设备表)。
USB_DEVICE宏(USB设备宏)利用厂商ID和产品ID为我们提供了一个设备的唯一标识,SL811HST采用了Cypress专有的ID号或者设备标识。当系统插入一个ID匹配的USB设备到USB总线时,驱动会在USB内核中注册。驱动程序中probe(探针)函数也就会被调用。usb_device(USB设备)结构指针、接口号和接口ID都会被传递到函数中。
驱动程序需要确认插入的设备是否可以被接受,如果不接受,或者在初始化的过程中发生任何错误,probe函数返回一个NULL(空)值,否则返回一个含有设备驱动程序状态的指针,通过这个指针,就可以访问所有结构中的回调函数。
在骨架驱动程序里,最后一点是要注册devfs(设备文件系统)。我们创建一个缓冲用来保存那些被发送给USB设备的数据和那些从USB设备上接收的数据,同时USB urb(USB request blocks,USB请求块)被初始化,并且我们在devfs子系统中注册设备,允许devfs用户访问我们的设备。
如果devfs注册函数失败,devfs子系统会将此情况报告给用户。
当然最后,如果设备从usb总线拔掉,设备指针会调用disconnect(断开)函数。驱动程序就需要清除那些被分配了的所有私有数据、关闭urbs,并且从devfs上注销自己。
此时,USB驱动骨架程序就已经和USB设备绑定上了,任何用户态程序要操作此设备都可以通过file_operations(文件操作)结构所定义的函数进行了。
首先,我们要打开此USB设备。当USB设备打开后,读、写函数就可以收、发数据了。
2.USB驱动骨架程序的读、写函数
该读、写函数是完成驱动对读写等操作的响应。
3.skel_disconnect(USB驱动骨架程序的断开)函数
当我们释放设备文件句柄时,这个函数会被调用。首先确认当前是否有其它的程序正在访问这个设备,如果是最后一个用户在使用,我们可以关闭任何正在发生的写。
如果程序有一个打开的设备句柄,在当前结构里,我们只要把它赋值为空,就像它已经消失了。对于每一次设备读写等其它函数操作,我们都要检查usb_device结构是否存在。如果不存在,就表明设备已经消失,并返回一个错误给用户程序。当最终我们调用release(释放)函数时,在没有文件打开这个设备时,无论usb_device结构是否存在、它都会清空skel_disconnect函数所作工作。
请参阅图2,上述基于ARM 7312处理器的USB接口的驱动方法包括以下步骤:
初始化USB总线,包括初始化根集线器,初始化根集线器包括配置根集线器、提交URB到中断服务子程序队列当中以及创建khubd守护进程(USB接入设备内核守护进程),创建khubd守护进程的目的在于周期性扫描整个USB端口,在这里调用了USB驱动的注册和注销;
每个UHCI(Universal Host Controller Interface,通用主控制器接口)的时间片结束会产生中断信号,每次产生中断会扫描挂在驱动骨架程序上的每个装有数据的传送盒,轮流执行中断服务子程序队列中的应用程序(包括控制请求提交、中断请求提交、或者是块传输请求提交的程序),并且通知USB总线上连接的设备,也即调用USB驱动骨架程序的读、写函数;
执行根集线器中断,周期性唤醒khubd守护进程,并扫描根集线器的各个端口;
周期性检查根集线器的端口是否有设备接入;
若有USB设备接入,则对USB设备的配置或者设备的描述进行读取;
为新加入的USB设备绑定驱动程序,并且开始初始化USB设备。
请参阅图3,其中初始化USB设备包括以下步骤:
201.分配I/O空间和UCHI可以访问的I/O地址;
202.设定各个传输队列;
203.创建USB总线;
204.创建USB根集线器;
205.启动根集线器;
206.周期性执行根集线器中断服务子程序。
请参阅图4,本发明基于ARM 7312处理器的USB接口的驱动方法还包括USB传输的中断处理步骤,其包括:
301.唤醒根集线器的控制器;
302.删除等待队列中没有提交的请求;
303.对等待队列中的请求重新排队;
304.检验等时,成块,中断三个队列中的请求结构;
305.扫描整个请求器的队列是否正确;
306.判断整个请求器内的请求是否在处理,若是,则直接执行步骤310,若不是,则执行步骤307;
307.检查每一个UHCI的传输单元是否找到有空闲的单元;
308.判断本阶段是否为收到短的信息包,若是,则执行步骤309,若不是,则执行步骤310;
309.重新通过发送控制消息,并且摘除原先的请求队列;
310.判断本阶段是否为请求处理中,若是,则同时执行313,若不是,则执行311;
311.把完成的URB从相关的队列中摘除;
312.把完成的URB加入完成队列中;
313.扫描当前的完成列表,检查当中完成传输的URB;
314.唤醒当前进程,准备读取数据或者返回的状态;
315.调用DMA(Direct Memory Access,直接存储器存取)同步,让设备缓冲区和内存缓冲区数据相一致。
Claims (6)
1.一种USB接口的驱动方法,其特征在于包括以下步骤:
初始化USB总线,包括初始化根集线器,其中初始化根集线器包括配置根集线器、提交USB请求块到中断服务子程序队列当中以及创建USB接入设备内核守护进程;
每个通用主控制器接口的时间片结束会产生中断信号,每次产生中断会扫描挂在驱动骨架程序上的每个装有数据的传送盒,轮流执行中断服务子程序队列中的应用程序,并且通知USB总线上连接的设备;
执行根集线器中断,周期性唤醒USB接入设备内核守护进程,并扫描根集线器的各个端口;
周期性检查根集线器的端口是否有设备接入;
若有USB设备接入,则对USB设备的配置或者设备的描述进行读取;
为新加入的USB设备绑定驱动程序,并且开始初始化USB设备。
2.根据权利要求1所述的USB接口的驱动方法,其特征在于:该USB接入设备内核守护进程调用了USB驱动的注册和注销。
4.根据权利要求1所述的USB接口的驱动方法,其特征在于:该中断服务子程序队列中的应用程序包括控制请求提交、中断请求提交、或者是块传输请求提交的程序。
5.根据权利要求1所述的USB接口的驱动方法,其特征在于:该初始化USB设备包括以下步骤:
分配I/O空间和通用主控制器接口可以访问的I/O地址;
设定各个传输队列;
创建USB总线;
创建USB根集线器;
启动根集线器;
周期性执行根集线器中断服务子程序。
6.根据权利要求1所述的USB接口的驱动方法,其特征在于:该USB接口的驱动方法还包括USB传输的中断处理步骤,其包括:
(301).唤醒根集线器的控制器;
(302).删除等待队列中没有提交的请求;
(303).对等待队列中的请求重新排队;
(304).检验等时,成块,中断三个队列中的请求结构;
(305).扫描整个请求器的队列是否正确;
(306).判断整个请求器内的请求是否在处理,若是,则直接执行步骤(310),若不是,则执行步骤(307);
(307).检查每一个通用主控制器接口的传输单元是否找到有空闲的单元;
(308).判断本阶段是否为收到短的信息包,若是,则执行步骤(309),若不是,则执行步骤(310);
(309).重新通过发送控制消息,并且摘除原先的请求队列;
(310).判断本阶段是否为请求处理中,若是,则同时执行(313),若不是,则执行(311);
(311).把完成的USB请求块从相关的队列中摘除;
(312).把完成的USB请求块加入完成队列中;
(313).扫描当前的完成列表,检查当中完成传输的USB请求块;
(314).唤醒当前进程,准备读取数据或者返回的状态;
(315).调用直接存储器存取同步,让设备缓冲区和内存缓冲区数据相一致。
7.根据权利要求1至6中任一项所述的USB接口的驱动方法,其特征在于:该USB接口采用SL811HST作为接口主控芯片,该SL811HST芯片与ARM7312嵌入式处理器连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200410015403XA CN1560748A (zh) | 2004-02-17 | 2004-02-17 | 一种usb接口的驱动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200410015403XA CN1560748A (zh) | 2004-02-17 | 2004-02-17 | 一种usb接口的驱动方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1560748A true CN1560748A (zh) | 2005-01-05 |
Family
ID=34440346
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200410015403XA Pending CN1560748A (zh) | 2004-02-17 | 2004-02-17 | 一种usb接口的驱动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1560748A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853177A (zh) * | 2010-05-05 | 2010-10-06 | 四川九洲电器集团有限责任公司 | 一种带usb接口的m2m模块的驱动装置 |
CN101930308B (zh) * | 2009-06-19 | 2012-07-25 | 炬力集成电路设计有限公司 | 一种对触摸式输入装置的驱动电路进行复位的方法和装置 |
CN107783928A (zh) * | 2016-08-30 | 2018-03-09 | 现代自动车株式会社 | 用于usb主机的usb通信控制方法 |
CN114860629A (zh) * | 2022-05-16 | 2022-08-05 | 哈尔滨国铁科技集团股份有限公司 | 基于usb虚拟化的计算机设备读取方法 |
CN116932415A (zh) * | 2023-09-15 | 2023-10-24 | 统信软件技术有限公司 | 一种扫描仪应用开发方法、计算设备及存储介质 |
-
2004
- 2004-02-17 CN CNA200410015403XA patent/CN1560748A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101930308B (zh) * | 2009-06-19 | 2012-07-25 | 炬力集成电路设计有限公司 | 一种对触摸式输入装置的驱动电路进行复位的方法和装置 |
CN101853177A (zh) * | 2010-05-05 | 2010-10-06 | 四川九洲电器集团有限责任公司 | 一种带usb接口的m2m模块的驱动装置 |
CN101853177B (zh) * | 2010-05-05 | 2013-06-19 | 四川九洲电器集团有限责任公司 | 一种带usb接口的m2m模块的驱动装置 |
CN107783928A (zh) * | 2016-08-30 | 2018-03-09 | 现代自动车株式会社 | 用于usb主机的usb通信控制方法 |
CN107783928B (zh) * | 2016-08-30 | 2022-03-11 | 现代自动车株式会社 | 用于usb主机的usb通信控制方法 |
CN114860629A (zh) * | 2022-05-16 | 2022-08-05 | 哈尔滨国铁科技集团股份有限公司 | 基于usb虚拟化的计算机设备读取方法 |
CN116932415A (zh) * | 2023-09-15 | 2023-10-24 | 统信软件技术有限公司 | 一种扫描仪应用开发方法、计算设备及存储介质 |
CN116932415B (zh) * | 2023-09-15 | 2023-12-05 | 统信软件技术有限公司 | 一种扫描仪应用开发方法、计算设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7877526B2 (en) | Data processing system having a channel adapter shared by multiple operating systems | |
US6226700B1 (en) | Computer system with bridge logic that includes an internal modular expansion bus and a common master interface for internal master devices | |
US20130024595A1 (en) | Pci express switch with logical device capability | |
US20030172218A1 (en) | Systems, devices, and methods for transferring data between an intelligent docking station and a handheld personal computer | |
CA2143492A1 (en) | Portable pcmcia interface for a host computer | |
US20150026368A1 (en) | Direct memory access to storage devices | |
CN101124541A (zh) | 修改逻辑分区数据处理系统中的虚拟适配器资源 | |
EP2711845A2 (en) | PCI express switch with logical device capability | |
US20200142848A1 (en) | Management controller including virtual usb host controller | |
US7809068B2 (en) | Integrated circuit capable of independently operating a plurality of communication channels | |
EP1759299A2 (en) | Bus controller for handling split transactions | |
US20090327537A1 (en) | Virtualized Serial Attached SCSI Adapter | |
JPH1069455A (ja) | コンピュータ・システム・バス上でスレーブdmaエミュレーションを行う方法 | |
US6567881B1 (en) | Method and apparatus for bridging a digital signal processor to a PCI bus | |
US7644222B2 (en) | Low latency event communication system and method | |
US8074232B2 (en) | Method for improving the communication of the human interface device | |
US9047264B2 (en) | Low pin count controller | |
JP2963426B2 (ja) | バスブリッジ装置及びトランザクションフォワード方法 | |
CN1560748A (zh) | 一种usb接口的驱动方法 | |
US7571266B2 (en) | Peripheral device in a computerized system and method | |
JP2000076178A (ja) | ブロック・モ―ドで動作する装置間の、通信リンクによるバ―スト・モ―ド・デ―タ転送の自動化制御 | |
US20100023597A1 (en) | Diskless computer system | |
JP4894963B2 (ja) | データ処理システム | |
US8239585B2 (en) | Systems and methods for improved hardware device connectivity | |
US7694004B2 (en) | Bit-granular writes of control registers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned | ||
C20 | Patent right or utility model deemed to be abandoned or is abandoned |