最新开发usb驱动程序的方法连载一

合集下载

USB驱动程序(较详细)一

USB驱动程序(较详细)一

USB驱动程序(较详细)一内核使用2.6.29.4拓扑结构上, 一个 USB 子系统并不是以总线的方式来分布; 它是一棵由几个点对点连接构成的树。

这些连接是连接设备和集线器的4线电缆(地, 电源, 和 2 个差分信号线), 如同以太网的双绞线。

USB主控制器负责询问每个USB设备是否有数据需要发送。

由于这个拓扑结构,一个 USB 设备在没有主控制器要求的情况下不能发送数据. 也就是说:USB是单主方式的实现,主机轮询各外设。

但是设备也可以要求一个固定的数据传输带宽,以保证可靠的音视频I/O。

USB只作为数据传输通道,对他所收发的数据格式没有特殊的内容和结构上的要求,也就是类似于透传。

Linux内核支持两种主要类型的USB驱动程序:Host系统上的驱动程序(USB device driver)和device上的驱动程序(USB gadget driver)(设备端驱动)。

USB 驱动程序存在于不同的内核子系统和USB硬件控制器之中。

USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,它隐藏了USB控制器的硬件细节。

从这里我们要知道:《LDD3》所谓的USB驱动是针对USB核心提供的接口而写的,并不是真正去操纵USB硬件控制器中的寄存器。

这样你必须保证你的板子上CPU的USB硬件控制器的驱动是可用的。

否则您就得先搞定CPU的USB硬件控制器的驱动才行。

以下是Linux内核中USB驱动的软件构架:如左下图所示,从主机侧的观念去看,在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。

因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB 设备如何与主机通信。

10分钟完成一个USB驱动程序

10分钟完成一个USB驱动程序

很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的。

但是,现在也有不少人都开始借助一些辅助工具。

笔者去年开始接触到DriverStudio,发现它真的是一个不错的开发工具,不仅写代码的时候思路清晰,而且和DDK的结合很好。

当然,也有很多人觉得用DriverStudio不够正宗,或者说不能很好的理解Windows Device Driver的架构。

我感觉这就有点像MFC和SDK的关系,关于这个问题在很多地方都有争论,比如在万千新闻组上,就讨论了将近2个月。

每个人都有自己的最爱,都有自己的习惯,只要你能把事情做好,我想用什么方法应该都是一样的。

如果你已经习惯了用DDK开发,那完全还可以继续用下去;如果你觉得DriverStudio不错,那尝试用一个可以给你按照OOP 概念来编程的工具有什么不好呢?在驱动开发网上,经常看到有人询问一些关于DriverStudio的使用的问题。

我正好很有幸用它作了几个驱动程序,包括VXD, KMD和WDM,稍微有点心得,因此想写下来给大家作一个小小的参考。

如果其中有错误,欢迎大家给我指出,谢谢。

下面我就介绍一下用DriverStudio开发一个USB驱动程序的过程。

这个USB设备有3个双向端点,每个端点的配置如下:EP 类型地址buffer(Bytes)0 IN/OUT Control 0x80/0x00 16/161 IN/OUT Bulk 0x81/0x01 16/162 IN/OUT Bulk 0x82/0x02 64/64我们的驱动程序需要实现的功能就是控制设备上的LED灯的亮和灭,以及通过Endpoint 2对设备进行读写。

由于DriveStudio由几个部分组成,我们写这个驱动程序只要用到DriverWorks,因此下面我们就简称它为DW。

在这里,我们假定读者已经正确的安装了DW,并且已经编译好了各个库文件。

USB驱动程序编写

USB驱动程序编写

USB驱动程序编写linux‎下usb驱动编写(内核2.4)—‎—2.6与此接口有区别2006-‎09-15 14:57我们知道了‎在Linux下如何去使用一些最常‎见的USB设备。

但对于做系统设计‎的程序员来说,这是远远不够的,我‎们还需要具有驱动程序的阅读、修改‎和开发能力。

在此下篇中,就是要通‎过简单的USB驱动的例子,随您一‎起进入USB驱动开发的世界。

‎USB骨架程序(usb-ske‎l eton),是USB驱动程序的‎基础,通过对它源码的学习和理解,‎可以使我们迅速地了解USB驱动架‎构,迅速地开发我们自己的USB硬‎件的驱动。

