标准请求处理程序
USB协议中规定了11条所有USB设备都必须支持的标准请求,这些请求都是通过端点0发送的。标准请求处理程序对主机发出的标准请求进行响应,获取设备的性能及状态,并给设备分配地址且进行相应配置,最终完成枚举过程。
硬件接口及PDIUSBD12命令操作程序
硬件接口程序集成了DSP对PDIUSBD12的读写操作,是整个固件程序中最底层也是使用最频繁的部分,将它独立成一个模块编写极大地方便了程序在不同硬件平台上的移植。值得注意的是:PDIUSBD12要求数据线上的数据建立时间和保持时间必须大于40nS,因此编程时需要插入至少4个软件等待状态。另外,因为PDIUSBD12的最小读写周期为500nS,所以在每次对其进行读写操作后必须增加适当的延时。
数据发送及接收程序
当用户通过主机端应用程序向设备索要数据时,DSP调用数据发送子程序完成数据发送,针对发送数据量的大小,可以选择使用端点1或者端点2完成。对于主机发送数据的接收,在端点0及端点1的IN中断子程序中即可完成。发送数据子程序如下:
调试
固件程序对时间敏感,所以编程时要特别注意时序问题。由于USB枚举过程很快,如果连续三次接收不到应答包就结束枚举,所以调试时要注意不能采用CCS的单步调试,可以采用断点调试。调试过程之初经常会遇到的一种状况是指示灯闪烁三次以后熄灭,这说明主机检测到了设备连接,但无法和设备进行对话来了解设备的信息。这表明固件程序还没有开始正常工作,需仔细检查程序中的错误之处。
调试过程之初,可以使用以下两种方法检测硬件连接是否正确:
1. 使用命令字FDh读取PDIUSBD12的ID号,正常状态下读出的两个字节应该为12H和10H。
2. 通过设置PDIUSBD12工作模式,改变输出时钟频率。在CLKout引脚测量输出波形,观察是否与设置值相符。
若以上两条满足,则说明硬件连接基本没有问题。
PC端软件
PC端软件包括设备驱动程序和应用程序两部分。
系统驱动程序是基于WDM (Windows Driver Model) 驱动程序模型设计的,包括四个模块:初始化模块、即插即用管理模块、电源管理模块和I/O功能模块。本设计选用辅助工具DriverStudio,它能很好地和DDK结合,编程思路也比较清晰。首先使用驱动向导(DriverWizard)建立项目,设置驱动程序类型,设置USB设备的 VID(Vendor ID)和PID(Product ID)及其各端点的属性。给端点2增加读写函数代码。这样就创建了一个驱动程序的总体框架。再对生成的代码进行修改编译和测试,完成USB驱动程序的开发。