基于USB的虚拟信号发生器接口固件设计

时间:2022-08-08 12:12:52

基于USB的虚拟信号发生器接口固件设计

摘 要: 计算机总线技术制约着虚拟仪器的发展。USB通用串行总线的出现促进了仪器仪表的数字化。选用PHILIPS公司的PDIUSBD12作为接口芯片,用单片机C语言与汇编语言开发接口固件,完成基于USB的虚拟信号发生器接口程序设计。

关键词:

中图分类号: TP391.9 文献标识码: A 文章编号:2095-2163(2011)03-0077-03

The Interface Firmware Design of Virtual Instrument based on USB

ZHAO Junying1, SUN Ruifeng1,2, SUN Jian1

Abstract: Computer bus technology restricts the development of virtual instruments.Universal Serial Bus promotes the emergence of digital instrument. The paper adopts PDIUSBD12 interface chip of Philips Electronics Corporation, and uses C language and Assembly language to develop interface firmware, therefore completes interface program design of USB-based virtual signal generator .

Key words:

0 引言

USB设备接口固件的开发在整个虚拟信号发生器的设计过程中具有非常重要的作用,虽然设备接口硬件可以完成一部分的工作,但每一步都需要软件协同处理;另外软件还有一些必须处理的任务,例如对控制请求的处理。对开发者来说,接口硬件的工作是不可见的,可见的是接口固件在控制系统的每一步工作。

1 芯片的选择

选择微处理器主要从两方面考虑,一方面控制USB接口芯片,另一方面控制信号的产生。接口芯片采用仅处理USB通信的PDIUSBD12,其主要特点是价格便宜、通用性强,可作为组件嵌入到不同的仪器仪表系统中。由于系统采用USB总线供电,其提供的电源功率有限,所以整个系统设计都要考虑选用低功耗的芯片和器件。功能模块主要由D/A转换功能部件组成,由于虚拟仪器的便携特点,希望微处理器能具有两个10位D/A转换输出通道,这样就省去了D/A转换芯片及其电路的电源需要,也简化了硬件电路。基于以上的考虑,选择了台湾凌阳公司的SPCE061A。因其集成度高、功耗低,能够非常容易、快速地处理复杂的数字信号,而且性价比极高,非常适用于便携式的仪器、仪表。

2 接口固件设计

开发接口固件采用模块化和通用性的设计思想。使用单片机C语言和汇编语言完成接口固件的设计。汇编语言是可直接操作硬件的低级语言,C语言是通用的计算机程序设计语言,既有高级语言的特征又可以直接操作系统硬件,还可以进行结构化程序设计。接口固件设计采用分层结构。最底层是一些简单、原始的功能子程序,这些子程序直接和硬件通信或者完成一些最基本的功能,例如向USB接口写数据和读取数据。通过调用这些子程序形成高层、更复杂的应用程序。接口固件模块结构如图1所示。程序按分层结构编写,简洁易懂,易于测试,不但增加了程序的通用性,又增加了代码的可读性。

SPCE061A控制程序由三部分组成:

(1)初始化芯片:SPCE061A、PDIUSBD12。在与设备进行数据交换之前,主机要了解设备的工作,根据设备的要求进行系统配置。在初始化过程中,主机调用总线枚举进程,标识、管理设备状态的改变。当主机发现有设备连入系统,就会向集线器发送命令,使连入设备进入复位状态;此时设备把自己的地址暂时设成编号为0的特殊地址(为缺省状态),通过此缺省地址端点0接受主机发送的命令,交由接口固件解释并处理;再由主机统筹整个系统的状况,为设备分配一个正式地址。此后主机跟设备通信都将以这个正式地址为基础,通过一系列请求命令取得设备的用途和特性信息,为该设备选择配置方式。

(2)主程序部分:主要任务是检测标志位信号是否有改变,如果改变则执行相应的子程序,否则就会一直循环等待中断。主机应用程序使用标准Windows API函数从连接设备读取或写入数据。由于主机和设备已交换完列举信息,并且设备驱动程序已经分配和装载,因此数据通道已经建立好了。设备主要工作是对配置端点进行端点操作,对相应寄存器的状态位实时处理。

(3)中断服务程序:主要完成接收、发送数据,设置相应的标志位的工作。首先主机发令牌包给PDIUSBD12,在PDIUSBD12接收到令牌包后会给单片机发送中断请求;条件满足时,单片机进入中断服务程序。在此先读PDIUSBD12的中断服务寄存器,判断 USB令牌包是哪种类型,然后再执行相应的操作。因此,单片机固件主要就是中断服务程序的编写。

在USB单片机编程中要完成对各种令牌包的响应,比较难处理的是Setup包,主要是对端点0的编程。主机负责建立Setup包的每个域的值,如表1所示。由设备固件程序负责解释各个域的值,并根据其内容执行相应的操作。

USB设备的11种标准设备请求及用C语言编写的执行请求的函数如表2所示。标准请求码的范围从00H到0CH。除了SET_address和SYNCH_frame请求之外,多数请求都成对出现。描述如下:

(1)清除特性是用来清除一个指定的特性。

(2)取得配置是返回当前设备的配置值,若返回0值表明设备没有配置。

(3)取得描述符返回存在的描述符,包括设备、配置、接口、端点、类和字串描述符。

(4)取得接口主要用于支持多个接口配置的设备,主机请求当前的接口号。

(5)取得状态返回设备、接口或端点的特性状态,包括设备的供电形式、是否支持远程唤醒等。

(6)设置地址请求指定设备以后通信的地址,完成此请求后,所有通信全都使用这个新地址。

(7)设置配置请求告诉设备使用选择的配置,此配置必须是配置描述符中返回的设备所支持的。

(8)设置描述符请求主要用于更新或添加新的描述符,普通设备不支持这个请求。

(9)设置特性请求是用来使能一个设备、接口或端点。

(10)设置接口请求主要用于有多个接口配置的设备,主机可以为指定接口选择一个配置。

系统初始化部分包括系统时钟、 I/O口、中断设置(开放外部中断)、PDIUSBD12芯片软件复位/初始化。其主流程核心部分是协议层的请求处理,关系到PC机枚举USB设备是否成功。因此在调试单片机程序的过程中,要特别注意Windows对USB设备的枚举顺序。若枚举成功,主机将会找到新的设备,提示安装驱动程序;否则就会找到未知设备.

上一篇:未来时尚科技家居生活前瞻 下一篇:魔变平面照片巧变3D