基于AN2131QC USB固件程序设计
时间:06-18
来源:现代电子技术
点击:
摘要:USB通用串行总线已经成为PC的标准配备,使用USB接口可以连接多个不同的设备,支持热插拔,并具有自动检测的功能。要深入了解并设计出USB设备就不得不使用到内含USB接口的微控制器或是专用的接口控制芯片。这里讨论在一般常用的AN2131QC USB单片机中内建USB接口的情况。简要介绍EZ-USB AN2131QC的特性,描述主机与设备之间的通信,介绍它的几种传输并在此基础上介绍固件的定义,阐述基本框架以及其固件程序的基本设计。
关 键 词:EZ-USBAN2131QC;基本框架;USB接口;固件程序设计
随着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的端点O用于控制传输。
(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 设备请求
设备请求函数一般具有如下形式:
该函数主要对来自主机的命令及请求进行处理(如分析描述符表),以确定新的配置接口和端点。
3.3 USB中断
由于在固件程序中提供有中断服务例程接口,因此,开发者只要在需要处理的中断服务例程接口中加入自己编写的中断服务代码,即可完成对相应中断请求的服务。这些中断服务例程接口函数的形式为:
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描述符表样例Dser.a51中的格式,按顺序依次修改设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。
(2)修改periph.c程序中初始化函数TD_Init(),进行端点使能与中断允许设置。
void TD_Init(void)
{
IN2VAL=bmEP2; // 使输入端点2有效
IN2IEN=bmEP2; ///使能端点中断
USBBAV=bmAVEN; //使能自动向量
EA=1; //使能8051中断
Rwuen=TRUE; //使能远程唤醒
}
(3)修改periph.c中的块输入端点2的中断函数ISR_Ep2 in(),填加用户功能代码,完成块读传输。
在KeilμVision2下调试,即可生成bulk.HEX。
关 键 词:EZ-USBAN2131QC;基本框架;USB接口;固件程序设计
随着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的端点O用于控制传输。
(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 设备请求
设备请求函数一般具有如下形式:
该函数主要对来自主机的命令及请求进行处理(如分析描述符表),以确定新的配置接口和端点。
3.3 USB中断
由于在固件程序中提供有中断服务例程接口,因此,开发者只要在需要处理的中断服务例程接口中加入自己编写的中断服务代码,即可完成对相应中断请求的服务。这些中断服务例程接口函数的形式为:
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描述符表样例Dser.a51中的格式,按顺序依次修改设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。
(2)修改periph.c程序中初始化函数TD_Init(),进行端点使能与中断允许设置。
void TD_Init(void)
{
IN2VAL=bmEP2; // 使输入端点2有效
IN2IEN=bmEP2; ///使能端点中断
USBBAV=bmAVEN; //使能自动向量
EA=1; //使能8051中断
Rwuen=TRUE; //使能远程唤醒
}
(3)修改periph.c中的块输入端点2的中断函数ISR_Ep2 in(),填加用户功能代码,完成块读传输。
在KeilμVision2下调试,即可生成bulk.HEX。
- USB2.0控制器CY7C68013的接口设计实现(06-11)