08级信工五班张永Word文档下载推荐.docx
《08级信工五班张永Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《08级信工五班张永Word文档下载推荐.docx(56页珍藏版)》请在冰豆网上搜索。
第1.1节理论和实践的意义2
第1.2节国内外研究现状2
第2章嵌入式ARM处理器5
第2.1节嵌入式系统特性5
第2.2节ARM处理器体系结构7
第3章嵌入式linux操作系统13
第3.1节Linux的历史13
第3.2节Linux作为嵌入式开发的优势13
第3.3节嵌入式Linux系统体系结构14
第4章USB驱动原理18
第4.1节USB总线规范18
第4.2节USB总线简介19
第4.3节USB总线拓扑结构21
第4.4节USB数据流模型21
第4.5节USB设备驱动程序的概述22
第4.6节USB驱动程序结构23
第4.7节USB的主机驱动结构24
第5章USB驱动程序的分析与实现29
第5.1节USB主控制器驱动程序实现29
第5.2节USBD的介绍35
第5.3节USB设备驱动的实现37
第5.4节大容量的存储设备简单介绍47
结论49
参考文献50
致谢51
前言
USB是一种新兴的计算机外围串行通信接口标准,它以单一类型的总线连接各种不同的类型的设备。
现在支持几乎所有可以连接到PC上的设备。
USB具有热插拔、即插即用、数据传输可靠、扩展方便、低成本、系统总线供电、系统总线带宽利用率高等特点,基于以上优点,USB在PC和便携式电子产品中已经成为必备外围接口,这样就需要在软件方面对USB有良好的驱动支持。
在PC上,操作系统对USB给予了完全的支持,当USB设备连接到系统上时,操作系统会自动检测设备,并自动加载相关的驱动程序,利用默认配置参数对设备进行配置,方便了USB客户端设备的使用。
但在嵌入式设备上,由于硬件体系结构不同,操作系统在PC下提供的驱动不能完全照搬过来用,需要根据具体硬件进行修改,甚至需要根据嵌入式设备硬件资源状况进行重写或裁剪,以满足具体的需要。
本文就是在ARM9(S3c2410)芯片和Linux操作系统下对USBOHCI的驱动程序进行了编写和分析,满足了USB设备在ARM9(S3c2410)芯片上的使用需求。
第1章课题研究价值
第1.1节理论和实践的意义
随着以ARM为代表微处理器高速发展,装有操作系统的嵌入式产品越来越多,功能越来越多强大。
带有USB接口的嵌入式产品更方便了与PC机进行数据传输。
Linux操作系统以其开放源代码、功能强大、稳定等优势使其在嵌入式操作系统领域得以迅速发展[1]。
嵌入式设备种类繁多的特点决定了不同的设备需要设计者开发相应的产品驱动,因此嵌入式Linux设备驱动程序的开发在整个嵌入式系统开发工作中占有举足轻重的地位。
第1.2节国内外研究现状
从美国微软发布“维纳斯计划”白皮书到中国科学院推出的“女蜗计划”,整个世界仿佛在一夜之间掀起了嵌入式开发与应用的热潮,人们开始关注嵌入式技术的发展和应用情况实际上,虽然嵌入式系统这一名词在最近几年才成为流行,但早在80年代,国际上就有一些IT组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。
就嵌入式系统的硬件来说,其处理器有8位、16位、132位不同类型,其架构也有X86、ARM、MIPS、SHx等不同类型。
就嵌入式操作系统来说,目前市场上主流的有WindowsCE、VxWorks、Lmux、QNX、pSOS等。
目前32位的微处理器硬件和实时多任务的操作系统软件相结合是嵌入式系统发展的主流[2]。
基于ARM(AdvancedRISCMachines)技术的微处理器却大约占据了32位RISC(ReduceInstructionSetComputing)微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面,例如苹果最近推出的iPhone手机,里面有ARMll、ARM9和ARM7。
由于ARM芯片的高性能,使在其上建立嵌入式系统成为可能。
如果开发驱动程序就要有一款实用开源的嵌入式系统了那就非linux莫属。
Linux是以其开源、易于移植和可裁剪性。
使得越来越多地被应用于嵌入式系统。
近年来,随着计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流[3]。
Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一。
可运行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多种硬件平台,而且开放源代码,可以定制;
可与各种传统的商业操作系统分庭抗争。
越来越多的企业和研发机构都转向嵌入式Linux的开发和研究上,在新兴的嵌入式操作系统领域内也获得了飞速发展。
在基于主流芯片ARM9和开源Linux的基础上开发usb的驱动就容易多了。
通用串行总线USB是一种外部总线规范,是计算机领域的一种新的接口技术。
早在1994年底,英特尔、康柏、IBM、微软等多家公司就已经联合提出USB总线规范。
在近期,USB技术得到了飞速的发展,USB版本已经发展到2.O。
通过USB接口,计算机可以方便的和具有USB接口的计算机周边设备如数码相机,打印机,鼠标,键盘等互连。
由于USB设备即插即用,数据传输速率快,USB接口已经取代串口,并口,IEEEl394,成为使用最广泛的电脑外围接口。
在USB推动PC外部设备发展的同时,PC外部设备反过来也对USB提出更高的要求,其中最主要的一点便是更高速率的数据传输。
为此,USB.IF在原先提供1.5Mbiths低速和12Mbit/s全速数据传输的USBl.x的基础上,于2000年发布了支持480Mbit/s高速数据传输的USB2.0规范,为将USB推广到大容量移动存储、宽带网络产品、数码相机和摄像机等高速外部设备提供了解决方案。
USB3。
0将提供达到4.8Gbps的理论传输速度相当于600MB每秒,相比USB2.0提升了10倍的传输速度。
新的USB3.0标准能够让更多机器设备不靠外接电源即可运行使用,也使其传输速度更快[4]。
国外利用USB技术开发的产品种类很多,像USB存储设备,USB通讯备,USB小家电等等,最近还推出了USB接口的红外护腕、USB指纹识别系统等,国外市场上基于USB的外设己经囊括几乎所有的主流数字产品,可见国外在USB实用性方面已作了很多工作,并且目前也正以很快的速度发展。
在国内,嵌入式USB主机系统的研究虽处于起步阶段,但也取得了一定的成绩。
朗科公司最早提出了“优盘”概念,并取得了USB外部存储装置专利知识产权。
USB在汽车领域也取得了飞速发展。
总的来说,USB技术在嵌入式系统已经被广泛使用,并成为当今嵌入式开发和应用中的一个热点。
USB相关设备驱动的开发也就随之成为了嵌入式产品研发的热点。
设备驱动可以理解为操作系统的一部分,对于不同硬件设备来说,其对应的设备驱动程序也是不同的。
操作系统本身并没有对种类繁多的硬件设备提供持久不变的“设备驱动"
,没有设备驱动程序的支持,操作系统无法正常支配硬件行为。
这个时候就需要独立开发一套适合自己产品的设备驱动。
Linux缺乏对外部设备的支持,也就是设备驱动程序方面并不能像Windows一样得到硬件厂商的支持。
很多硬件设备厂商不提供设备在Linux操作系统下的驱动。
传统意义的USB(UniversalSerialBus)开发,仅仅是对USB外设的开发,USB底层驱动程序和USB主控制器驱动程序都由Windows等操作系统提供,有关这些驱动程序的细节过程都是不开放源代码。
要设计USB主机驱动,就必须设计这两部分程序,而Windows源码不公开,这些细节资料就无从得到,因此只有从开放源代码的Linux角度设计。
Linux开放源码的好处一方面在于可以根据实际需要来配置内核,另一方面在于为开发设备驱动程序提供了借鉴。
设备驱动在嵌入式Linux系统开发中占用重要地位[5]。
所以开发出一个usb驱动程序对促进嵌入式的发展起到举无轻重的作用。
本文设计驱动适合大部分usb设备的应用。
第2章嵌入式ARM处理器
第2.1节嵌入式系统特性
嵌入式系统应用越来越广泛。
这是因为嵌入式系统具有功能特定、规模可变、扩展灵活、有一定的实时性和稳定性、系统内核比较小等特点。
2.1.1功能特定性
可以说基本上所有的嵌入式系统都具有一些特定的功能。
如一个IP转串口的小型嵌入式设备,其主要功能就是把IP(TCP/IP)数据转成RS232数据,或者把RS232数据转成TCP/UDP数据。
也正是基于这样特定和单一的功能,才能把这类嵌入式设备做的体积小巧并且价格低廉。
应用于专业领域的嵌入式系统通常都具有执行特定功能的特性。
嵌入式系统的这个特性要求设计者在实际设计嵌入式系统的时候一定要做详尽的需求分析,把系统的功能定义清晰,真正地了解客户的需求是做好设计的前提。
另外一点,如果在系统中增加一些不需要的功能不仅是开发时间上与经费上的浪费,也带来了系统整体性价比的降低,同样也会带来系统成本的增加。
2.1.2规模可变性
规模可变主要是指嵌入式系统是以微处理器与周边器件构成核心的,其规模可以变化。
嵌入式处理器可以从8位到16位,到32位甚至64位都有。
正是基于这个特点,嵌入式开发工程师开发过程中先设计与调制系统中基本不会变的那个部分一通常是指嵌入式处理器核心电路部分,也就是小系统部分,然后再根据实际的应用扩展其外围接口。
嵌入式系统的这个特点给开发人员在系统设计过程中带来了很大的灵活性。
需要变化的时候,使系统的设计可以快速地进行扩展来适应需求。
比如系统内存的增加、系统外围接口的扩展等,都是很容易实现的,但前提是在系统设计的时候已经考虑到这部分的扩展冗余。
也就是说设计师在设计系统的时候,要适当考虑一下系统以后的扩展性。
最方便的方法就是通过一些跳线等方法做一些简单的扩展。
2.1.3实时性与稳定性
嵌入式系统因其应用情况通常会对时序和稳定性有一定的要求,也正是这样就出现了实时嵌入式系统等更深层次的系统。
常见的实时嵌入式系统有RTLinux、Nucleus等。
大家所熟知的火星探测器上使用的操作系统其实就是一个实时性很高的嵌入式系统,上面所使用的操作系统就是美国风河系统公司(WindRiverSystem)的Vxworks操作系统。
2.1.4系统的其他特性
嵌入式系统除了具有以上几个特性外,还具有系统内核小、专用性强、系统小而精、使用多任务操作系统、有专门的开发配套工具等特点。
(1)系统内核小
因为嵌入式系统一般都使用应用于小型电予装置,所以系统资源相对有限,其内核也比传统的操作系统小很多,小的有几千字节,大的也不过几十兆。
(2)专用性强
嵌入式系统的个性化很强,软件和硬件的结合紧密,一般都针对硬件进行系统的移植,同时针对不同的任务,系统软件也需要更改一定程序,程序的编译下载和系统相结合。
(3)系统精简
系统软件和上层应用软件分离,每一次修改软件,不必把系统软件和上层软件一起编译调试,可以缩短开发的周期。
(4)高实时性
高实时性的操作系统软件师嵌入式软件的基本要求,软件一般都要求固化和存储的。
通常嵌入式系统中的软件都存储在Flash中的。
上电之后,才把这些软件中的部分调入RAM区中运行
(5)使用多任务的操作系统
嵌入式软件逐渐走向标准化,所以一般都使用多任务的操作系统。
嵌入式系统的应用程序可以没有操作系统在芯片上直接运行,但为了合理调度多个任务,充分利用系统资源、系统函数等,推荐使用RTOS开发平台。
(6)具有专门的开发工具和开发环境
由于嵌入式系统本身不具备自身开发能力,必须有一套开发工具和环境才能惊醒开发,这些工具和环境一般是基于通用计算机上的软硬件设备,以及各种仪器仪表等。
开发时一般分为主机(HOST)和目标机(TARGET)两个概念,主机用于程序开发,目标机作为最后的执行机。
一般都是在主机上建立于目标机的编译环境,编译目标机要运行的代码,然后把编译出来的可执行二进制代码通过主机和目标机之间的某种通信接口和协议传输到目标机上进行烧录和运行。
第2.2节ARM处理器体系结构
1990年1月成立于英国剑桥的ARM公司,主要出售芯片设计技术的授权。
目前,采用ARM技术知识产权(IP,IntellectualProperty)为核心的微处理器,已遍及汽车、工业控制、消费电子、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用己占据32位RISC芯片75%以上的市场份额,ARM技术可谓无处不在[6]。
2.2.1ARM处理器的特点
ARM处理器具有诸多技术优势,在嵌入式的各领域应用中表现出色,采用RISC架构的
ARM微处理器一般具有如下特点:
(1)体积小、低功耗、低成本、高性能;
(2)支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位和16位器件;
(3)大量使用寄存器,指令执行速度更快;
(4)大多数数据操作都在寄存器中完成;
(5)寻址方式灵活简单,执行效率高;
(6)指令长度固定。
2.2.2ARM内核种类分类
带有ARM内核的处理器大概有千种以上,这里不做介绍。
ARM微处理器目前主要包括
以下几个系列,除了具有ARM体系结构的共有特点之外,每一个系列的ARM微处理器都有
自己的特点和应用领域。
(1)ARM7处理器;
(2)ARM9、ARM9E处理器;
(3)SecurCore处理器;
(4)StrongARM处理器。
其中,ARM7、ARM9、ARM9E和ARMl0为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。
SecurCore系列专门为安全要求较高的应用而设计。
这里对各类处理器核的ARM流水线做一下对比,表2.1所示。
表2.1ARM处理器内核流水线
芯片类型
工作流程
ARM7
预取
译码
执行
ARM9
访问
写回
2.2.3ARM处理器工作状态
从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换
(1)ARM状态,此时处理器执行32位的字对齐的ARM指令;
(2)THUMB状态,此时处理器执行16位的、半字对齐的Thumb指令。
ARM与THUMB;
(3)THUMB指令是ARM指令的子集;
(4)可以相互调用,只要遵循一定的调用规则;
(5)THUMB存储空间约为ARM代码的60%~70%;
(6)THUMB指令数比ARM代码多约30%~40%;
(7)存储器为32位时ARM代码比THUMB代码快约40%;
(8)存储器为16位时THUMB比ARM代码快约40%—50%;
(9)使用THUMB代码,存储器的功耗会降低约30%。
正在执行THUMB指令集的处理器是工作在THUMB状态下的。
同样,正在执行ARM指令集的处理器是工作在ARM状态下。
ARM状态下的处理器不能执行THUMB指令,在THUMB状态下的处理器也不能执行ARM指令。
ARM处理器总是在ARM状态下开始执行代码。
ARM处理器支持7种处理器模式,取决于体系结构版本。
2.2.4ARM处理器工作模式
ARM处理器具有7种工作模式,详情见表2.2。
表2.2ARM处理器的工作模式
CPSR[4:
0]
模式
用途
可访问的寄存器
10000
用户
正常用户模式,程序正常执行。
PC,R14~R0,CPSR
10001
FIQ
处理快速中断,支持高速数据传输或通道处理。
PC,R14_FIQ~R8_FIQ,R7~R0,CPSR,SPSR_FIQ
10010
IRQ
处理普通中断。
PC,R14_IRQ~R13_FIQ,
R12~R0,CPSR,SPSR_IRQ
10011
SVC
操作系统保护模式,处理软件中断(SWI)。
PC,R14_SVC~R13_SVC,
R12~R0,CPSR,SPSR_SVC
10111
中止
处理存储器故障,实现虚拟存储器和存储器保护。
PC,R14_ABT~R13_ABT,
R12~R0,CPSR,SPSR_ABT
11011
未定义
处理未定义的指令陷阱,支持硬件协处理器的软件仿真。
PC,R14_UND~R13_UND,
R12~R10,CPSR,SPSR_UND
11111
系统
运行特权操作系统任务。
PC,R14~R0,CPSR
除用户模式外的其他6种模式称为特权模式。
特权模式中除系统模式以外的5种模式又称为异常模式,即:
FIQ(FastInterruptRequest),IRQ(InterruptReQuest),SVC(Supervisor),中止(Abort),未定义(Undefined)[7]。
2.2.5ARM寄存器组成概述
ARM处理器总共有37个寄存器,可以分为以下两类寄存器:
结构如表2.3。
(1)31个通用寄存器:
R0~R15;
R13_svc、R14_svc;
R13_abt、R14_abt;
R13_und、R14_und;
R13_irq、R14_irq;
R8_frq、R14_frq。
(2)6个状态寄存器:
CPSR、SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq。
表2.3寄存器结构
寄存器类别
各种模式下实际访问的寄存器
通
用
寄
存
器
和
程
序
管理
普通中断
快速中断
R0
R1
R2
R3
R4
R5
R6
R7
R8
R8-fiq
R9
R9-fiq
R10
R10-fiq
R11
R11-fiq
R12
R12-fiq
R13(sp)
R13-svc
R13-abt
R13-und
R13-irq
R13-fiq
R14(lr)
R14-svc
R14-abt
R14-und
R14-irq
R14-fiq
R15(pc)
状态寄
存器
CPSR
无
SPSR-sve
SPSR-abt
SPSR-und
SPSR-irq
SPSR-fiq
2.2.6ARM处理器的异常向量列表
一般来说,将一张异常向量列表至于首地址处,当产生异常响应,ARM处理器会自动跳转到对应地址执行程序,表2.4。
表2.4异常中断向量表
异常类型
向量地址
优先级
异常中断含义
复位(Reset)
0x00000000
1
当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异中断处理程序处执行,复位异常中断通常用在下面几种情况下:
系统加电时、系统复位时、跳转到复位中断向量处执行,称为软复位。
未定义的指令(undefinedinstruction)
0x00000004
6
当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断