CN1560748A - 一种usb接口的驱动方法 - Google Patents

一种usb接口的驱动方法 Download PDF

Info

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
Application number
CNA200410015403XA
Other languages
English (en)
Inventor
吴太和
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WEIAIDE COMMUNICATION TECHNOLOGY (SHENZHEN) Co Ltd
Original Assignee
WEIAIDE COMMUNICATION TECHNOLOGY (SHENZHEN) Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by WEIAIDE COMMUNICATION TECHNOLOGY (SHENZHEN) Co Ltd filed Critical WEIAIDE COMMUNICATION TECHNOLOGY (SHENZHEN) Co Ltd
Priority to CNA200410015403XA priority Critical patent/CN1560748A/zh
Publication of CN1560748A publication Critical patent/CN1560748A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Transfer Systems (AREA)

Abstract

本发明公开了一种USB接口的驱动方法,其包括以下步骤:初始化USB总线,包括初始化根集线器,其中初始化根集线器包括配置根集线器、提交USB请求块到中断服务子程序队列当中以及创建USB接入设备内核守护进程;每个通用主控制器接口的时间片结束会产生中断信号,每次产生中断会扫描挂在驱动骨架程序上的每个装有数据的传送盒,轮流执行中断服务子程序队列中的应用程序,并且通知USB总线上连接的设备;执行根集线器中断,周期性唤醒USB接入设备内核守护进程,并扫描根集线器的各个端口;周期性检查根集线器的端口是否有设备接入;若有USB设备接入,则对USB设备的配置或者设备的描述进行读取;为新加入的USB设备绑定驱动程序,并且开始初始化USB设备。

Description

一种USB接口的驱动方法
【技术领域】
本发明涉及一种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嵌入式处理器连接。
CNA200410015403XA 2004-02-17 2004-02-17 一种usb接口的驱动方法 Pending CN1560748A (zh)

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)

* Cited by examiner, † Cited by third party
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 统信软件技术有限公司 一种扫描仪应用开发方法、计算设备及存储介质

Cited By (8)

* Cited by examiner, † Cited by third party
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