将串行应用移植到USB接口的简便方法
时间:03-15
来源:电子产品世界
点击:
大多数读者立即就可认出这些函数并将其与通用C语言库中的函数对应起来。 事实上,puts 和 gets 函数可以直接用CDC类中对应的 putsUSBUSART 和 getsUSBUSART 函数来替代。 通过其它专用实施函数还可以支持不同的串类型(空结束与固定长度缓冲)和存储类型(RAM还是ROM串表)。 下面给出熟悉的HelloWorld程序利用CDC-USB函数实现的程序。
#include "systemusbusb.h"
#include "io_cfg.h"
void main(void)
{
InitializeSystem();
while(1)
{
USBTasks(); // USB Tasks
HelloWorld(); // send a message to the
world
}//end while
}//end main
HelloWorld(void)
{
If ( mUSBUSARTIsTxTrfReady()) // check if Tx buffer empty
putrsUSBUSART( "Hello World!rn") //
send a new text string
} // Hello World
联机
现在可以将应用连接到PC上,来看看Windows即插即用技术的响应了。 在对所有USB应用都适用的初始枚举阶段(在USB 2.0标准的第9章描述)之后,屏幕上将弹出一个对话框,提醒用户已经发现一个新的硬件设备,需要为操作系统对其进行配置,以便使用它。 虽然CDC驱动程序已经是操作系统的一部分,但仍然需要更多的信息来帮助将新发现的设备与驱动程序进行绑定。 这会在Windows硬件管理器中创建针对特定端口的"属性页",以后用户可以用它卸载或重新配置端口。 在安装阶段,需要一个很小的纯文本文件(扩展名为.inf)。需要先用(文本编辑器)准备好,当即插即用向导要求时提供。".inf"举例如下:
; Windows USB CDC ACM Setup File
; Copyright (c) 2000 Microsoft Corporation
; Copyright (C) 2004 Microchip Technology
Inc.
[Version]
Signature="$Windows NT$"
Class=Ports
ClassGuid={4D36E978-E325-11CE-BFC1-
08002BE10318}
Provider=%MCHP%
LayoutFile=layout.inf
DriverVer=08/17/2001,5.1.2600.0
[Manufacturer]
%MFGNAME%=DeviceList
[DestinationDirs]
DefaultDestDir=12
[SourceDisksFiles]
[SourceDisksNames]
[DeviceList]
%DESCRIPTION%=DriverInstall, USBVID
_04D8&PID_000A
;-----------------------------------------------
-------------------------------
; Windows 2000/XP Sections
;-----------------------------------------------
-------------------------------
[DriverInstall.nt]
CopyFiles=DriverCopyFiles
AddReg=DriverInstall.nt.AddReg
[DriverCopyFiles]
usbser.sys,,,0x20
[DriverInstall.nt.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,usbser.sys
HKR,,EnumPropPages32,,"MsPorts.dll,
Serial PortPropPageProvider"
[DriverInstall.nt.Services]
AddService=usbser, 0x00000002, Driver
Service
[DriverService]
DisplayName=%SERVICE%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%usbser.sys
;------------------------------------------------ ------ ------------------------
; String Definitions
;------------------------------------------------ ------ -----------------------
[Strings]
MCHP="Microchip Technology Inc."
MFGNAME="Microchip Technology Inc."
DESCRIPTION="Communications Port"
SERVICE="USB RS-232 Emulation Driver"
上面的".inf"例子可用作模板进行快速定制。 文件格式非常简单,大多数Windows程序员都能快速读懂。 即使对于不太熟悉的人,也可以很快识别中文件由不同部分组成,每个部分的标题包含在方括号中,在相应部分内有一或多个由参数名称和参数值组成的正文。 在整个文件中,只能少数几个部分需要用户定制,包括:
·[Device List] 部分包括从USB-IF获得(许可)的公司和应用独有的VID/PID号码对以及其它信息。
·[Strings]部分包含操作系统在即插即用阶段在不同的对话框中使用的不同字符串和标识,以及在硬件管理器中标识设备的字符串和标识。
关于VID和PID
尽管设计师可以任意修改制造商部分和字符串部分的内容,但VID和PID代码的使用是非常严肃的。 USB-IF全权负责为每个希望销售和生产USB产品的制造商分配一个16位唯一VID代码。 VID代码通过许可协议获得,并需要支付一次性注册费用。
一旦分配了VID代码,制造商就可以利用65,536 (16位) PID代码来唯一地标识其不同型号的产品。 换句话说,VID代码是"终生有效的",因此很容易摊平初始的VID许可和注册成本。 当然,对于纯粹开发目的,并不需要完成整个许可过程,因为不同的制造商通常都提供"开发用VID/PID代码对"。 为进一步鼓励小型企业、初创企业、咨询企业以及其它非常小批量生产企业,有些单片机生产商还提供获得单个VID/PID对的选择(免费)。
- USB接口单片机SL11R的特点及应用(07-10)
- 基于ARM的远距离便携式无线传输系统(08-05)
- RS232接口转USB接口的通信方法(01-12)
- 无线收发器CC2531的USB接口设计(03-28)