USB驱动开发‎在掌握了USB设备的配置后,‎对于程序员,我们就可以尝试进行一‎些简单的USB驱动的修改和开发了‎。

这一段落,我们会讲解一个最基础‎U SB框架的基础上,做两个小的U‎S B驱动的例子。

USB骨架‎在Linux kernel‎源码目录中driver/usb/‎u sb-skeleton.c为我‎们提供了一个最基础的USB驱动程‎序。

我们称为USB骨架。

通过它我‎们仅需要修改极少的部分,就可以完‎成一个USB设备的驱动。

我们的U‎S B驱动开发也是从她开始的。

‎那些linux下不支持的USB‎设备几乎都是生产厂商特定的产品。

‎如果生产厂商在他们的产品中使用自‎己定义的协议,他们就需要为此设备‎创建特定的驱动程序。

当然我们知道‎,有些生产厂商公开他们的USB协‎议,并帮助Linux驱动程序的开‎发,然而有些生产厂商却根本不公开‎他们的USB协议。

因为每一个不同‎的协议都会产生一个新的驱动程序,‎所以就有了这个通用的USB驱动骨‎架程序,它是以pci 骨架为模‎板的。

如果你准备写一个li‎n ux驱动程序,首先要熟悉USB‎协议规范。

USB主页上有它的帮助‎。

一些比较典型的驱动可以在上面发‎现,同时还介绍了USB urbs‎的概念,而这个是usb驱动程序中‎最基本的。

USB 接口驱动程序开发

USB 接口驱动程序开发

USB 接口驱动程序开发1 引言随着微机技术水平的日益提高,传统的计算机接口已经不能满足当前计算机高速发展的需求,计算机业迫切需要一种新的通用型、高速总线接口,通用外设接口标准USB 就应运而生。

USB,全称是Universal Serial Bus(通用串行总线),是一种新型的、基于令牌的、高速的串行总线标准,由Compaq、Microsoft、Intel、IBM 等七家公司共同开发的, 旨在解决日益增加的PC 外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准[3],自1995年在Comdex 上亮相以来已广泛地为各PC 厂家支持。

现在市场上几乎所有的P C 机器都配备了US B 接口,USB 接口之所以能够得到广泛支持和快速普及,是因为它具备以下优点:正由于上述优点, 开发USB 接口的设备已成为一种发展趋势。

然而随着USB 技术的迅猛发展, 传统的USB1 . 1 接口已经不能适应用户的需求, 于是在1 9 9 9年在I nt e l 的开发者论坛大会上又提出了USB2 . 0 技术, 使得US B 不仅支持1 . 5Mb / s 的“低速”, 传输和12Mb/s 的“全速”传输,而且支持480Mb/s 的“高速”传输,比USB1.1 标准快40 倍左右,速度的提高对于用户的最大好处就是意味着用户可以使用到更高效的外部设备, 而且具有多种速度的周边设备都可以被连接到USB 2.0 的线路上,而且无需担心数据传输时发生瓶颈效应。

2 USB 驱动程序设计一个完整的USB 系统包括主机系统包括主机系统和USB 设备。

所有的传输事务都是由主机发起的。

一个主机系统又可以分为以下几个层次结构, 。

USB 总线接口包括USB 主控制器和根集线器,其中USB 主控制器负责处理主机与设备之间电气和协议层的互连,根集线器提供USB 设备连接点。

USB设备的驱动程序实现

USB设备的驱动程序实现

USB设备的驱动程序实现
USB驱动是用来控制使用USB接口的设备的软件程序,其实现是将实
际的硬件设备抽象为虚拟的设备,使其能够在计算机操作系统上应用。


般来讲,当你将USB设备插入你的计算机时,它将通过计算机的USB主控
芯片找到USB设备,然后测试它的功能,并决定它是否能够被用来通信,
最后安装相应的驱动程序。

实际的USB驱动程序的实现有若干方法,其中
有两种常用的技术:应用程序编程接口(API)和驱动程序模板。

1、应用程序编程接口(API)
API是一组用于访问操作系统提供的服务和功能的特殊指令序列。


用程序编程接口(API)可以用来创建USB驱动程序,其实现包括以下步骤:
(1)定义硬件设备的描述
在编写USB驱动程序时,首先需要定义硬件设备,即定义设备的功能,记录其编号、最大支持通信速率、硬件连接方式、发送和接收设备数据的
方式以及支持的驱动软件要求等信息。

