两自由度振动偏移量实时采集设备的设计与实现
ID。USB设备答复为??一个未下载的设备(nondownloadeddevice)。
(4)上位机获得此IDs,就开始加载LoaderDriver,加载后LoaderDriver执行固件的下载。LoaderDriver是用于下载FX2固件的驱动,此驱动在控制面板安装目录Driver下可以找到,修改时需安装DDK,然后在VC6.0中重新编译源文件。
(5)LoaderDriver放开并重起FX28051。
(6)被下载的固件开始运行。
(7)FX28051控制断开USB总线。
(8)上位机发现设备断开,于是释放LoaderDriver。
(9)8051重新连接USB总线。
(10)上位机发现设备插入,并开始询问IDs.。
(11)8051固件根据其自身IDs回复VIDPID等。此时的VIDPID为固件的描述符文件里的VIDPID。
(12)上位机得到IDs,并根据其信息加载对应的驱动程序。
(13)上位机驱动程序和EZ-USB固件已经正确加载,并可以与应用程序执行数据传输和控制了。
至此,应用程序即可调用设备驱动程序来发送和接收数据。
3 系统软件设计
3.1 控制面板简介
控制面板主要用于FX2设备的开发调试(包括硬件设备测试和软件功能测试),具体有厂商请求测试(设备请求、配置请求、管道设置请求等)、各种方式数据传输测试、固件下载、E2PROM烧写、接口设置、端点设置等。
3.2 烧写E2PROM
记事本编辑好相应的Hex文件后,使用EZUSB控制台自带的工具hex2bix把Hex文件转化为iic文件,然后用EZ-USB控制台下载。
图2 固件开发流程图
3.3 CY7C68013的固件设计
该固件的主要功能是完成该单片机及外围设备的初始化、设备的重枚举(ReNumeration)、接受主机的设备请求及完成相应的控制数据传输等。
Cypress公司提供的固件开发框架和固件函数库简化并加速了设备固件的开发,大大提高了用户开发的效率,本设备固件的设计也是采用此方法。
固件开发框架流程图见下图2所示。
固件开发完成了USB设备的基本功能需求,设计固件时只需设计用户初始化函数TD_Init()、用户函数TD_Poll(),修改描述符表。TD_Init()完成需要用户自定义的初始化工作,设计时在TD_Init()中添加初始化CPU时钟频率、I/O端口模式、USB接口数据传输模式、清除所有等待的USB中断请求等(待确认)的代码。
用户函数TD_Poll()在固件运行期间被循环调用,本设备主要完成对ADNS-3080的偏移量△x和△y值的连续读取。因为CY7C68013没有带主SPI接口,实现时用单片机固件程序模拟主SPI跟ADNS-3080通信。流程如图3所示。图4和图5是SPI通信的读写时序图。
图3 流程图
图4 SPI接口读操作时序图
图5 SPI接口写操作时序图
3.4 ADNS-3080的固件下载
DSP固件开发有两种方式,一是自行开发程序,二是使用厂商已提供的固件程序。Agilent公司提供了ADNS-3080的固件adns3080_srom_51.inc(共1986个字节),从官方网站即可下载。本次设计该固件是通过主机的应用程序下载到设备端点,由单片机控制写入ADNS-3080SRAM中[7]。写入时先要对ADNS-3080进行下载前的初始化工作。下载完成以后通过读ADNS-3080的SROM_ID寄存器来检验下载是否成功。
3.5 设备驱动及其Inf文件设计
在设备开发时可以使用控制面板下载单片机固件,但最终产品需要自动完成固件下载和设备的重枚举。自动的固件下载和设备的重枚举两个功能的完成依赖于两个驱动,一个用于枚举设备后下载固件至单片机,叫下载驱动(EZ-LoaderDriver);一个用于设备重枚举后与主机通信,叫功能驱动。
EZ-LoaderDriver源码由EZ-USB软件开发包提供,结合微软提供的DDK在VisualC++6.0开发环境下把固件和驱动重新编译即可。具体步骤:①使用EZ-USB软件开发包提供的Hex2C工具把单片机固件程序Hex文件转化为C文件;②用固件程序C代码中的firmware[]数据取替EZ-LoaderDriver中firmware.c文件中的数组,重新编译即可生成所需的EZ-LoaderDriver。
功能驱动的设计可以使用Cypress公司提供的GPD(通用设备驱动程序),也可以自行开发。目前自行开发的方式有三种,使用微软提供的DDK、使用Windriver、使用DriveWorks,其中DriveWorks开发带有现成的驱动生成向导,开发较为容易,但没有前两种方式设计的驱动灵活。GPD目前有EZ-USB.sys和CyUSB.sys两个,它们提供了USB标准设备请求和数据传输连接,后者自带应用程序API函数,开发应用程序较为容易,因此本设备选择了CyUSB.sys。
设备驱动的Inf文件是在设备第一次连接主机时为主机安装设备驱动提供相应的信息。Inf文件的内容主要包括驱动提供商名称、厂商标识符(VID)、设备标识符(PID)、驱动安装目录、添加的注册表信息等,设计时找一样本修改上述内容即可。
4 结束语
4.1 硬件电路设计注意
- SPI总线初体验(12-15)
- SPI 总线 和 IIC 总线 的区别(12-15)
- SPI总线小结(12-15)
- SPI总线时序分析(12-15)
- SPI总线协议使用与原理(12-15)
- SPI总线之CPOL CPHA(12-15)