本文选用PHILIPS公司的PDIUSBD12作为USB接口芯片。该芯片可与任何微控制器实现高速并行接口(2Mb/s),允许使用现存的体系结构并使固件投资减到最小。这种灵活性减少了开发时间、风险和成本,是开发高效低成本的USB外围设备的一种快捷途径。

PDIUSBD12一共有三组端点:端点0完成控制传输;端点1可以配置成中断传输;端点2有128B的缓冲区,是主要的数据传输端点。

接口电路

采用单独地址/数据总线配置,即用DSP的某地址线控制PDIUSBD12的A0引脚,实现命令数据的选择。A0=1表示传送命令,A0=0表示传送数据。片选(CS )及挂起(SUSPEND)信号分别由DSP的I/O口控制。读写选通信号WR 、RD 可以用DSP的R/W引脚及其取反后控制。但这样需要在电路中增加反相器,为了节约器件从而缩小电路体积,可以另外选择一个I/O口控制 PDIUSBD12的读选通RD。本设计中选用PAGE1,通过对不同地址的访问来区分对PDIUSBD12的读写操作。这样PDIUSBD12只占用微控制器的三个地址资源,其一用来向PDIUSBD12写命令,其二用来向PDIUSBD12写数据,另外一个用来从PDIUSBD12读数据。对DSP而言,PDIUSBD12就相当于一个有8位数据总线和3个地址的存储器件。

设备采用自供电方式,需要将EOT 通过一个10k?的电阻接至USB电缆的VCC(+5V)端,并加1M?下拉电阻,借此检测USB设备是否已经连接到USB口。

软件设计

USB软件设计包括固件(firmware)程序、PC端的驱动程序和应用程序。其中固件程序要求编写者对复杂的USB通信协议有深刻的理解,编程难度较高,在本论文中将详细介绍。

固件编程

固件程序是写入MCU内的程序,使MCU可以完全按照USB协议,识别接收到的信息包类型,对包的内容、意义进行分析,并按照要求完成相应的动作。通过这些不同类型包的传递,完成MCU与接口芯片的命令及数据交换,进而实现主机与设备间的通信。

固件程序设计成中断驱动模式,采用模块化设计。

主循环

主循环中主要完成DSP的寄存器及端口初始化,向PDIUSBD12发送设置模式命令,接通SoftConnect。判断是否接收到建立包(setup package),若收到则调用标准请求处理程序进行处理,若收到主机请求信号,则调用数据发送程序发送数据。

中断处理程序

中断处理程序是整个固件程序设计的重点。将DSP设置为下降沿触发,当PDIUSBD12接收到主机发送的信息包时,触发DSP进入中断。首先通过读取PDIUSBD12的中断寄存器判断所发生中断的类型,然后根据具体的中断类型进入相应的处理子程序。