上集介绍:
昨天已经把固件开发的环境Keil基本搞好了,而且利用CCD1随机附带的固件程序C文件加上Suite 3.4.7提供的INC和LIB,并对其中不契合的地方稍加修改,最后编译成功,获得了HEX文件,比CCD1附带的HEX文件小了一点点。(不契合原因:老的fx2regs.h文件中没有对端口ABCD(E不能按位访问)的每一位进行定义,所以CCD1的txmaster.c文件开头部分以"sbit PD0 = IOD ^ 0;"的形式对所使用的端口的位进行了定义。当更换为新版本Suite提供的INC时,新的fx2regs.h文件已经贴心地将端口位按照" sbit PD0 = 0xB0 + 0;"的形式进行了定义,此时txmaster.c中对端口位的定义导致重复定义错误。注释掉即可顺利编译。)
实验目的:为了进一步确定开发环境OK,也想借机测试一下我新编译出来的固件(后文称为重制固件)是否能像原来固件一样工作(在EZUSB.sys驱动下)。
实验设计:
1、将CCD2电路板组装起来(FX2LP,不加装CCD),在CPLD中烧入一个可以正常工作的POF文件(应首先在具备原版USB固件的CCD1上通过测试);
2、修改CCD1(FX2)附带驱动程序的INF文件,加入一个新的,也就是我在重制固件描述符中添加的VID&PID。
3、由于CCD1附带驱动EZUSB.sys是针对"CHICAGO"平台的,也就是XP之前的平台,但是XP也支持这个驱动,而且CCD1附带的上位机软件也是很对这个驱动开发的,我需要在XP平台上(实验室台式机)进行这个实验。
4、由于CCD2板上没有焊接EEPROM,我将首先利用通用驱动EZUSB.sys识别一个default VID&PID--04B4&8613,然后利用开发工具烧写重制固件到RAM,然后重枚举之后会将设备以新的名字(INF文件添加:CCD2 Regenerated Firmware Test)和驱动程序重新绑定。
5、运行上位机程序,查看是否能够正常读取图像数据(实际没有图像,只是电路噪音)。
实验预期:
如果,上位机程序可以读出图像,说明新的固件开发环境(Suite3.4.7提供的最新版的INC和LIB)可以和CCD1附带的老版fw.c、txmaster.c文件相契合。
实验过程:
1、在CCD1上烧入CCD1附带total.pof,可以采集到图像,设备显示"IOBOX X-Ray Device"。
2、在CCD2上烧入CCD1附带total.pof,烧入成功,LED频率闪烁。
3、将CCD1插入计算机,更新驱动程序,选择添加了0547&1004信息的INF文件,该文件被XP重命名为oem20.inf。
4、将CCD2插入到计算机,发现自动识别,并捆绑到CyUSB.sys,因为之前的试验中安装了CyUSB.sys,对应的INF文件被XP命名为oem19.inf,这样方便了我对CCD2烧入固件。
5、在XP中安装Suite3.4.7,利用Control Center烧入重制固件。
6、重制固件烧入CCD2成功,重枚举为"CCD2 Regenerated Firmware Test",与EZUSB.sys绑定,运行上位机程序,成功获得图像,成功进行参数设置操作。
实验结果:
成功
实验结论:
新的Keil环境编译的重制固件程序能够满足CCD2的工作。固件开发的大概流程完成。表示CCD1的USB固件完全可以应用到CCD2的设计上,只需将CCD1的USB固件吃透学通,CCD2的USB固件设计不是问题。表明上位机与CCD2通信的难点,转移到上位机程序和驱动程序上。由于新版本的开发包附带驱动CyUSB.sys对上位机程序的开发环境有新的要求(例程支持VS2008\VS2010,且附带了CyAPI.lib和CyUSB.dll),而CCD1附带的上位机程序是基于EZUSB.sys驱动,开发平台是VC++6.0 。
下一步:
学习如何将固件程序烧入到EEPROM中,这样可以简化后续开发步骤(原来需要先识别为default,然后烧入固件到RAM,然后重枚举,然后被识别为CCDx)。