基于AN2131QC USB固件程序设计

时间:2022-09-08 05:22:23

基于AN2131QC USB固件程序设计

摘 要:USB通用串行总线已经成为PC 的标准配备,使用USB 接口可以连接多个不同的设备,支持热插拔,并具有自动检测的功能。要深入了解并设计出USB 设备就不得不使用到内含USB 接口的微控制器或是专用的接口控制芯片。这里讨论在一般常用的AN2131QC USB 单片机中内建USB 接口的情况。简要介绍EZ-USB AN2131QC的特性,描述主机与设备之间的通信,介绍它的几种传输并在此基础上介绍固件的定义,阐述基本框架以及其固件程序的基本设计。

关键词:EZ-USB AN2131QC;基本框架;USB 接口;固件程序设计

中图分类号:TP312;TP368.1文献标识码:B文章编号:1004373X(2008)2007303

Firmware Programme Design Based on AN2131QC USB

PENG Wenbin,CHEN Binbing,MI Hongju

(School of Electrical Information,Sichuan University,Chengdu,610064,China)

Abstract:Universal Serial Bus(USB)is the standard equipment of the PC,using USB interface can connect many different devices,it sustains plug and play,and has the function of autodetection.To know well and design the USB device,it has to use the microcontroller which has the USB interface or special interface controlling chip.The paper discusses the instance of USB interface built-in the common AN2131QC USB single chip,and describes the characteristics of EZ-USB AN2131QC,the communication of the computer and device,transfers,frame and USB interface firmware programme design simply.

Keywords:EZ-USB AN2131QC;basic frame;USB interface;firmware programme design

随着USB接口的推出,它正在逐渐成为计算机设备一种主流接口,所以USB接口的开发也越来越得到关注。在其开发中,固件程序的开发是一个重要的环节,它是USB设备运行的核心,响应各种USB设备请求,完成各种数据交换工作和事件的处理,直接影响产品的数据传输速率。固件程序也是开发过程中的一个难点,因此本文介绍其基本框架和其基本的程序设计。

1 AN2131QC的主要特点

AN2131QC是基于USB 1.1的外设通讯控制芯片

主要特点:

(1)4时钟周期的8051内核;

(2) 2个快速存储器到存储器的数据发送指针;

(3) 多个USB数据传输中断;

(4)8 kB内部RAM,支持外部存储器;

(5) 软配置,方便固件程序升级;

(6) 32个输入输出管道,支持1024B的同步数据传输。

2 AN2131QC的数据传输方式

USB总线的数据传送是通过管道来完成的,当设备接到总线上时,地址是由主机随机分配的,信息的交换通过4种方式实现。

(1) 控制传输

主要作用是建立主机和USB 外设之间的联系管道和USB 外设的状态反映,不能用于传输信息数据。AN2131QC 的端点0 用于控制传输。

(2) 批量传输

主要用于传输长度不大于64个字节,而且需要周期性传输的数据块,具有错误重发功能,可以动态地利用可获得的USB 总线带宽。

(3) 中断传输

对于一个规定的时间里传输一个中等数量的数据是很有用,因为它将保证主机在最短的延迟里响应或发送数据。

(4) 同步传输

可以1次传输长度不超过1 024 B的数据块,主要用于传输大批量的实时数据,例如音频数据,不支持错误重发。

3 框架函数

框架函数一般都提供有交互的挂钩,可以用来方便用户添加完成特定的功能代码。所谓函数挂钩,就是应用程序之间的桥梁,就好比用钩子在应用程序之间建立联系。函数挂钩非常简单,其所能完成的功能也非常有限,但可以根据实际需要向函数中添加代码,以实现特定的功能。框架函数分为3类:任务分配、标准设备请求和USB中断处理。

3.1 任务分配

(1) D_Init()

该函数可在框架初始化期间被调用。在设备重枚举和任务调度启用前调用该函数,可用于初始化用户的全局状态变量。在该函数中,用户可设置整体状态变量的初始值,并可规定各种端点资源的使用( 包括中断) 以及配置接口的输入/输出等。

(2) TD_Poll()

在设备工作期间,该函数可被重复调用。它包含一个执行外设功能的状态机。该函数在高优先级的任务处理完成后便可返回。然而,如果不能从该函数中返回,则,框架将不能响应设备请求和USB挂起事件。如果某项任务需要大量的处理时间,则应将该任务分为若干小任务,并通过对该函数的多次调用来分批处理。

(3) TD_Suspend()

该函数可在框架进入挂起状态之前被调用。函数中应该包括使设备进入低功耗状态的程序,然后返回TRUE。当然,可以让该函数返回FALSE,以阻止设备进入挂起状态。

(4) TD_Resume()

该函数可在设备被外部唤醒事件唤醒且框架程序恢复处理后被调用。此时,设备将恢复到正常的操作方式。

