电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

USB固件接口

来源:文库作者:开心麻花2025-09-191

USB固件接口(精选3篇)

USB固件接口 第1篇

在设计开发一个USB外设的时候,开发者主要需要编写3部分的程序:固件程序、USB驱动程序和客户端应用程序[1]。当把设备连接到主机上(USB连接线插入插孔)时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就是让Windows可以检测和识别设备。固件程序可以在Keil C51软件环境中,用C语言开发。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,Keil C51软件提供了大量的库函数和功能强大的集成开发调试工具,使用的是全Windows界面,具有方便实用的特点[2]。另外,Keil C51生成的目标代码效率非常高,多数语句生成的汇编代码很紧凑,容易理解。因此,本文考虑采用此方法开发PDIUSBD12芯片的USB固件程序。

1 固件程序主要完成的工作

固件设计的目标就是完成主机与设备之间的命令与数据传输与转换,使PDIUSBD12在USB上达到最大的传输速率[3]。它的操作方式与硬件联系紧密,包括USB设备的连接、USB协议、中断处理等。在系统中,当PDIUSBD12从USB接收到一个数据包,就对CPU产生一个中断请求,CPU立即响应中断。在ISR(中断服务程序)中,固件读取数据,并将数据值保存到循环数据缓冲区,随后置相应事件的标志位,CPU继续前台程序,检测事件标志,执行完成相应的事件任务[4,5]。

USB单片机固件程序通常由3部分组成:初始化单片机和所有的外围电路 (包括PDIUSBD12);主循环部分:这部分是可中断的;中断服务程序,可以中断执行[6]。根据USB协议,任何传输都是由主机开始的,这样单片机作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断 USB令牌包的类型,然后执行相应的操作,因此,USB单片机程序主要就是中断服务程序的编写,在USB单片机程序中要完成对各种令牌包的响应。

单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为3种:初始化命令字、数据流命令字和通用命令字[7]。PDIUSBD12给出了各种命令的代码和地址,单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。

2 固件程序的流程及结构

USB设备启动流程如下[8]:

(1) USB设备接入USB口,发出连接USB命令;

(2) 主机发出读设备描述符2次;

(3) 主机根据设备描述符(厂商ID、产品ID),启动相应设备驱动程序;

(4) 设备驱动程序初始化USB设备:

① 读设备描述符;

② 读配置描述符;

③ 选择接口、端点(管道),确定传输方式。

在编写USB的单片机固件程序时,单片机的中断应设置为电平触发,中断后一定要读上次传输状态寄存器(命令40H~45H),以清除中断寄存器中的中断标志,这样PDIUSBD12的中断输出变回为高电平[9]。

PDIUSBD12固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性。PDIUSBD12固件的开发一般都是在周立功单片机公司提供的固件源码的基础上做相应的修改。由于该固件采用分层分模块的结构,在做移植的时候只要修改部分代码就可以运行于特定的平台,比较方便。

固件程序采取如图1的积木式结构[7]。

2.1 硬件提取层

epphal.c文件是固件中的最底层代码,由于在具体应用时所提供的硬件平台都是不同的,因此该文件必须进行修改以适应当前应用。该文件里主要包含了读写PDIUSBD12寄存器的函数,PDIUSBD12芯片各控制线与单片机I/O口的连接等。

读写PDIUSBD12主要有2种方式:多路复用地址/数据总线方式和A0地址位方式。不同的方式其电路连接完全不同,因此其读写函数也完全不同。本处采用多路复用地址/数据总线方式,即用地址/数据总线的最低位标识总线上是数据还是命令,1代表命令,0则代表数据。

2.2 D12命令接口

d12ci.c文件中定义了一套访问D12 功能的命令接口。

D12的命令包括:4个初始化命令、24个数据流命令和2个普通命令。该文件包含了单片机对上述命令的实现函数,基本无须修改。

2.3 中断服务程序

isr.c部分的代码主要处理PDIUSBD12产生的中断请求。

硬件设计中,将PDIUSBD12中断一般连到单片机的外部中断0或者1中。由于只有一个中断源,如果要知道是什么中断,就需要读取PDIUSBD12中的中断寄存器的值进行判断。该文件包含了需要处理的各个中断的处理函数。其中许多处理函数仅仅是将相应标志位置1,用来在主函数中处理各类事务。在各个输入/输出端点引发的中断处理函数中,分别进行了读取缓冲区数据和发送数据到缓冲区等动作。其中,控制输入端点的中断处理函数还将相应控制位置1,以用来在主函数中触发标准设备请求和厂商请求。