(2)实现设备驱动的关键函数
关键函数是控制USB设备正常工作所必需的函数,包括初始化函数、
发送和接收数据的函数、获取设备状态的函数以及关闭设备的函数等。

USB驱动开发

USB驱动开发

第17章USB设备驱动USB设备驱动和PCI设备驱动是PC中最主要的两种设备驱动程序。

与PCI协议相比,USB协议更复杂,涉及面较多。

本章将介绍USB设备驱动开发。

首先介绍USB协议,使读者对USB协议有个整体认识。

然后介绍USB设备在WDM中的开发框架。

由于操作系统的USB总线驱动程序提供了丰富的功能调用,因此开发USB驱动开发变得相对简单,只需要调用USB总线驱动接口。

17.1 USB总线协议USB总线协议比PCI协议复杂的多,涉及USB物理层协议,又涉及USB传输层协议等。

对于USB驱动程序开发者来说,不需要对USB协议的每个细节都很清楚。

本节概要地介绍USB总线协议,并对驱动开发者需要了解的地方进行详细介绍。

17.1.1 USB设备简介USB即通用串行总线(Universal Serial Bus),是一种支持即插即用的新型串行接口。

也有人称之为“菊链(daisy-chaining)”,是因为在一条“线缆”上有链接127 个设备的能力。

USB要比标准串行口快得多,其数据传输率可达每秒4Mb~12Mb(而老式的串行口最多是每秒115Kb)。

除了具有较高的传输率外,它还能给外围设备提供支持。

需要注意的是,这不是一种新的总线标准,而是计算机系统连接外围设备(如键盘、鼠标、打印机等)的输入/输出接口标准。

到现在为止,计算机系统连接外围设备的接口还没有统一的标准,例如,键盘的插口是圆的、连接打印机要用9针或25针的并行接口、鼠标则要用9针或25针的串行接口。

USB能把这些不同的接口统一起来,仅用一个4针插头作为标准插头,如图17-1所示。

通过这个标准插头,采用菊花链形式可以把所有的外设连接起来,并且不会损失带宽。

USB正在取代当前PC上的串口和并口。

第17章 USB 设备驱动431图17-1 USB 的四条传输线以USB 方式连接设备时,所有的外设都在机箱外连接,连接外设不必再打开机箱;允许外设热插拔,而不必关闭主机电源。

开发WDM型USB设备驱动程序

开发WDM型USB设备驱动程序

开发WDM型USB设备驱动程序USB设备驱动程序开发⼯具开发USB设备驱动程序需要专门的开发⼯具,⽬前应⽤⼴泛的⼯具主要有两⼤类。

⼀类是Microsoft公司提供的Windows DDK(Device Driver Kit)。

它有Windows 98 DDK 和Windows 2000 DDK两个版本。

Windows 98 DDK能够开发Windows 95/98/Me/NT下的VxD、KMD和WDM驱动程序。

Windows 2000 DDK 能够开发Windows 98/Me/NT/2000下的KMD和WDM驱动程序。

由于DDK基于汇编语⾔的编程⽅式和内核模式的调⽤,对没有深厚的OS原理和编程⽔平的⼈员来说,任务相当艰巨。

另⼀类是NuMega公司提供的DriverStudio,它是⼀个⼤的开发⼯具包,包含VtoolsD、SoftICE和DriverWorks等开发⼯具。

VtoolsD开发包提供了对VxD编程的C/C++类库⽀持,利⽤VtoolsD中的QuickVxD⼯具可以快速⽣成VxD的C/C++代码框架,开发者可以在此基础上根据各⾃的需要添加⾃⼰的代码。

DriverWorks⽤于开发KMD和WDM驱动程序,并且对DDK函数进⾏了类的封装,从⽽为开发Windows NT、Windows 2000和Widnwos98 WDM设备驱动程序提供了⼀个⾃动化的⽅法。

DriverWorks,提供了VC++下的开发向导Driver Wizard,按照它的提⽰可以迅速地⽣成驱动程序的框架。

这个框架结构提供可以正确执⾏WDM动态环境中IRP的请求,⽽且,也包含⽤于简化系统提供的标准类驱动程序(如HID、流)和总线驱动程序(如PCI和USB)接⼝的类等。