3.2 设备请求

设备请求函数一般具有如下形式:

BOOL DR_xx (void)

{

//用户程序代码

Return (TURE)

}

该函数主要对来自主机的命令及请求进行处理(如分析描述符表),以确定新的配置接口和端点。

3.3 USB中断

由于在固件程序中提供有中断服务例程接口,因此,开发者只要在需要处理的中断服务例程接口中加入自己编写的中断服务代码,即可完成对相应中断请求的服务。这些中断服务例程接口函数的形式为:

Void ISR_xx (void) interrupt 0

{

…//用户中断程序代码

EZUSB_ISR.CLEAR () ;

USBIRQ = bmXX; //清除该中断请求

}

4固件程序

4.1 固件的定义

载有在用户环境中不能加以改变的计算机程序及数据的器件。包含在固件中的计算机程序和数据归类为软件;载有计算机程序和数据的电路归类为硬件。固件程序就是硬件中的软件部分,通过执行该软件可以实现特定的硬件功能。通常的固件程序是将一段程序存储在ROM上,设备启动之后自动引导配置特定的芯片,使之完成特定的功能。

4.2 固件程序设计

Cypress公司提供EZ-USB 固件程序框架,用于加速开发基于EZ-USB 芯片的外设。固件程序采用Keil C编写,主要包括2个文件,一个是任务调度和设备请求分析程序fw.c,其中包含了固件执行的入口,一般不用修改;一个是USB 外设功能程序periph.c,包括用户初始化函数、标准设备请求函数、完成外设功能的USB 中断处理函数。用户只需提供设备描述符表并链接进来,再编写完成外设功能的代码,就可以开发出一个功能完善的USB 外设。例如要使用AN2131QC的块输入端点2完成快速读操作,其固件编写步骤如下:

(1) 按照USB 描述符表样例Dscr.a51 中的格式,按顺序依次修改设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。

(2) 修改periph.c程序中初始化函数TD_ Init( ),进行端点使能与中断允许设置。

void TD_ Init( void)

{

IN2VAL = bmEP2; //使输入端点2有效

IN2 IEN = bmEP2; ///使能端点中断

USBBAV = bmAVEN; ///使能自动向量

EA = 1; //使能8051中断

Rwuen = TRUE; //便能远程唤醒

}

(3) 修改periph.c中的块输入端点2的中断函数ISR_Ep2 in( ),填加用户功能代码,完成块读传输。

void ISR_Ep2 in (void) interrupt 0

{ int i;

EZUSB_ IRQ_CLEAR( ); //首先清除INT2中断

IN07 IRQ = bmEP2; //清除输入端点2中断

AUTOPTRL = LSB((WORD)(&IN2BUF)); //设置自动指针

AUTOPTRH =MSB((WORD)(&IN2BUF));

if (!(IN2CS & 0x02))

{ for (i=0;i

AUTODATA = ACC; //读入数据

}

IN2BC = 64; //装载字节记数器,准备下一次IN2传输

}

在Keil μVision2 下调试,即可生成bulk.HEX。

5 结 语

当前,USB设备的开发已成为热点,缩短研发周期、提高开发效率是开发者追求的目标。选择EZ-USB芯片,利用EZ-USB 程序框架,可以大大加快USB设备固件程序的开发过程。

参考文献

[1]颜荣江.EZ-USB 2100系列单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2002.

[2]许永和.8051单片机USB接口程序设计[M].北京:北京航空航天大学出版社,2004.

[3]EZ-USB Series 2100 Technical Reference Manual Ver2sion1.9[EB/OL]./www.cyp .2000.

[4]Ee-Peng Lim,Keng Siau.Advances in Mobile Commerce Technologies[M].Idea Group Publishing,2003.

[5]朱玉军,贾先德,江海河,等.基于USB 和目标识别的图像采集系统的设计实现\.微计算机信息,2006(1):89-91.

[6]刘扬,史晓锋.使用USB 接口的NIC 微端口驱动程序设计[J].电子测量技术,2006,29(4):115-117.

[7]毕晓军,杨劲峰.基于单片机的USB 之间的通信研究[J].计算机应用,2006(2):36-37.

[8]吴鹏,陶正苏,胡宇贞.基于单片机USB 接口的PC 主机驱动程序和应用程序设计[J].电子器件,2005(3):612-614.

[9]郑立云.USB 接口技术的应用研究与实现[D].北京:北京科技大学,2005.

[10]叶超.基于USB 接口的高密度数据采集系统[D].西安:西安工业学院,2003.

作者简介 彭文彬 男,1984年出生,硕士研究生。研究方向为电子技术与应用。

陈彬兵 女,副教授。研究方向为电子技术与应用、嵌入式系统。

上一篇:审计工作流原型系统的设计与实现 下一篇:基于DSP的擦伤信号检测系统设计