技术
`
2009/12/30 10:52
基于USB接口设备的固件程序设计
0
0

一、 引言

USB是应用在PC领域中的新型接口技术,它由三部分组成:具有USB接口的PC系统,能够支持USB的系统软件和使用USB接口的设备。它的提出是基于采用通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目地。它的最显著优点是支持热插拔,当用户插入USB外设后,计算机能够自动识别接入的外设,而不需要重新启动系统。

二、USB设备硬件结构

为了提高系统的可扩展性,也便于选择高性能的单片机,以实现更多的功能,我们使用较为广泛的Philip公司的单纯的接口芯片PDIUSBD12。下面介绍USB设备硬件的相关情况。
1.  PDIUSBD12芯片的内部结构

芯片内部集成SIE、320B的FIFO缓存、收发器以及电压调整电路和终结电阻器,提供2MB/s速率的并行接口,具有全自治本地DMA功能,芯片提供的多重中断模式有利于批量和等时数据传输模式。芯片还提供了可编程时钟、上电复位和低电压复位电路。

2.  PDIUSBD12芯片的控制字

D12的控制字分为初始化命令、数据流命令和通用命令三种基本类型。在USB 设备列举过程中使用初始化命令,这些命令用来启动设备、设置地址、端点和工作模式。数据流命令用于管理USB 和单片机之间的数据流。很多数据流是通过一个发给单片机的中断请求开始的。控制器使用数据流命令来存取数据,确认在FIFO中的数据是否有效。通用命令主要在数据传输过程中使用,包括恢复和读取当前帧号。

3.  PDIUSBD12 与单片机的连接

以PDIUSBD12和89C52单片机之间的连接如图所示,ALE接到单片机的ALE上,使用地址总线复用方式。A0通过电阻接VCC。VCC接+5V,VOUT3.3通过电容接地,同时脚20RESET_N和脚18DMACK_N接高电平。GND接地。8根数据线接至数据总线。脚11CS_N端接至控制器或译码器的相应端, PDIUSBD12可以通过CS_N端,映射为控制器的任何地址。脚14中断接至控制器的中断线,并用电阻拉高。XTAL1和XTAL2接6MHZ晶振,EOT_N拉高,D-、D+分别接到USB 总线的D-、D+上。在实际产品中,脚21GL_N可接LED显示设备状态。

三、USB设备固件的设计

固件的设计要求非常熟悉USB设备的具体通信步骤以及单片机的指令系统。

1.  固件介绍

PDIUSBD12是一种高速并行总线的USB接口设备,支持本地DMA传输.固件设计的目标是使D12在USB上能达到最快的传输率。外围设备如打印机等使用D12传送大量的数据。这些设备中的CPU忙于处理许多任务象设备控制,数据和图象处理。D12的固件设计成完全的中断驱动模式。当CPU在处理前台任务时,USB传输在后台被处理。这保证了最好的传输率和较好的软件结构,简化了编程和调试。

在后台中断服务程序和前台主程序之间的数据交换是通过标志和数据缓冲区来实现的。例如, D12主要的大量输出端点用一个圆形的数据缓冲区。当D12从USB接收到数据封包,就向CPU产生一个中断请求,CPU会马上执行中断服务程序。在中断服务程序内部,固件把数据封包从D12的内部缓冲区送到圆形缓冲区,然后清除PDIUSBD12的内部缓冲区使它能接收下一个新的数据包。CPU能继续执行当前前台的任务直到完成。然后它返回到主循环,检查圆形缓冲区是否有新的数据,开始另外一个前台任务。

使用这种结构,主函数不关心数据源是来自USB设备,串行口还是并行口。主函数只检查圆形缓冲区是否有新数据需要处理。因此,主函数将目标定为数据处理,而中断服务程序做的工作是以可能的最快速度传送数据。类似地,控制端点在数据封包处理上使用了同样的概念。中断服务程序在数据缓冲区里接收和存储控制传输内容并设置相应的标志寄存器。主函数将发送请求到协议处理程序。一旦所有的标准设备,类,和用户请求在协议处理程序处理了,中断服务程序就能保持它的效率。

2.  固件结构和任务

1)  固件结构

固件由6部分组成,它们如下: 主程序:发送USB设备请求,读测试键,控制发光二极管,处理USB总线事务,等等、标准请求、用户请求、中断服务程序、PDIUSBD12命令接口、硬件层。下面依次简略介绍:

硬件层:这是固件中最低的层,它完成向PDIUSBD12的硬件通道.当固件转向其他的CPU 平台,这部分需要修改或增加内容。

PDIUSBD12命令接口:为进一步简化用PDIUSBD12编程,固件定义了一系列命令接口,它们压缩了使用PDIUSBD12的所有功能。

中断服务程序:这部分代码处理由PDIUSBD12产生的中断。它接收从PDIUSBD12内部的FIFO区到CPU存储器的数据,并且建立合适的标志以通知主程序处理。

主程序:主程序检查事件的标志,转移到合适的子程序做进一步的处理。它也包含人机接口代码,例如,发光二极管和键盘扫描。

协议层:协议层处理标准USB设备请求,也处理具体的用户请求诸如DMA和TWAIN。

2) 固件任务

在编写固件程序的过程中,PDIUSBD12 作为接口芯片硬件为我们做了大量的工作,其中包括:

a.检测新的进入事务;翻译从USB 总线上获得的信息;b. 检测事务的目的地址,以决定是否响应;e. 确定事务的类型;d. 从USB 总线上接收数据到FIFO;e. 从FIFO 中发送数据到USB 总线上;f. 计算校验位,检测并报告结果。

但还有相当一部分的工作由固件程序来完成。这部分任务包括:

a.初始化PDIUSBD12并处理PDIUSBD12的中断;b.响应各种请求,至少要响应标准的11种请求;c.选择适当的数据写入PDIUSBD12的FIFO;d.从PDIUSBD12的FIFO中读取数据;

 

免责声明:本文仅代表作者个人观点,与C114通信网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

给作者点赞
0 VS 0
写得不太好

C114简介     联系我们     网站地图

Copyright©1999-2025 c114 All Rights Reserved 沪ICP备12002291号-4

C114通信网版权所有 举报电话:021-54451141 用户注销