阅读:2027回复:10
usb网卡驱动中实现固件自动下载的问题
大家好,帮忙看看有没有遇到这样的问题:
我们选择芯片cy7c68013,目的是做成usb无线网卡,现在usb接口已调通了,可以自动的加载固件,然后实现和应用程序的通信。 现在,我用drivernetworks来做微端口驱动,这时的芯片也要实现固件的自动下载,就是说固件没有固化到片子里。 在drivernetworks中有一个DownLoadFirmware()例程,如果需要用这个历程加载,请问各位buffer中的内容是什么? :( 谢谢! |
|
|
沙发#
发布于:2004-07-19 14:24
bingjie:
我用ControlPannel下载Firmware,加载可以成功的,可以正常工作。 你说的“ 2。下载Firmware后驱动是否被卸载了,如没有卸载说明Firmware的机构可能不完整,无法被SIE运行”是什么意思?就是说我下载firmware后,usbnic.sys会被卸载掉? :( 还有就是我用bushound观察的数据如下: 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 1.1.0 18.0 DO 01 . 1.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 2.1.0 18.0 DO 01 . 2.2.0 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 3.1.0 18.0 DO 01 . 3.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 4.1.0 18.0 DO 01 . 4.2.0 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 5.1.0 18.0 DO 00 . 5.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 6.1.0 18.0 DO 00 . 6.2.0 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 7.1.0 18.0 DO 01 . 7.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 8.1.0 18.0 DO 01 . 8.2.0 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 9.1.0 18.0 DO 01 . 9.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 10.1.0 18.0 DO 01 . 10.2.0 18.0 CTL 40 a0 92 7f 00 00 01 00 VENDOR 11.1.0 18.0 DO 00 . 11.2.0 18.0 CTL 40 a0 00 e6 00 00 01 00 VENDOR 12.1.0 18.0 DO 00 . 12.2.0 18.0 CTL 40 03 00 10 00 00 00 00 VENDOR 13.1.0 然后就停在这了,可能是哪返回的状态不对?一直在等待,这是什么意思? |
|
|
板凳#
发布于:2004-07-19 12:24
下载Firmware不成功可分几步从以下几个方面找原因
1。下载Firmware的过程是否都执行成功了,若不成功则Firmware本身可能有问题,可能包含不存在的地址或是驱动有误 2。下载Firmware后驱动是否被卸载了,如没有卸载说明Firmware的机构可能不完整,无法被SIE运行 3。设备管理器是否又发现设备重新加载设备驱动,如果没有发现,或是发现一个未知的设备,则很有可能是Firmware的初始化部分存在问题,重点查看TD_Init函数 或者可以拔掉板子上的EEprom加载Cypress的驱动用ControlPannel下载你的Firmware看看能否加载成功。 DDK中有一个UsbView小工具(有源码)可以查看USB设备描述符 |
|
地板#
发布于:2004-07-18 23:17
bingjie,你好,我给你发信了,冒昧打搅了不好意思,我太着急了
我虽然用的两个函数,但写得基本一样,就是两次传送的地址不一样哦! 我的qq是17559564 能联系我吗? |
|
|
地下室#
发布于:2004-07-18 22:57
不知道你为什么会有两个函数TriggerFirmware和DownLoadFirmware,其实你只要把你这两个函数都换成EzLoader里的
DownloadIntelHex函数应该就可以了。 |
|
5楼#
发布于:2004-07-17 23:42
bingjie:
你好,我在drivernetworks中都照这么做了,用hex2c生成firmware.c文件,trigger_code用的是ezloader中的loader。c 然后 Ezusb_8051Reset(1); status = TriggerFirmware(trigger_code); if (status!=NDIS_STATUS_SUCCESS) return status; Ezusb_8051Reset(0); DownLoadFirmware(firmware); if (status!=NDIS_STATUS_SUCCESS) return status; Ezusb_8051Reset(1); Ezusb_8051Reset(0); 但是板子加载了usbnic.SYS文件后,一直都没法进入设备管理器,也就根本没有正常工作 :( 查了好久,不知道问题会出在哪? |
|
|
6楼#
发布于:2004-07-17 22:41
为什么不自己写一个下载Firmware的函数呢,只要参照ezLoader做就可以了。Hex文件可以利用Cypress提供的小程序Hex2C转换成C源码INTEL_HEX_RECORD结构
NTSTATUS DownloadFirmware( IN PNC2KU_ADAPTER Adapter, IN PINTEL_HEX_RECORD Firmware ) { NTSTATUS Status; TRACE_IN( "DownloadFirmware" ); do { // // First download loader firmware. The loader firmware implements a vendor // specific command that will allow us to anchor load to external ram // Status = Usb8051Reset( Adapter, 1 ); if( !NT_SUCCESS( Status ) ) break; TRACE0( "Download loader" ); Status = DownloadIntelHex( Adapter, FirmwareLoader ); if( !NT_SUCCESS( Status ) ) break; Status = Usb8051Reset( Adapter, 0); if( !NT_SUCCESS( Status ) ) break; // // Now download the device firmware // TRACE0( "Download Firmware" ); Status = DownloadIntelHex( Adapter, Firmware ); if( !NT_SUCCESS( Status ) ) break; Status = Usb8051Reset( Adapter , 1 ); if( !NT_SUCCESS( Status ) ) break; Status = Usb8051Reset( Adapter, 0 ); }while( FALSE ); TRACE_OUT( "", Status ); return Status; } |
|
7楼#
发布于:2004-07-17 15:12
看了ezloader的例子,感觉应该照这个改,但在drivernetwork中有什么不同?
有没有用过drivernetwork的高手指点一下 |
|
|
8楼#
发布于:2004-07-16 10:59
我记得ez-usb好像有例子介绍
|
|
|
9楼#
发布于:2004-07-15 23:55
是啊,我们也正在做同样的咚咚,遇到了类似的问题,希望高人指点!
|
|
10楼#
发布于:2004-07-15 21:22
还有种方法是不是可以修改inf文件,然后像usb驱动中做的一样用ezloader.sys来做,但这样网卡驱动中的inf文件怎么改 :(
哪位大哥能给些提示? 急哦 :P |
|
|