总之,利⽤DriverWorks开发WDM驱动程序,可以⼤⼤简化开发⼈员的⼯作量、缩短开发周期以及降低开发驱动程序的难度。

[1]⽤DriverWorks开发WDM型USB设备驱动程序要想使⽤DriverWorks,必须先安装以下软件:DriverStudio2.5,VisualStudio6.0,以及Windows2000DDK。

05-USB驱动程序开发

05-USB驱动程序开发

2、USB设备类型 USB设备类型
八、USB设备列举 USB设备列举
在USB规范中有一个非常重要的“动作” USB规范中有一个非常重要的 动作” 规范中有一个非常重要的“ 过程” 这个动作将会让PC PC机知道何 或“过程”。这个动作将会让PC机知道何 USB设备刚接上以及其所含的各种信息 设备刚接上以及其所含的各种信息。 种USB设备刚接上以及其所含的各种信息。 这样,PC机就可以与这个USB设备开始进行 机就可以与这个USB 这样,PC机就可以与这个USB设备开始进行 数据传输的工作了。 数据传输的工作了。这个动作称之为设备 列举(enumeration) (enumeration)。 列举(enumeration)。
7 . USB2.0 的 High-speed 模式支持音频和视频设备 , 可 USB2 High-speed模式支持音频和视频设备 模式支持音频和视频设备, 以保证其固定带宽; 以保证其固定带宽; 8 . 为了适应各种不同类型外围设备的要求 USB 提供了 为了适应各种不同类型外围设备的要求USB 四种不同的数据传输类型:控制传输,Bulk数据传输 数据传输, 四种不同的数据传输类型:控制传输, Bulk数据传输, 中断数据传输,同步数据传输。 中断数据传输, 同步数据传输。 同步数据传输可为音 频和视频等实时设备的实时数据传输提供固定带宽。 频和视频等实时设备的实时数据传输提供固定带宽。 的端口具有很灵活的扩展性。 一个USB 9 . USB 的端口具有很灵活的扩展性 。 一个 USB 端口串 接上一个USB 就可以扩展为多个USB 端口。 USB端口 接上一个 USB Hub 就可以扩展为多个 USB 端口 。 规范 中说,USB可以扩展到127个外设端口 可以扩展到127个外设端口。 中说,USB可以扩展到127个外设端口。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最新开发usb驱动程序的方法连载一开发usb驱动程序的方法(连载二)NT还有更多其他的对象,例如中断对象、Controller对象、定时器对象等等,但在我们开发的驱动程序中并没有用到,因此在这里不做介绍。

I/O缓冲策略很明显的,驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。

这就就设计到设备的I/O缓冲策略。

读写请求的I/O缓冲策略前面说到通过设置Device对象的Flag可以选择控制处理读写请求的I/O缓冲策略。

下面对这些缓冲策略分别做一介绍。

1、缓冲I/O(DO_BUFFERED_IO)在读写请求的一开始,I/O管理器检查用户缓冲区的可访问性,然后分配与调用者的缓冲区一样大的非分页池,并把它的地址放在IRP的AssociatedIrp.SystemBuffer域中。

驱动程序就利用这个域来进行实际数据的传输。

对于IRP_MJ_READ读请求,I/O管理器还把IRP的UserBuffer域设置成调用者缓冲区的用户空间地址。

当请求完成时,I/O管理器利用这个地址将数据从驱动程序的系统空间拷贝回调用者的缓冲区。

对于IRP_MJ_WRITE写请求,UserBuffer被设置为NULL,并把用户缓冲区的数据拷贝到系统缓冲区中。

2、直接I/O(DO_DIRECT_IO)I/O管理器首先检查用户缓冲区的可访问性,并在物理内存中锁定它。

然后它为该缓冲区创建一个内存描述表(MDL),并把MDL的地址存放在IRP的MdlAddress域中。

AssociatedIrp.SystemBuffer和 UserBuffer 都被设置为NULL。

驱动程序可以调用函数 MmGetSystemAddressForMdl得到用户缓冲区的系统空间地址,从而进行数据操作。

这个函数将调用者的缓冲区映射到非份页的地址空间。

驱动程序完成I/O请求后,系统自动从系统空间解除缓冲区的映射。

3、这两种方法都不是这种情况比较少用,因为这需要驱动程序自己来处理缓冲问题。

I/O管理器仅把调用者缓冲区的用户空间地址放到IRP的UserBuffer 域中。

