关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 采用PDIUSBD12的USB接口固件程序开发

采用PDIUSBD12的USB接口固件程序开发

作者: 时间:2013-01-18 来源:网络 收藏

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

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

1 固件程序主要完成的工作
固件设计的目标就是完成主机与设备之间的命令与数据传输与转换,使12在USB上达到最大的传输速率。它的操作方式与硬件联系紧密,包括USB设备的连接、USB协议、中断处理等。在系统中,当PDIUSBD12从USB接收到一个数据包,就对CPU产生一个中断请求,CPU立即响应中断。在ISR(中断服务程序)中,固件读取数据,并将数据值保存到循环数据缓冲区,随后置相应事件的标志位,CPU继续前台程序,检测事件标志,执行完成相应的事件任务。
USB单片机固件程序通常由3部分组成:初始化单片机和所有的外围电路(包括PDIUSBD12);主循环部分:这部分是可中断的;中断服务程序,可以中断执行。根据USB协议,任何传输都是由主机开始的,这样单片机作它的前台工作,等待中断。主机首先要发令牌包给USB设备(这里是PDIUSBD12),PDIUSBD12接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读PDIUSBD12的中断寄存器,判断USB令牌包的类型,然后执行相应的操作,因此,USB单片机程序主要就是中断服务程序的编写,在USB单片机程序中要完成对各种令牌包的响应。
单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为3种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12给出了各种命令的代码和地址,单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。

2 固件程序的流程及结构
USB设备启动流程如下:
(1)USB设备接入USB口,发出连接USB命令;
(2)主机发出读设备描述符2次;
(3)主机根据设备描述符(厂商ID、产品ID),启动相应设备驱动程序;
(4)设备驱动程序初始化USB设备:
①读设备描述符;
②读配置描述符;
③选择接口、端点(管道),确定传输方式。
在编写USB的单片机固件程序时,单片机的中断应设置为电平触发,中断后一定要读上次传输状态寄存器(命令40H~45H),以清除中断寄存器中的中断标志,这样PDIUSBD12的中断输出变回为高电平。
PDIUSBD12固件编写采用分层结构简洁且易于修改和测试,既增加了代码的可读性,又增加了程序的通用性。PDIUSBD12固件的开发一般都是在周立功单片机公司提供的固件源码的基础上做相应的修改。由于该固件采用分层分模块的结构,在做移植的时候只要修改部分代码就可以运行于特定的平台,比较方便。


上一页 1 2 3 下一页

关键词:PDIUSBDUSB接口

评论


相关推荐

技术专区

关闭