嵌入式 USB 主机技术.doc_第1页
嵌入式 USB 主机技术.doc_第2页
嵌入式 USB 主机技术.doc_第3页
嵌入式 USB 主机技术.doc_第4页
嵌入式 USB 主机技术.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1绪 论1.1 课题研究背景usb是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。usb接口支持设备的即插即用和热插拔功能。usb接口可用于连接多达127种外设,如鼠标、调制解调器和键盘等。usb自从推出后,已成功替代串口和并口,并成为当今个人电脑和大量智能设备的必配的接口之一。usb技术诞生于1994年,当时是由pc界的几位巨头,如康柏、ibm、intel和microsoft等共同推出的,旨在统一外设接口。可是usb标准的真正颁布是在1996年,当时的标准是usb1.0,由于没有操作系统和主板产品的支持,所以usb这一标准在出台后并没有得到迅速地推广。直到1998年,usb才迎来了广泛的应用,首先是it业界巨头们制定了新的usbl.l标准,使usb技术更加成熟可靠,接着win98发布,win98宣布正式对usb接口提供支持,usb才得以真正发展起来,并成为当今主流的接口技术。当前,在市场上流行的usb接口主要符合:usb1.1 、 usb2.0和usb otg三种规范2。usb技术的出现已经使得pc和外围嵌入式设备用最简单的方法实现了连接,从而降低了各种产品的制造成本,同时也避免了不同设备接口的混乱局面。但是,usb标准是围绕pc而开发的一套通用接口标准,它的主从结构使得usb不支持非pc的点对点连接,其实也就是说不能通过usb总线实现pda到手机,数码相机到打印机,mp3、mp4 到smart phone的直接连接。离开了pc机的usb主机接口,所有具备usb从机接口的嵌入式设备根本无法相互识别,更不能互相通信。为了解决这个困扰usb发展的问题,usb-if(usb implementers forum,usb 应用者论坛)于2001 年12月发布了一个补充规范,即 usbotg(on-the-go),其主要目的就是在没有pc的情况下实现设备之间的数据传送。但并不是从理论上定义了usb otg,就能够直接投入到现实中使用。因为目前各类嵌入式外设间还没有将usb otg引入到开发标准中,尽管usbotg已经解决了两个设备间的控制管理和电源管理的关键性问题,但是数码相机、mp3、mp4、pda等这些外部设备间并没有在驱动程序上进行调整,两个设备还不能实现相互的有效的识别。不同设备间的直接验证成了非常复杂的问题,限制了以前的设备实现usb otg,这还需要众多外部设备生产厂商间的协同与沟通。在这种情况下,为了尽快摆脱以pc为中心的局面,实现越来越多的数码外设之间的互连、互通,研究和发展嵌入式usb主机技术就显得尤为重要。1.2 研究的目的及意义嵌入式 usb 主机技术就是在嵌入式产品中加入 usb 主机接口,使嵌入式产品能够像 pc 机一样,连接各种各样的 usb 设备,如 usb 鼠标、usb 键盘、usb 移动存储设备等等。随着半导体工业的发展,嵌入式处理器从 8 位、16位发展到 32 位甚至 64 位,并向着多线程多内核方向发展,嵌入式系统的硬件功能越来越强大。其工作频率的提升与工作效率的提高,使得嵌入式系统中的高速运算、多媒体运算等成为可能。这在运算速度、处理能力上为实现嵌入式usb 主机技术提供了保证。同时,随着 ic 制造技术的发展进步和 usb 技术的不断推广,现在已有为数不少的半导体公司提供 usb 主机接口芯片,如philips, cypress, atmel, ali 和 scanlogic 等。越来越多的片上系统中也集成了usb 接口,这些硬件上的进步为实现嵌入式 usb 主机技术提供了良好的硬件基础。在软件方面,嵌入式操作系统的迅速发展在很大程度上缓解了开发嵌入式 usb 主机接口的难度。以 linux 操作系统为例,linux 操作系统是当前非常流行的嵌入式操作系统,它以功能强大、系统稳定、开放源码、驱动程序丰富、支持多种硬件平台、易于移植等特点在嵌入式领域得到越来越多的应用。linux内核从 2.4 版本以后就开始包含 usb 核心子系统,支持 usb 主机驱动。经过以上分析,开发具备 usb 主机接口的嵌入式系统的软硬件环境都已经成熟。在 pc 领域,usb 接口已经成为通用的接口之一,市场上出现了数以亿计的 usb 外设和接口转换设备。usb 接口技术得到了非常广泛的应用和发展。目前,在嵌入式领域要充分利用现有的资源,最好的方式之一就是在嵌入式系统中提供 usb 主机接口。从而,摆脱以 pc 为中心的局面,满足人们对数据交换的可移动性和便携性的要求。1.3 课题研究的主要内容综上所述,本方案的最终目标为在基于arm嵌入式硬件平台和嵌入式linux操作系统的支持下实现嵌入式系统的usb host功能。论文工作分两阶段完成:第一阶段为搭建基于s3c2410b+uclinux的嵌入式开发平台。主要的工作有:设计实现符合硬件板要求的系统启动引导程序bootloader和在arm板上移植uclinux内核。对uclinux内核进行裁剪、配置、交叉编译并成功移植在系统硬件平台上。总结了uclinux移植过程需要注意的事项和make文件,对一般bootload程序进行了优化,利用make文件研究理清了uclinux内核源代码的编译过程,使用交叉编译技术编译uclinux内核。深入研究了嵌入式操作系统linux的内存管理策略,分析了其内存管理策略存在的问题,给出改进算法,改善了内存分配回收效率。第二阶段为在该嵌入式开发平台上实现嵌入式usb主机功能以构建完整地嵌入式usb主机系统。在此主要完成主机控制器驱动的实现,为此从研究usb协议规范和usb体系结构入手,结合具体芯片的特点,总结uclinux系统下设备驱动程序开发的一般方法,编写了usb主机控制器的驱动程序,实现系统板上usb接口模块的主机功能。1.4 论文的组织结构本文分为七章:第一章阐述了课题的研究背景及意义,给出了文章主要的工作内容。第二章介绍了嵌入式系统开发平台sbc2410。描述了本系统所用实际硬件平台环境,侧重介绍软件开发涉及的主要硬件;分析了构建软件开发平台需要完成的工作,包括软件方案确定、开发环境建立、开发工具简介,研究了嵌入式软件开发流程。第三章基于uclinux的usb主从机功能原理,简要介绍了usb的拓扑结构及usb总线传输协议;分析usb系统与usb主从机系统工作原理。第四章研究在硬件平台上搭建操作系统环境,分析了bootloader的代码结构及移植流程;接着分析了linux内核,进行内核编译,同时分析了uclinux内存管理与改进。第五章介绍了linux操作系统下usb系统及其驱动程序的结构,分析了设备驱动程序的开发流程,及其中断管理和初始化过程。第六章描述usb驱动在嵌入式平台上的实现,通过分析usb文件系统,编写了基于arm处理器的usb主机控制器驱动程序,在基于arm的嵌入式平台上实现了usb主机控制器功能,然后研究嵌入式平台上usb设备的实现技术。第七章对全文进行了总结及展望 2 嵌入式系统开发平台sbc24102.1 嵌入式系统开发主要技术研究嵌入式技术是计算机技术、半导体技术和微电子技术等多种先进技术的融合。在所谓的后pc时代,随着计算机技术和通信技术的飞速发展,互联网的迅速普及以及3c(计算机、通信、消费电子)融合的加速,系统的微型化和专业化成为发展的新趋势,嵌入式技术已成为新世纪最有生命力的技术之一,得到了飞速的发展和广泛的应用。它通过在各个行业的具体应用渗透到社会生活的各个角落,不仅广泛应用到交通、通信、工业生产、军事国防、医疗卫生、科学教育等相关行业,而且深入到家电、娱乐、艺术、社会文化等各个领域。目前,嵌入式产品主要包括有消费类电子产品、通信和数据通信类产品、军事和航空领域的嵌入式设备、汽车电子类产品、工业自动化类应用、医疗电子类和办公自动化类产品。可见,嵌入式系统已与人们的生活息息相关。由于嵌入式系统的外延极广,因此很难给它下一个准确的定义。目前常说的嵌入式系统概念的重心放在“系统”上,指能够运行操作系统的软硬件综合体。总体上嵌入式系统可以划分成硬件和软件两部分,硬件一般由高性能的微处理器和外围接口电路组成,软件一般由操作系统和其上运行的应用软件构成,软件和硬件之间由所谓的中间层(如bsp层)连接。2.1.1 嵌入式系统的组成与特征嵌入式系统是计算机软件与硬件的综合体,它是以应用为中心,以计算机技术为基础,软硬件可裁减,从而能适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统一般由嵌入式硬件系统和嵌入式软件系统组成,如图2-1所示。嵌入式应用软件嵌入式操作系统嵌入式硬件平台图2-1 嵌入式系统结构图嵌入式系统作为专用计算机系统,和通用计算机系统相比,具有以下典型特征:(1)嵌入式系统通常是面向特定应用的。嵌入式处理器与通用型处理器最大不同就是嵌入式处理器大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、抗干扰性强、集成度高等特点,能够把通用处理器中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,与互联网的结合也越来越紧密。相对通用处理器而言,嵌入式处理器的内核设计更加丰富多样,目前主流内核有arm核、mips核、68k/coldfire核以及powerpc核,它们均是针对特定领域而量身设计的。(2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。(3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。因此对操作系统的要求相当高,嵌入式操作系统丰富多样,最为典型的有rt-linux,wince, vxworks,qnx的neutrinortos等。(4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。(5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。(6)嵌入式系统本身不具备自主开发能力,即使设计完成以后用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行进行开发。2.1.2 arm系列处理器的体系结构arm公司(advanced risc machines)成立于1990年,是嵌入式risc处理器的知识产权ip供应商,它为arm架构处理器提供arm处理器内核。目前主流的arm处理器系列有:arm9系列、arm 10系列、strong arm系列、xscale系列。下面介绍arm体系结构的一些重要概念3。1.工作状态arm处理器支持arm和thumb两种工作状态。arm工作状态下,此时处理器执行32位、字对齐的arm指令。在thumb工作状态下,此时执行16位、半字对齐的thumb指令。thumb指令集为arm指令集的功能子集,处理器运行于thumb状态时,可以直接执行按压缩方式存储的指令,这对于内存较小的嵌入式系统有着重要意义。arm微处理器的指令长度可以是32位(在arm状态下),也可以为 16位(在thumb状态下)。arm微处理器中支持字节( 8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需耍2字节对齐(地址的最低位为0)处理器工作状态:从程序员的角度,arm可以处于两种状态中的一种:位-字对齐指令的arm状态和位-半字对齐指令的thumb状态。状态切换方法:arm指令集和thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但arm微处理器在开始执行代码时,应该处于arm状态。进入thumb状态:当操作数寄存器的状态位(位0)为 1时,可以采用执行bx指令的方法,使微处理器从arm状态切换到thumb状态。此外,当处理器处于thumb状态时发生异常(如irq、fiq、undef、abort、swi等),则异常处理返回时,自动切换到thumb状态。进入arm状态:当操作数寄存器的状态位为0时,执行bx指令可以使微处理器从thumb状态切换到arm状态。此外,在处理器进行异常处理时,把pc指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到arm状态。2.运行模式arm处理器有7种运行模式,处理器在每种状态下拥有独立的堆栈寄存器r13、链接寄存器r14和保护程序状态寄存器spsr(用户态与系统态共用),这种结构有利于系统状态切换和程序调用。它的7种模式如下:(1)用户模式(user)无特权模式,对系统资源的访问受到限制。进程在用户模式时可以通过swi指令进入监管模式。(2)外部中断模式(irq)处理器响应中断请求时,进入外部中断模式,可以访问系统资源。处理器完成中断处理后通过“中断返回”回到原来的模式。(3)快速中断模式(fiq)处理器响应快中断请求时,进入快速中断模式,可以访问系统资源。处理器拥有专用寄存器r8-r12,便于快速响应。完成快中断处理后返回原来的模式。(4)特权模式(supervisor)操作系统内核运行状态,处理器拥有访问系统资源的全部权限。处理器通过swi指令从用户模式进入,完成服务和处理后,处理器通过“中断返回”回到用户模式。(5)数据访问中止模式(abort)处理器越权访问、取指令失败、或者无法完成一条指令的执行时,进入数据访问中止模式。完成异常处理后,处理器通过“中断返回”回到原来的模式。(6)未定义模式(undefined)处理器收到未定义操作码的指令。(7)系统模式(system)拥有部分系统特权的用户状态,用来在内核以外实现“系统级”的进程。为设备服务进程设计。3.异常异常(exception)由内部或外部源产生,以引起处理器处理一个事件。arm处理器有7种异常3。这7种异常类型以及相应的处理器模式、异常向量地址、优先级如表2-1所示:表2-1 arm处理器的异常表异常类型处理器模式异常向量地址优先级复位特权0x000000001(最高)未定义指令未定义0x000000046软件中断(swi)特权0x000000086取指令中止数据访问中止0x0000000c5取数据中止数据访问中止0x000000102中断irq中断0x000000184快中断fiq快中断0x0000001c34.存储器和外设i/o映射arm处理器采用统一编址的方式管理存储器和外设i/o,所有的存储器和外设都被映射到内存。它对不同设备的总线宽度、访问延迟可以通过专门的寄存器来设置。 arm体系结构将存储器看作是从零地址开始的字节的线性组合。从0字节到3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,arm920t体系结构所支持的最大寻址空间为4gb(232)。arm体系结构可以用两种方法存储字数据,称之为大端格式和小端格式:大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2-2所示:89101145670123图2-2 大端格式图小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图2-3所示:11109876543210图2-3 小端格式图5寄存器组织。arm微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器r14r0、程序计数器pc、一个或两个状态寄存器都是可访问的。6.流水线一条指令的执行分为取址、译码、取操作数、执行运算、存储器访问、回写寄存器6个步骤。arm处理器采用流水线重叠技术执行指令,在每个机器周期,可以同时执行多条指令。arm7架构采用3级流水线: arm9和strong arm架构采用5级流水线。7. cache结构arm处理器采用指令cache(快存)和数据cache,用于在处理器与主存储器之间存放当前被使用的主存部分的内容,以减少访问主存的等待时间。处理器取地址或操作数时,首先在cache中进行地址比较,一旦命中便不再访问主存。cache的替换常采用随机法、近期最少使用lru法和循环法。8.内存管理单元(mmu)与地址变换后备缓冲器(tlb)对于32位地址、4gb寻址的arm架构处理器,一般采用mmu实现逻辑地址转换和对存储器系统的精细控制。mmu采用2级页表的页式寻址方式,每次访问需查2次表。对mmu的管理通过系统控制协处理器cp15来实现。cp15协处理器的功能包括mmu的使能和中止、地址变换表的基址、访问权限、故障处理、cache操作、tlb操作等。由于页目录和页表都存放在主存中,从逻辑地址变换到物理地址需要读两次主存。处理器在逻辑地址和物理地址之间插入一个地址变换缓冲器tlb,它类似于快存的结构,每一项都由逻辑页号和物理页号组成,这有利于减轻逻辑地址到物理地址的转换开销。2.1.3 嵌入式软件的开发流程由于嵌入式系统是一个受资源限制的系统,因此直接在嵌入式系统硬件平台上进行编程显然是不合理的。在嵌入式系统的开发过程中,采用的方法一般是在通用pc上编程,然后通过交叉编译链接,将程序做成目标平台上可以运行的二进制代码。最后将编译链接成的二进制代码通过jtag、串口或网口下载到目标平台存储器的特定位置,由目标板上的启动代码运行这段二进制代码,从而启动嵌入式软件系统。嵌入式软件开发的主要流程为:建立交叉编译环境、代码编写、交叉编译、交叉链接、重定位下载和联机调试。如图2-4所示。 图2-4 嵌入式系统软件的开发流程1.建立交叉编译环境建立交叉编译环境是进行嵌入式系统软件开发的第一步。本设计是在x86的linux平台上建立一个面向arm的开发平台,步骤如下:(1)从/下载需要的文件包,包括binutils、gcc、glibc等。(2)按顺序对编译器、链接器和函数库进行编译和安装,在配置时需要使用-target=arm-linux选项指定开发环境的目标平台。(3)安装结束之后,在安装目录下有arm-linux-gcc、arm-linux-ar、arm-linux-ld等工具程序,这些就是交叉开发平台的程序。手工构造一个交叉编译环境,对于大多数普通程序员来说不是一件简单的事情,因此,uclibc的开发者创造出一个叫做buildroot的工具集。buildroot是一系列makefile和补丁文件的组合。buildroot将自动构造编译基于uclibc代码的工具集和uclibc库,并提供一个可配置的框架和一些构建一个基本系统的配置文件。用户只需要通过配置菜单选择相应的目标软件,buildroot就可以从构建基本工具集开始,一直到最后构建出目标系统所需要的东西。如嵌入式系统常用的基于ext2的initrd,jffs根文件系统,压缩的根目录树等。2.交叉编译和链接简单地说,交叉编译就是在一个平台上生成另一个平台上的可执行代码。这里所指的“平台”实际上包含两个概念:体系结构(architecture)和操作系统(operating system)。在本设计中,主机平台的体系结构是x86,操作系统是red hat linux。目标平台的体系结构是arm920t,操作系统采用的是嵌入式linux2.4.18。在交叉环境中,arm-linux-gcc是编译器,arm-linux-ld是链接器。有了交叉编译链接工具就能生成在目标平台上执行的映像文件。3.重定位和下载生成了目标平台需要的映像文件之后,就可以通过相应的工具与目标平台上的bootloader程序进行通信。一般在目标平台上使用串口,通过主机端串口通信软件和目标平台通信。在windows系统下常用的串口通信软件有超级终端,在linux系统下一般用minicom。bootloader中提供了下载和烧写映像文件的命令。因为目标平台的linux系统映像文件和根文件系统映像文件都比较大,一般在1到2mbyte,这样通过串口下载映像文件太慢,所以通常通过网口,利用tftp协议下载系统映像文件到目标平台的指定位置,然后烧写到flash中的指定位置。重新复位目标平台,这样整个嵌入式系统就开始运行了。4.远程调试嵌入式软件经过编译和链接后即进入调试阶段。在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行远程调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中。调试器和被调试进程通过串口或者jtag接口进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。嵌入式系统的远程调试一般具有如下一些典型特点:(1)调试器和被调试进程运行在不同的机器上,调试器运行在pc或者工作站上(宿主机),而被调试的进程则运行在各种专业调试板上(目标机)。(2)调试器通过某种通信方式与被调试进程建立联系,如串口、并口、网络、jtag或者专用的通信方式。(3)在目标机上一般都具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。这种调试代理可能是某些支持调试功能的硬件设备(如dbi 2000),也可能是某些专门的调试软件(如gdbserver)。(4)目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。此时物理上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区别。2.2 嵌入式开发系统sbc24102.2.1 arm920t处理器arm920t处理器内核采用哈佛结构,5级流水线(包括取指、分析、执行、访存、写存);分立的指令和数据cache都是16kb,8个字的数据总线;采用增强的arm体系v4的mmu,以提供对指令和数据地址的翻译和访问许可检查;支持arm调试结构,包含了辅助软件和硬件调试的逻辑电路;还具有协处理器支持5。arm920t的功能模块如图2-5所示:图2-5 arm920t系统结构图arm920t处理器的编程模型包括arm9tdmi内核以及以下增加和更改。(1)arm920t处理器包含了两个协处理器:cp14,允许软件访问调试通信通道。cp15,系统控制协处理器,提供附加的寄存器,用来配置和控制arm920t的cache,mmu,保护系统,时钟模式和其他系统操作,可以使用mcrm和rc访问cp15定义的寄存器。(2)提供了外部协处理器界面,允许在同一片上布置相关的协处理器,例如,一个浮点运算单元。可以用适当的协处理器指令访问任何一个挂接在外部协处理器界面上的协处理器的寄存器并进行操作。(3)取指,读/写数据的内存访问可以放到cache中或缓冲器(buffer)中。(4)内存管理单元(mmu)页表常驻主存,用来描述虚存到物理内存的转换、访问许可、cathe和写缓冲配置等。页表被操作系统软件所创建,任何时候,一个存储访问导致tlb丢失时, arm920t mmu硬件都会自动访问页表。(5)arm920t有一个调试界面接口,允许使用硬件和软件调试工具实时跟踪指令和数据。2.2.2 嵌入式开发系统sbc2410sbc-2410x是广州友善之臂科技有限公司设计生产的一款的嵌入式开发板。它基于三星公司的arm处理器s3c2410,采用6层板设计。s3c2410x使用arm920t内核,内部带有全性能的mmu(内存管理单元),它适用于设计移动设备类产品,具有高性能、低功耗、接口丰富和体积小等优良特性。sbc-2410x正是基于此芯片本身的特点而设计的。sbc-2410x的设计遵循了s3c2410芯片的特点,其设计理念参考了当前市场上众多的开发板及嵌入式单板机的优点,融入最新掌上电脑/手持设备的特点,因此是一款单板机和开发板两用的嵌入式电脑平台。整个板子的尺寸只有120mmx90mm,仅相当于一个普通pda的大小。sbc-2410x作为开发板,同其他开发板最大的区别或许就是,它在尽可能小的板面上集成了64m sdram, 64m nand flash、网卡、音频、usb host,usb slave、标准串口、sd卡插座、用户按键和一些led灯等设备和接口,并引出cpu的大部分信号引脚。它几乎具备了一台pc所有的接口,因此很适合移动设备爱好者做自己喜爱的东西。主控制器s3c2410由arm9tdmi、存储管理单元(mmu)和高速缓存三部分组成。其中,mmu可以管理虚拟内存,高速缓存由独立的16kb地址和16kb数据高速cache组成。arm920t有两个内部协处理器:cp14和cp15。cp14用于调试控制,cp15用于存储系统控制以及测试控制。s3c2410体系结构如图2-6:图2-6 s3c2410体系结构3 基于uclinux技术的usb主从机工作原理3.1 usb系统概述在usb的星型拓扑结构中有且只有一个usb host (usb主机),居于核心地位,控制着总线上所有的usb设备及集线器的数据通信。硬件上usb主机和usb根集线器被设计到一起成为usb主机控制器。usb的所有标准主要包含:?usb基本规范:规定了usb总线的系统结构,物理、机械、电气特性,数据传输格式,usb hub等usb总线的基本内容。?usb设备类规范:规定了不同属性usb设备的配置和数据传输特性。usb设备可以划分为存储设备类(mass storage device),打印机设备类、语音设备类等十二类。协议为usb设备提供了描述符、类、功能/接口、端点、管道和设备地址等几种属性。?usb主机控制器规范:规定了usb主机硬件接口规范。usbl.l中有通用主机控制器接口(uhci)和开放式主机控制器接口(ohci)两种标准。usb2.0中只有增强型主机控制器接口(ehci)一种标准。在设计usb协议栈时必须了解相关的usb主机控制器规范。3.2 usb的拓扑结构usb系统通过具有相同接口的串行连线将不同的设备连接到一起。usb的物理拓扑为分层的星型结构,由三层组成:usb主机(host), usb设备(device)和usb集线器(hub)。usb主机是星型结构的中心,它通过usb集线器连接更多的usb设备,组成usb系统。由于总线电气性能的原因,物理上usb设备最多可以通过usb集线器扩展到6层。从逻辑上看,usb主机可以与分层的usb设备直接通信,就好像与设备直接相连一样10。3.2.1 usb主机作为usb系统的主控组件,usb主机控制usb总线上所有usb设备和集线器的数据通信过程。在整个usb系统中只允许有一个usb主机,而且必须要有一个usb主机控制整个系统的数据传输工作。所有的数据传输都是由usb主机发起的。usb主机在usb系统中是一个起协调作用的实体,不仅占有特殊的物理位置,而且对于usb以及连到usb上的设备来说,还负有特殊责任:主机控制所有usb设备的访问;一个usb设备想要访问总线必须由主机给予它使用权;主机还负责监督usb的拓扑结构。3.2.2 usb设备usb设备就是能够通过usb来发送和接收数据从而实现一定功能的实体。usb设备从底层的物理和电气特性到上层的软件协议和数据结构都有严格的定义,分为很多usb设备类,如键盘、打印机等。每个usb设备都有表明自身能力和所需资源的描述符。在设备第一次连接到主机上之后,首先要接受主机的枚举,提供描述符,在得到主机的允许之后,设备就可以分得usb的带宽,进行数据传输了。在总线的数据传输过程中,相对于usb主机而言,usb设备一直扮演着受控的角色,按照usb主机的要求接受或发送数据。根据数据传输的速度不同,usb设备被分为全速设备(12mb/s)和低速设备(1.5mb/s)两种,在usb 2.0的版本中还定义了高速设备,传输速率达到480mb/s。3.3 usb总线传输协议usb总线传输协议是usb设备和usb主机之间的数据流协议。数据在主机和设备之间的传输过程,在usb总线传输协议中被分成了三层:信号层、协议层和数据传输层。首先介绍一下相关的基本概念。?端点:每一个usb设备在主机看来就是端点的集合,主机只能通过端点与设备进行通讯,以使用设备的功能。每个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已定义好其地址的分配。在usb系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性,其中包括传输方式、总线访问频率、带宽、端点号、数据包的最大容量等。端点必须在设备配置后才能生效(端点0除外)。端点0通常为控制端点,用于设备初始化等,端点1、2等一般用作数据传输端点,存放主机与设备间往来的数据。?接口:usb端点被捆绑为接口。每个usb接口只处理一种usb逻辑连接,例如鼠标、键盘等。因为一个usb接口代表了一个基本功能,因而每个usb驱动程序控制一个接口。?配置:usb接口本身被捆绑为配置。一个usb设备可以有多个配置。而且可以在配置之间切换以改变设备的状态,但一个时刻只能激活其中一个配置。?管道:一个usb管道是主机驱动程序的一个数据缓冲区与一个usb外设端点的连接,它代表了一种在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道有两种类型:数据流管道和消息管道。?帧:usb协议中的帧可以看成是一个时间单位,也可以看成是一个长度单位。从时间单位上来看,一帧的长度为lms,系统中所有事务的处理过程都是在一个个以帧为单位的时间周期内完成。从长度上来看,对于usb1.1协议,一帧的数据长度为12000比特,如果所有的事务处理不能占满整个帧长时,主机会填充上空闲位。3.3.1 usb数据传输的基本结构包是usb系统中信息传输的最基本单元,所有数据都是经过打包后在总线上传输的。下面介绍包的组成部分和usb协议所支持的包的类型。1、usb包的组成部分所有的包都是由不同的域组成的:1)同步域(sync field):所有的包都起始于同步域,它被用于本地时钟与输入信号的同步,并且在长度上定义为8位。sync(同步字段)的最后两位作为一个记号,表明pid(包标识符)的开始。2)标识域(pid field ):对于每个包,pid都是紧跟着sync的,pid指明了包的类型及其格式。主机和所有的外设都必须对接收到的pid域进行解码,如果出现错误或者解码为未定义的值,那么这个包就会被接收者忽略。如果外设接收到一个pid,它所指明的操作类型或者方向不被支持,外设将不做出响应。3)地址域(address field ):外设端点都是由地址域指明的,它包括两个子域:外设地址域和端点域。外设必须解读这两个域,其中有任何一个不匹配,就会被忽略。外设地址域(addr)指定了外设的地址,它根据pid所说明的令牌的类型,指明了外设是数据包的发送者或接收者。addr共7位,因此最多可以有127个地址。这也就直接的解释了在usb1.1协议中为什么一个usb主机最多可以寻址127个usb设备。一旦外设被复位或上电,外设的地址被缺省为0,这时必须在主机枚举过程中被赋予一个唯一的地址,而0地址只能用于缺省值,而不能分配作一般的地址。端点域(endp)有4位,它使设备可以拥有几个子通道。所有的设备必须支持一个控制端点0 (endpoint 0)。低速的设备最多支持2个端点:0和一个附加端点。高速设备可以支持最多16个端点。4)帧号域(frame number field ):这是一个11位的域,指明了目前帧的序号,每过一帧(1ms)这个域的值加1,到达最大值7ffh时归0。这个域仅在每帧最初时刻在sof标记中被发送。5)数据域(data field):由pid、包括至少0个字节数据的数据区和crc构成,而且必须是整数个字节。6)crc校验域:循环冗余校验被用来在标记和数据包中保护所有的非pid字段。在上下文中,这些字段被认为是保护字段。pid不在含有crc的包的crc校验范围内。2、usb包的类型根据pld类型,usb协议规范支持四类不同的数据包:令牌包、数据包、握手包和前导包。各个包的大小不一。(1)令牌包(token packet)令牌包有in(输入)、out(输出)、setup(设置)和sof(start of frame帧起始)四种类型。其中in, out, setup的格式如表3-1所示。表3-1 in,out,setup数据格式8bits7bits4bits5bitspidaddrendpcrc5对于out和setup来说,外设地址域addr和端点域endp中所指明的端点将接收到主机发出的数据包,也就是说特定usb设备的特定端点将收到来自usb主机发送的数据包。而对in来说,所指定的端点将输出一个数据包,即特定usb设备的特定端点将向usb主机发送数据包。而sof包是由8位的pid、其后的11位的帧号和5位的crc构成,其格式如表3-2所示。表3-2 sof数据格式8bits11bits5bitspidframe numbercrc5(2)数据包(data packet)数据包由pid,data和crc组成,其中data可能为0个字节,如表3-3所示。数据包有两种类型,其pid分别为data0和data1。这两种数据包是为了支持数据切换同步而定义的,在数据传送时,这两种数据包将交替出现。数据必须以整数的字节数发出。数据crc只计算包中的data域,不包括pid。表3-3 数据包格式8bits0-1023bits16bitspiddatacrc16(3)握手包(handshake packet)握手包仅由标识域pid构成,如表3-4所示。握手包用来报告数据传输的状态。只有支持流控制的传输类型(控制、中断和批传输)才能返回握手包。握手包有三种类型:?确认包ack:表明数据接收成功。?无效包nak:指出设备暂时不能传送或接收数据,但无需主机介入,可以解释成设备忙。?出错包stall:表示外设不能传输或者接收数据,或者不支持一个控制管道请求。主机不能返回stall,只能由外设返回。表3-4 握手包格式8bitspid(4)前导包(preamble packet )前导包同握手包一样仅由标识域pid构成,目的是为了是系统区分全速传输和低速传输,它提醒usb集线器,系统要传输的下一个包是一个低速包。表3-5 前导包格式8bitspid3.3.2 usb数据传输类型为了实现usb的通用性,满足多种不同类型的设备的数据通信要求,usb协议提供了4种数据传输方式,即批量传输(bulk transfer)、控制传输(control transfer)、中断传输(interrupt transfer)和实时传输(isochronous transfer) 。1、批量传输批量传输用于传输大块数据,并且数据的传输不要求有周期性或一定的数据传输速率。批量传输能够占用总线的任何空闲带宽来传输数据,如果总线带宽被其他传输方式占据时,批量传输可以等待。并且,批量传输采用数据检错和数据重传等方法来保证数据正确地到达目的地,是一种可靠的数据传输方式。另外批量传输只能用于高速设备,允许数据包最大容量为8、16、32或64字节。2,控制传输控制传输是usb协议中唯一传输usb命令函数的传输类型。控制传输是由usb主机发起的,旨在完成对系统中usb设备的配置、状态查询和管理等操作。usb命令的整个完成过程都是以控制传输的方式来实现的,因此所有的usb设备都必须支持控制传输,而且控制传输也是一种可靠的数据传输。同批量传输一样,控制传输也是一种非周期性的数据传输方式,不要求一定的总线传输速率,但它要求比批量传输更优先占用总线带宽。另外,为了更方便地完成命令,usb设备的控制传输的管道是双向的,其它的传输方式的管道则是单向的。3、中断传输中断传输是为这样一类设备设计的,它们只发送或接收少量的数据,并且并不经常进行数据传输,但它们具有一个确定的传输周期,每隔一定的周期要求传输一次。同批量传输一样,中断传输的事务处理过程也是以错误检测和重传的方式保证主机和usb设备之间传输数据的正确性。所有设备都支持中断传输。低速设备,最大的数据包大小可以是1-8字节,全速设备是1-64字节,而高速设备是1-1024字节。中断传输的操作只有输入这一个方向,具体格式与批操作的输入情形类似。4、实时传输实时传输主要用于与时间紧密相关的信息传输,它能保证设备与usb主机之间恒定的数据传输速率,确保发送方与接收方的速率能够匹配,是一种周期性数据传输方式。为了节省总线带宽、提高数据的传输速率、保持收发两端的同步,实时传输省去了数据重传和出错检测等方法,是一种不可靠的数据传输方式。3.4 usb的主从机工作原理从概念上讲,usb主机系统是包含usb主机控制器硬件和usb系统软件的计算机系统。硬件提供主机的物理接口:系统软件负责对设备的枚举与配置,总线管理与带宽、电流的分配,各种所需的数据传输过程的管理。3.4.1 usb主机系统结构从图3-1所示的usb主机系统结构可以看出,usb主机具有一套完善的系统结构,从软件到硬件被分为3个部分:1、usb总线接口层:处理电气信号层及协议层的互连,主要是指以主机控制器 为核心的硬件部分,包括串行接口引擎sie(serial interface engine),以实现数据的串并转换、产生帧起始包等功能。图3-1 usb系统主机结构2、usb系统层:使用主机控制器来管理host与device间的数据传输。系统层包括usb主机控制器驱动程序hcd(host controller driver), usb核心驱动程序usbd(usb driver)和主机软件三部分。3、usb用户层:基于软件层次的usb主机的组成部分,包括usb设备驱动程序实现设备类协议)和用户软件。3.4.2 usb主机控制器及其功能usb主机控制器就是通常所说的usb主机接口芯片的核心部分,处于主机系统结构的总线接口层,其驱动程序处于usb系统层,主要提供以下功能:1、对主机和设备的各种状态进行管理和控制;2、利用sie来完成数据串/并行化,即将主机输出的并行数据转换成串行数 据,而将设备发来的串行数据转换成并行数据;3、每隔lms产生一个帧起始包sof(start of frame)来将usb总线的时间划分为固定大小的帧(frame),在以帧为单位的时间间隔内进行usb数据传输;4、数据处理和协议引擎;5、处理三类数据发送传输错误;6、提供根hub及主机系统接口,用于提供与usb设备的连接点以及与核心cpu之间的通信接口。3.4.3 usb设备的描述符及标准请求命令当usb设备第一次连接到主机上时,主机要求了解usb设备的一些基本信息,比如设备有何种功能、需要占用多少usb资源、属于何种设备类等。只有主机完全确认了这些信息之后,设备才能正常工作。这些信息是通过存储在设备中的usb描述符来体现的。描述符可以看作是一个完整的数据结构,用于描述一个usb设备的所有属性。usb协议1.1中规定的标准的描述符包括以下几种:在usb对设备进行枚举时,主机需要对设备进行一系列设置。主机通过缺省的控制管道对设备发送一些基本的请求命令,完成读取设备状态、设备的各种描述符,并对设备重新分配地址,重新配置端口等功能。这些命令都是由控制传输方式来传送的。我们将这些基本的请求命令称为标准的usb设备请求命令,这些请求命令是主机配置usb设备的关键。标准的usb设备请求命令是一个8字节的数据包,在usb1.1协议中,这样的命令有11个,都具有相同的数据结构格式。结合usb系统的枚举过程和标准设备请求命令来看,usb系统的枚举过程其实就是主机向设备发送标准的设备请求命令的过程。从软件角度来看,主机按照枚举的过程依次向设备写入请求命令,在枚举功能完成之后,用户应用软件通过驱动程序并遵循一定的设备类协议对设备进行各种操作。3.4.4 usb从设备软件结构usb设备物理接口主要包括:usb接口、usb收发器和串行接口引擎(sie)三部分。usb接口仅提供cpu与sie的接口:usb收发器主要进行数据的差分转换;sie是核心模块,实现usb协议要求的主要功能,如同步字段的识别、数据位填充、地址识别、数据包标识符pid识别、crc判断、硬件握手等。usb设备的所有属性通过存储在设备中的数据结构usb描述符来体现。usb协议1.1中定义的标准描述符包括:设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。usb设备以从属工作方式响应主机发出的请求。在usb主机与设备通信时,主机通过缺省的控制管道对设备发送标准的usb设备请求命令,完成读取设备状态和各种描述符、对设备重新分配地址和重新配置端口等功能。设备控制器驱动程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论