$29卷第4期 内 蒙 古农 业 大 学 学 报 V01.29No.4
2008年12月 J01姗B】0fhIf婀M。n901iaA面cllltll】耐uIlive鸺ity
Dec.2008
基于ARM架构的嵌入式USB驱动的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
‘
张永安,杨松,孙丽
(内麓古农业大学计算机与信息
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
学院,呼和浩特010018)
摘要:本文介绍了嵌入式Linttx操作系统下USB驱动的设计方法,论述了嵌入武产品外围接口驱动的开发过程。
采用ARM9系列的$3C2410芯片和USB主机控制器ISPll61AI,设计了USB驱动程序,给出了硬件的连接方法和软
件设计过程,并最终可在Linux环境下读写USB类设备信息。
关键词:嵌入式系统;ARM;USB接口
中图分类号t TP39 文献标识码:B 文章编号:1009-3575(2008)04—0200一03
DESIGNOFEMBEDDEDUSEDRIVERBASEDONARMFRAME
ZHANGYong—art,YANGShong,SHUNLi
(Co//egenfComputerandInformation,InnerMongolia心碗删Uni,,eniq,Huhhot010018,China)
Abstract:ThispaperintroducedadesignIne88ureaboutUSBdriveunderembeddedLinuxoperationssystem,discussedthedevelop-
mentprocessofembeddedproductionperipheryinterfacedriver.AuthorusedtheARM9serieschip$3C2410andUSBmaincontroller
ISPI161AI,designed舳USBdriverprogram,providedthehardwareconnectmethodandthesoftwaredesignprocess,finally,wecan
readandwriteUSBdevicemessageunderLinuxoperationssystem.
Keyword8:Embeddedsystem;ARM;USBinterface
在现代社会,嵌入式系统逐渐深入到人们生活
的方方面面,各类嵌入式系统产品之间往往通过某
种接口进行交互或数据传递。而现在,USB已经成
为嵌入式设备数据交换的最主要的方式,可是各种
USB接口的设备都是基于PC机系统的,所以,基于
嵌入式系统的USB接口的研究具有实用的价值和意
义,特别是起Master作用的HOST端接口的研究。
解决这一问题的根本办法就是在需要使用USB
设备的嵌入式系统中扩展USBHost功能模块,使之
具有与USB设备进行数据传输的能力。
1 硬件实现
1.1硬件接口框图 .
USB接口器件ISPl161AI、嵌入式芯片$3C2410
以及PC机接1:3框图如附图所示:
USB主机接口芯片选用ISPIl61A1,它是1个单
片通用串行总线(USB)主机控制器(HC)和设备控
制器(DC)。ISPll61A1的主机控制器部分支持全速
(12Mbit/s)和低速(1.5Mbit/s)的数据传输。
IsPll61AI为USBHC提供2个下行端口,为USBDC
提供1个上行端口。每1个下行端口都有1个过流
(OC)检测输入管脚和电源转换控制输出管脚。上
行端口也有1个VBUS检测输入管脚。HC的下行
端口可与任意1个符合USB
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
并含有USB上行
端口的USB器件和USB集线器相连。类似地,DC
的上行端口可与任意1个符合USB规范并含有USB
下行端口的USB主机和USB集线器相连。HC根据
发布的USBl.OA开放式主机控制器接口规范得到。
DC符合大多数USB器件的分类规格,比如成像类、
海量存储器件、通信器件、打印设备以及人机接口设
备。
· 收111日期:2008—03—04
作者简介t张永安(1976一)。男.讲师.主要从事单片机与嵌人式系统开发的研究.
万方数据
第4期 张永安等: 基于ARM架构的嵌入式USB驱动的设计 201
2 ISPl161A1体系结构
要实现USB协议,必须要通过一系列寄存器来
完成,这些寄存器要能实现USB软件结构中的US—
BD(USB驱动程序)和HCD(主控驱动程序),即要
完成USB协议状态的控制,还要有一定的缓冲区来
USB
声一f。
存放进出的数据,ISPll61A1专门针对USB协议设
计的特殊硬件结构可方便地实现USBHOST和USB
SLAVE。ISPll61A1的硬件结构主要是3类不同的
寄存器,用户通过操作这3种寄存器来达到实现
USB传输的目的,这3类寄存器是:
嵌入式系统
附图硬件接口图
Fig.Hardwareinterfacediagram
2.1 HCcontrolandstatusregisters
USB主控制器控制和状态寄存器,主要用于传
输过程中控制命令的存放和状态的读取,可读可写
的寄存器有两个地址,只读或只写的寄存器只有1
个地址。
2.2 lsochronousTransferList(ITL)
同步传输列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
缓冲区。
2.3 AcknowledgedTransferList(ATL)
接收传输列表缓冲区。
根据USB协议,数据传输分为4种模式。Control
(控制),Bulk(整批),Interrupt(中断)和Isochronous
(同步)。其中ITL是为了实现同步传输,A1L则实
现其他3种模式的传输。
3 ISPl161A1主控制器编程实现
嵌人式Linux下USB驱动程序的设计,主要是
堆主控芯片IsPll61A1的驱动设计。设计
ISPI161A1主控制驱动程序主要涉及以下几个方面
主要
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
,下面介绍其实现过程。
3.1谢写A1【L和rrL缓冲区
J帆和ITL缓冲区的位于ISPll61A1内部的
FIFO缓冲RAM之中,每个缓冲区包含许多PTD
(PhilipsTransferDescriptor),而PTD用于主控制器
硬件从USB设备发送或接收USB包,作为调度USB
传输的一部分,HCD在系统内存中构建PTD。然后
HCD将构建好的PTD移人A11L或者ITL缓冲区,主
控制器硬件允许软件去访问每1个缓冲区,就像他
们是分离的硬件缓冲区,HCD访问A1【L缓冲区通过
硬件寄存器HcTransferCounter(22H/A2H)和
HcATLBufferPort(41H/C1H),而ITL缓冲区则由Hc—
TransferCounter和HclTLBufferPort(40H/COH)访问o
3.2硬件初始化过程
当ISPll61A1上电时,主控驱动程序(HCD)必
须经过下列的顺序对硬件进行初始化,以便主控制
器进入可操作状态:检测主控制器,软件复位主控制
器,配置HeHardwareConfiguration寄存器,配置中断,
配置HcControl寄存器,配置HcFmInterval寄存器,
配置根集线寄存器,设置ITL和ATL缓冲区长度,安
装INTI中断服务程序。
3.2.1检测主控制器检测的工作由HCD完成
的,HCD通过向寄存器HcScratch写1个值,接着从
该寄存器读出,与刚才写人的值进行比较。如果写
入的和读出的值相等,HCD得出结论:主控制器存
在,对HcCHipID寄存器的读也被用来作为额外的条
件来检测该寄存器。
万方数据
内 蒙 古 农 业 大 学 学 报 2008年
3.2.2主控制器的软件复位软件复位主控制器
通常包括两个步骤:复位主控制器;设置主控制器为
RESET状态。HCD通过设置在HcCommandStatus寄
存器的HCR位来复位主控制器:一旦主控制器复位
了,HCD必须通过设置HcControl寄存器的HCFS字
段为00B,以便使主控制器为RESET状态。
3.2.3 配置HcHardwareConfiguration寄存器
WRITE—REGI6(hci,InterruptPinEnableI InterruptPin—
TriggerInterruptOutputPolarityIDataBusWidthl6IAnal-
ogOCEnable,HcHardwareConfiguration);
上述这段代码表示将主控制器初始化为INTl
允许,中断是边沿触发,中断的输出极性为高电平,
数据线的宽度为16b,使用片上过流检测,模拟输入。
3.2.4 配置中断主控制器ISPll61A1有两组中
断源,第l组包含USB事件产生的中断,比如Startof
Frame,调度溢出和根集线器状态改变,这些中断的
发生由HcInterruptEnable和HcInterruptDisable寄存
器联合控制,而每个中断的状态由HcInterruptStatus
寄存器标识。
第2组是主控制器中状态变化所引起的中断,
比如,主控制器延迟所产生的中断,同样,在第l组
中断中的任何组合都是第2组中断的中断源。
3.2.5配置HcFmInterval寄存器HcFmInterval寄
存器的14位值[FrameInteral,FI]用于表示l帧之内
所占用的比特时间,FrameInteral用于表示在没有引
发调度溢出下可发送或接收全速最大包大小,兀的
推荐值为0x2EDF,所以将调用下列语句对该寄存器
进行初始化:
WRITE—REG32(hci,0x2EDFI(0x2778<<16),
HcFmIIlten,a1);
3.2.6 配置RootHub(根集线器)寄存器随着初
始化的深入,下面专门针对根集线器的3个寄存器
进行初始化:HeRhDescfipwrA,HcRhDescIiptorB和
HcRhStatus,前两个寄存器是根据电路板的制作自动
由ISPll61A1配置的,这两个寄存器均用来描述根
集线器的特性。
HcRhSmms被划分为2个部分,低字部分表示
集线器状态,而高字部分表示集线器状态的改变,还
有保留部分必须被初始化为逻辑0。
3.2.7设置ITL和√帆缓冲区的长度主控制器
ISPll61A1内部的FIFO缓冲区有4kb/s,而这4k将
被ArIL和ITL划分为2部分,分由HcATLBuffer-
Length和HcITLBufferLength寄存器表示,n’L缓冲区
又进一步被分为2个相同的IT00和ITD01缓冲区,
ATL缓冲区必须存在,因为ATL缓冲区用于控制中
断和大批量传输,而nL的存在与否是可选的。
3.2.8设置INTl中断的服务程序如果在主控制
器中发生一个或多个中断,ISPll61A1的INTI引脚
将会通知微处理器,在本设计中,INTl的引脚直接接
在S3C2410的INT0引脚上,驱动程序通过Linux提
供的函数request—irq向操作系统申请中断号,并在
此函数中向操作系统提供中断处理函数。
request_irq(irq,hc—interrupt,0,”ISPll6x”,hci)
irq为中断号;he_interrupt为中断处理函数,0为
中断标记,”ISPll6x”表示中断设备名称;hci在此表
示中断设备号。
4在嵌入式Linux中编译USB主
控驱动
下面是将驱动文件编译到嵌入式操作系统的过
程。
4.1将上述文件拷贝到drivera/USB/
4.2编辑Drivem/USB/胁tkefile文件,添加以下内容:
obj一$(CONFIG—USB—ISPll61)+=hc—
ispll61.O
4.3编辑driver/USB/config.in文件,添加如下内
容:
Dep_tristatispl161(Philips)supportCONFIG_USB
_ISPl161$CONFIG_USB
4.4重新编译嵌入式Linux内核
编译成功后把生成的映象文件用mG烧写器
烧写到开发板的ROM中,启动后经验证实现了对
ISPll61A1的控制。
5结语
ISPll61AI使得在嵌人式系统中实现USB
HOsT变得十分简单方便,便于嵌入式系统中USB
的普及。
1个USBHOST要完成的功能因为需求不同,所
使用的协议也不尽相同,有的采用中断传输,有的采
用同步传输。USB主机技术在嵌人式系统的应用主
要是针对某一种USB设备或集中设备,因而嵌入式
系统上可以只固化某几种协议,该技术的应用可以
使得在嵌入式系统上轻松接人USB外设、扩展系统
的功能、提高仪器的使用灵活性。USB主机技术在
嵌入式系统上的应用会有更广泛更美好的前景。
参考文献:
[1]马忠梅.ARM&Linux嵌入式系统教程[M].北京:北
京航空航天大学出版社,2004年9月
[2]符意得.嵌入式系统设计原理及应用[M].北京:清华
大学出版社,2004.
[3]ALESSANDRORUBINI.Linux设备驱动程序[M].北
京:中国电力出版社,2005.
[4]覃树建,杨红雨.USB设备驱动在Linux下的设计与实
现[J].中国民航飞行学院学报,2006,17(2):48-50.
[5]谢海涛,冯启明.USB软件狗的设计与固件编程[J].
武汉理工大学学报(交通科学与工程版),2004,28
(02):298—301.
万方数据
基于ARM架构的嵌入式USB驱动的设计
作者: 张永安, 杨松, 孙丽, ZHANG Yon-gan, YANG Shong, SHUN Li
作者单位: 内蒙古农业大学计算机与信息工程学院,呼和浩特,010018
刊名: 内蒙古农业大学学报(自然科学版)
英文刊名: JOURNAL OF INNER MONGOLIA AGRICULTURAL UNIVERSITY(NATURAL SCIENCE EDITION)
年,卷(期): 2008,29(4)
参考文献(5条)
1.符意得 嵌入式系统设计原理及应用 2004
2.马忠梅 ARM & Linux嵌入式系统教程 2004
3.谢海涛;冯启明 USB软件狗的设计与固件编程[期刊论文]-武汉理工大学学报(交通科学与工程版) 2004(02)
4.覃树建;杨红雨 USB设备驱动在Linux下的设计与实现[期刊论文]-中国民航飞行学院学报 2006(02)
5.ALESSANDRO RUBINI Linux设备驱动程序 2005
本文链接:http://d.g.wanfangdata.com.cn/Periodical_nmgnydxxb200804045.aspx