2.4 主循环

主函数文件mainloop.c是一个大循环。在该文件中要执行各个初始化函数,发送USB请求和处理USB总线事件等。设备的各项功能需要在该文件中添加。

首先,初始化I/O口;然后初始化定时器2,设置中断,设置DMA(设备未用到DMA方式,置为00)等,通过连接指令指示D12完成软连接(SoftConnect)后,电脑就会检测到新设备。

在进入主循环后,需要用51的定时器2每隔1 ms检测一次电键的电平高低,并且将此信号通过USB接口发送出去,同时将P1.2口取反,以产生500 Hz的方波信号作为电键音。

2.5 协议层

chap_9.c:标准设备请求文件。该文件包含了所有设备相关的描述符,以及各个USB设备标准请求的实现函数。一个USB设备的各个特性都包含在了其所有的描述符内,而各个设备都有各自的特点,因此每个设备的描述符都要进行相应修改。其中,设备描述符里的idVendor与idProduct是联系PC端驱动的标志,必须与驱动一致。而各类标准设备请求是每个标准USB设备都要能够响应的,因此也就无须修改了。

protodma.c:该文件用来描述厂商请求。如果USB设备需要响应厂商请求,那么就要编写该厂商请求的实现函数。由于终端操作平台无须定义特殊的厂商请求,因此该文件不用修改。

3 端点配置

在D12芯片内存在三套输入/输出端点,根据配置不同可完成不同的工作,终端操作平台中的固件中是按照表1配置的。

根据端点的配置和各端点的特点,设置端点1为控制命令的传输端点,接收来自电脑的状态控制指令,共两个字节,如表2所示。

设置端点2为电键信号传输端口,手电键的按下或抬起通过00和01来标识,传输间隔为1 ms。

4 固件程序

多路复用地址/数据总线方式的实现,通过地址线的最低位来分辨命令和数据:

主循环程序首先做初始化I/O口,设置中断等准备工作,然后进入主循环,在主循环内查询事件标志,并做出相应处理。

5 结 语

本文实现了USB固件程序的开发。该固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性和移植性。

摘要:随着计算机技术的更新换代,USB接口已经成为个人计算机上最重要的外部设备扩展接口,在进行USB外设开发的过程中需要编写其固件程序。在此对USB接口固件程序进行了开发,在Keil C51软件环境中,采用C语言开发。介绍了固件程序的主要功能,给出了固件程序的流程、结构和端点配置,并给出了重点地方的具体程序。该固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性和移植性。

关键词:PDIUSBD12,USB,固件程序,分层结构

参考文献

[1]李英伟,王成儒,练秋生,等.USB2.0原理与工程开发[M].北京:国防工业出版社,2007.

[2]高卫东.51单片机原理与实践[M].北京:北京航空航天大学出版社,2005.

[3]夏益民,王光君.基于USB的高速数据采集系统[J].国外电子元器件,2003(10):20-23.

[4]周涛,张辉.采用PDIUSBD12的USB系统固件程序设计[J].电子技术应用,2003(5):1-3.

[5]张念淮,江浩.USB总线接口开发指南[M].北京:国防工业出版社,2001.

[6]周立功.PDIUSBD12USB固件编程与驱动开发[M].北京:北京航空航天大学出版社,2003.

[7]王梅,陈海峰.基于PDIUSBD12芯片的USB通用设备开发[J].电脑知识与技术,2006(3):175-176.

[8]SERRA PA,ROCCHITTA G,BAZZU G,et al.Design andconstruction of a low cost single-supply embedded telemetrysystem for amperometric biosensor applications[J].Sensorsand Actuators:B,Chemical,2007,122(1):118-126.

[9]SKIERUCHA W,WILCZEK A,WALCZAK R T.Recentsoftware improvements in moisture(TDR method),matricpressure,electrical conductivity and temperature meters ofporous media[J].International Agrophysics,2006,20(3):229-235.

USB固件接口 第2篇

王晖

摘要关键词简单介绍USB接口的特点和Philips公司的USB接口芯片ISP1581;详细介绍USB接口的硬件原理设计、固件开发流程及USB设备的调试。

USB

ISP158

1固件

枚举

微控制器接口

DMA 引