我们并不推荐这种方式。

IOCTL缓冲区的缓冲策略IOCTL请求涉及来自调用者的输入缓冲区和返回到调用者的输出缓冲区。

为了理解IOCTL请求,我们先来看看WIN32 API DeviceIoControl函数的原型。

BOOL DeviceIoControl (HANDLE hDevice, // 设备句柄DWORD dwIoControlCode, // IOCTL请求操作代码LPVOID lpInBuffer, // 输入缓冲区地址DWORD nInBufferSize, // 输入缓冲区大小LPVOID lpOutBuffer, // 输出缓冲区地址DWORD nOutBufferSize, // 输出缓冲区大小LPDWORD lpBytesReturned, // 存放返回字节数的指针LPOVERLAPPED lpOverlapped // 用于同步操作的Overlapped结构体指针);IOCTL请求有四种缓冲策略,下面一一介绍。

1、输入输出缓冲I/O(METHOD_BUFFERED)I/O管理器首先分配一个非分页池,它足够大地存放调用者的输入或输出缓冲区(不管哪个更大)。

非分页缓冲区的地址放在IRP的AssociatedIrp.SystemBuffer域中,然后把IOCTL的输入数据拷贝到这个非份页缓冲区中,并把IRP的UserBuffer域设置成调用者输出缓冲区的用户空间地址。

当驱动程序完成IOCTL请求时,I/O管理器将这个非份页缓冲区中的数据拷贝到调用者的输出缓冲区。

注意这里同一个非份页池同时用于输入和输出缓冲区,因此驱动程序在向缓冲区写东西之前应该把输入的所有数据读出来。

2、直接输入缓冲输出I/O(METHOD_IN_DIRECT)I/O管理器首先检查调用者输入缓冲区的可访问性,并在物理内存中将其锁定。

然后为该输入缓冲区创建一个MDL,并把指定该MDL的指针存放到IRP的MdlAddress域中。

同时,I/O管理器还在非份页池中分配一输出缓冲区,并把这个缓冲区的地址存放在IRP的AssociatedIrp.SystemBuffer域中,并把IRP的UserBuffer 域设置成调用者输出缓冲区的用户空间地址。

当驱动程序完成IOCTL请求时,I/O管理器将非份页缓冲区中的数据拷贝到调用者的输出缓冲区。

3、缓冲输入直接输出I/O(METHOD_OUT_DIRECT)I/O管理器首先检查调用者输出缓冲区的可访问性,并在物理内存中将其锁定。

然后为该输出缓冲区创建一个MDL,并把指定该MDL的指针存放到IRP的MdlAddress域中。

同时,I/O管理器还在非份页池中分配一输入缓冲区,并把这个缓冲区的地址存放在IRP的AssociatedIrp.SystemBuffer域中,同时把调用者用户输入缓冲区中的数据拷贝到系统缓冲区中,并把IRP的 UserBuffer域设置为NULL。

4、上面三种方法都不是(METHOD_NEITHER)I/O管理器把调用者的输入缓冲区的地址放到IRP当前I/O堆栈单元的Parameters.Devi ceIoControl.TypeInputBuffer域中,把输出缓冲区的地址存放到IRP的UserBuffer域中。

这两个地址都是用户空间地址。

从上面的说明可以看出,在执行缓冲I/O时,I/O管理器将在非份页池中分配内存,如果调用者的缓冲区比较大时,分配的非份页池也将比较大。

非份页池是系统比较宝贵的资源,因此,如果调用者的缓冲区比较大时,我们一般采用直接I/O的方式(例如磁盘读写请求等),这样不仅节省系统资源,另一方面由于省去了I/O管理器在系统缓冲区和调用者缓冲区之间的数据拷贝,也提高了效率,这对存在大量数据传送的驱动程序尤其明显。

可以注意到DDK中的Samples下,几乎所有的例程的读写请求都是直接I/O的,而对于IOCTL请求则是缓冲区I/O的居多开发usb驱动程序的方法(连载三)NT驱动程序的分层结构驱动程序是指管理某个外围设备的一段程序代码。

NT采用更灵活的分层驱动方法,允许杂应用程序和硬件之间存在几个驱动程序层次。

分层机制允许NT更加广泛地定义驱动程序,包括文件系统、逻辑卷管理器和各种网络组件,各种物理设备驱动程序等等。

1、设备驱动程序这些是管理实际数据传输和控制特定类型的物理设备的操作的驱动程序,包括开始和完成I/O操作,处理中断和执行特定的设备要求的任何差错处理。

2、中间驱动程序NT允许在物理设备驱动程序上分层任意数目的中间驱动程序。

这些中间层次提供扩展I/O系统的功能一种方法,而不必修改底层的驱动程序。

这也是微软鼓吹的他们的系统灵活的一面!实际上我觉得这样反而牺牲了一些效率上的东西。

3、文件系统驱动程序(FSD)FSD是一类比较特殊的驱动程序,通常负责维护各种文件系统所需要的磁盘结构。

注意我们并不能使用DDK来开发FSD,而必须使用Microsoft的文件系统开发人员工具包。

一般比较少写中间过滤驱动程序,过滤驱动程序它截获和修改高层发送给类驱动程序的请求。

这样就允许利用现有类驱动程序的功能,而不必从头开始写所有程序。

NT内核模式对象在我们的实际开发过程中的对象是设备,由于端口驱动程序已经隐藏了硬件控制操作,因此我在这里不讲述跟硬件相关的部份。

如果今后的开发对象不同,需要对硬件进行操作的时候,可能会对中断、DMA等有比较详细的了解,这些内容可以参考DDK帮助。

usb设备开发实例通用串行总线(Universal Serial Bus USB),是一种快速、灵活的总线接口。

与其它通信接口比较,USB接口的最大特点是易于使用,这也是USB的主要设计目标。

作为一种高速总线接口,USB适用于多种设备,比如数码相机、MP3播放机、高速数据采集设备等。

易于使用还表现在USB接口支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。

USB接口支持1.5Mb/s(低速)、12Mb/s(全速)和高达480Mb/s(USB 2.0规范)的数据传输速率,扣除用于总线状态、控制和错误监测等的数据传输,USB的最大理论传输速率仍达1.2Mb/s或9.6Mb/s,远高于一般的串行总线接口。

USB接口芯片价格低廉,一个支持USB 1.1规范的USB接口芯片价格大多在$1~2之间,跟一个232或485接口芯片价格差不多,这也大大促进USB设备的开发与应用。

在进行一个USB设备开发之前,首先要根据具体使用要求选择合适的USB控制器。

目前,市场上供应的USB控制器主要有两种:带USB接口的单片机(MCU)或纯粹的USB接口芯片。

带USB接口的单片机从应用上又可以分成两类,一类是从底层设计专用于USB控制的单片机,比如Cypress公司的CY7C63513(低速)、CY7C64013(全速),但由于价格、开发工具以及单片机性能有限等问题,所以一般不推荐选用。

另一类是增加了USB接口的普通单片机,例如Intel公司的8X931(基于8051)、8X930(基于高速、增强的8051)、Cypress公司的EZ-USB(基于8051),选择这类USB控制器的最大好处在于开发者对系统结构和指令集非常熟悉,开发工具简单,但对于简单或低成本系统,价格高将会是最大的障碍。

一般来说,后者的价格是前者价格的10倍。

纯粹的USB接口芯片仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。

典型产品有Philips公司的PDIUSBD11(I2C接口)、PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口),NetChip公司的NET2888等。

USB接口芯片的主要特点是价格便宜、接口方便、可靠性高,尤其适合于产品的改型设计(硬件上仅需对并行总线和中断进行改动,软件则需要增加微处理器的USB中断处理和数据交换程序、PC机的USB接口通信程序,无需对原有产品系统结构作很大的改动)。

在选定USB控制器以后,如果是带USB接口的单片机,则是一般单片机应用系统的开发;反之,就是如何把USB接口芯片与单片机应用系统融合的问题,一般USB接口芯片都支持多种并行总线结构(复用/非复用),可以方便的与多种单片机接口。

硬件设计中要注意的就是USB接口芯片的时钟速度比较高,如果芯片内部没有PLL来倍频,则外部晶体振荡电路(多数在48MHz)的设计就应该特别注意,包括晶体的选择(负载电容大小)、匹配网络的设计以及PCB布线。

USB设备的软件设计主要包括两部分:一是USB设备端的单片机软件,主要完成USB协议处理与数据交换(多数情况下是一个中断子程序)以及其它应用功能程序(比如A/D转换、MP3解码等)。

相关文档
最新文档