通用串行总线USB(Universal Serial Bu s是近年来应用在PC领域的新型接口技术;是一些大PC厂商,如Microsoft、Int el等,为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾,而制定的一种串行通信的标准。USB以其高速、易于安装配置、使用灵活和可靠性高而日益受到人们的欢迎。现在已广泛使用于计算机和周边设备的连接,如键盘、鼠标、打印机、存储设备等。

USB控制器一般有两种类型:一种是MCU集成在芯片里面;另一种是纯粹的USB接口芯片,仅处理 USB 通信。前者由于开发时需要单独的开发系统,因此开发成本较高;后者只是一个芯片与MCU接口,实现USB 通信功能,因此成本较低、可靠性较高。本文主要介绍Philips公司的ISP1581器件的使用方法,它属于后者。1硬件设计

1.1I S P1581芯片特点

ISP1581 是一个高速USB 器件控制器。它实现了USB 2.0/1.1 物理层和数据协议

层的任务,并且实现了

连同端点EP0(设置用于 访问设置缓冲器在内的 16 个USB 端点的共同协 作;用于基于微控制器 的系统,与微控制器/微 处理器的通信是通过一 个高速的通用并行接口 实现的,接口速度可达 12.5M字节/s或12.5 M字/s;支持DMA传输, 可很好地实现与大容量

存储设备的接口;通过ATA/A TAPI接口,可以直接与ATA/A TAPI设备相连。ISP1581能适应大多数设备类规范的设计,非常适合做很多外围设备,如打印机、扫描仪、外部大容量存储器和数码相机等的外部接口。(注: ATA/A TAPI,Advanced Technology Attachmen t/Advanced Technology Attachment Peripheral Int erface。中文名称为高级技术附加装置/高级技术附加装置外围接口。ATA是一种硬盘接口标准,ATA标准的接口类型其实就是IDE 接口类型。

1.2I S P1581内部模块功能描述

ISP1581内集成了多个模块,各自完成不同功能,如图1所示。

① USB2.0收发器。模拟收发器通过集成的终端电阻直接与USB电缆相连。

② Philips串行接口引擎(SIE,Serial Interface Engine。完成所有USB协议层的功能,主要完成以下的功能:同步方式的识别、并行/串行的转换,位填充/解除填充、CRC校验/产生、包标识(PID校验/产生、地址识别和握手评估/产生。考虑到速度,它是全硬件的,不需要

DREQ,DACK CS0,CS1, [16:0] DS/WR 图

1ISP1581内部结构方框图

固件介入。

③ 存储器管理单元(M M U和集成RA M。MMU 和集成RAM 实现了USB 总线和微控制器管理器或DMA 管理器之间的速度转换。

④ 微控制器/处理器接口和微控制器/处理器的管理器。可以直接与大部分微控制器相连。

⑤ DMA 接口和DMA 管理器。DM A 管理器接收到DMA 命令后,可直接把数据从内部RAM 传送到外部DM A 设备或从外部DM A 设备传送给内部RAM。

2硬件连接

ISP1581 有一个快速通用接口,利用它可以实现与大

部分类型的微控制器/处理器的通信。上电时,由引脚BUS_CONF、MODE1 和MODE0 共同设置。由于MMC2107的外部地址、数据总线是分开的,因此在本开发平台上ISP1581只能工作在通用处理器工作模式下,设置方式如表1所列。

ISP1581提供微控制器接口与微控制器进行数据传输,也支持DMA 传输。在微控制器速度较高时,两者的读写访问速度均可达12.5M b/s ,采用DMA 方式会增加电路设计的复杂度。经过综合比较,采取微控制器接口方式。USB 模块硬件连接原理如图2所示。

注:①ISP1581提供两种复位方式:a.ISP1581集成有上电复位电路(POR, RESET 引脚接电源,实现上电复位功能。b.RESET 引脚接MMC2107的一个数字I/O 引脚,将该引脚置低800μs 后置高,实现复位。②ISP1581 的供电电压为3.3V 或5.0V ,I/O 引脚最大能承受5.0V 的电压。根据I/O 口的电压,从3.3V 和5.0V 中选择一个作为供电电压。

3I S P 1581固件(F I R E W A R E 程序设计 由于所有的通信都是由主机发起,设备只能响应来

自主机的命令。在这种结构下,ISP1581的固件采取中断驱动。这样一方面保证了快速的数据传输和较好的软

件结构,另一方面简化了编程和测试。

固件程序由5部分组成,如图3所示。(1主循环流程

上电后,初始化MMC2107和ISP1581。然后,主循环程序轮询检查事件标志,进入相应的子程序进行进一步的处理。图4是主循环的流程。

1设置工作方式

注:这里使用16位总线,AD[0]必须与ISP1581的地端相连。图

3固件结构和数据流向 图

4USB主循环程序

2MMC2107与ISP1581硬件连接原理

(2中断服务程序(ISR流程

图5所示的中断服务流程,用来处理由ISP1581产生的中断。通过访问ISP1581的中断寄存器,建立正确的事件标志,以通知主循环程序进行处理。(3USB 标准请求处理

进行应用通信以前,主机必须枚举设备。该过程是通过给端点0发送包含标准设备请求(CHA P_9的控制传

输实现的。USB 标准请求流程(见图6译码设备请求类型,转到相应的处理子流程。枚举过程如下: ①主机使用默认地址(地址0读取设备描述符G etDeviceDescriptor;② SetAddress;③ 连续3次G etDev iceDescriptor ,读取全部设备描述符;④ G etConfigDescriptor;

⑤ G etStringDescriptor(可能没有;⑥ 读取全部ConfigDescriptor 后,主机将找到新设备,提示安装驱动程序。⑦ 在设备能通信前,主机给出SetConfiguration 请求,设备收到后调整有关信息,使设备能被客户软件利用。(4厂商请求处理(VENDOR 厂商请求和USB 标准请求一样,都根据控制传输的内容进行相应处理。本开发平台的固件程序中定义了两个厂商请求,分别为取得固件版本和将批量数据写入设备或从设备中读出数据。

取得固件版本流程如图7所示。主机发送批量数据读写请求时,在控制传输的数据阶段,主机给出需要传输的数据字节数、数据传输方向、页索引和数据定位。控制传输结束后,主机和设备就可以根据双

方约定,启动批量传输。批量传输流程如图8所示。调

试 4.1 调试步骤

USB 的调试可分为以下几个步骤: ① 若USB 芯片正常工作,可实现软连接,将设备插 入主机后,主机上出现“未知设备类型”的USB 设备;② 提供描述符,提供正确的VID 和PID 后,主机能够识别设备,但要求提供设备的驱动程序;③ 安装驱动程序后,调试各端点,使其均可传输数据,用主机端的测试程序对其进行测试,验证硬件及固件的正确性。

中断服务程序

5中断服务程序流程 图6

USB标准设备请求流程 取得固件版本

图7

取得固件版本流程 图8

批量传送流程

4.2调试工具

因为每一次USB的传输过程,都有时效要求,等待时间过长,通信过程也就中止了,因此不适合用硬件仿真器来设断点调试。可采用串口辅助调试过程,即在固件代码中加入类似于Printf的语句,向串口输出一些信息。借此,可以知道程序是否运行到此处,以及运行到此处时相应的变量或寄存器值。

设备完成配置后,在Bus Hou nd中可看到该设备(bus Hound是一种应用软件。选择该设备,就可以对主机与此设备间的通信数据进行分析和监视。Bus Hound 工作在主机端,串口工作在微控制器端。将串口调试和Bus Hound两种手段配合使用,可以使USB通讯过程的调试更加容易。

在调试USB设备时,还可使用UsbView程序。在该程序中可以查看设备描述符、配置描述符和端点描述符是否正确。

扩展前置USB接口 第3篇

一、 认识USB接口

目前市面上的主板一般提供八个以上的USB接口,但是裸露在机箱背面的主板USB接口一般只有四个。

二、连接外置USB接口

那么主板提供的其他USB接口如何使用呢?其实,这需要在装机时,通过机箱与主板的接口连接线缆,从而使机箱前置USB接口可以使用。

主板上提供的前置USB接口一般为两组,每一组可以外接两个USB接口,分别是USB4、 5与USB6、7接口,总共可以在机箱的前面板上扩展四个USB接口(当然需要机箱的支持,一般情况下机箱仅提供两个前置的USB接口,所以只要接好一组即可)。

这是机箱前面板前置USB的连接线缆,其中VCC用来供电,USB2-与USB2+分别是USB的负、正极接口。GND为接地线。(注:在连接USB 接口时大家一定要参照主板的说明书,仔细地对照,如果连接不当,很容易造成主板的烧毁。)

为了方便用户的安装,目前市面上销售的主板的USB接口的设置相当人性化,把USB接口设计成有些类似于PATA接口的设计,采用了防呆式的设计方法,只有以正确的方向才能够插入USB 接口,否则是无法插入的,提高工作效率的同时也避免因接法不正确而烧毁主板的现象。

USB固件接口

USB固件接口(精选3篇)USB固件接口 第1篇在设计开发一个USB外设的时候,开发者主要需要编写3部分的程序:固件程序、USB驱动程序和客户端应...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部