阅读:3717回复:22
USB AN2131 APP紧急求助!明天之内搞不定我就混不下去了!
问题棘手,我已经为此拖延两天了!知道的大虾千万不要吝啬笔墨啊!点拨一句话,救人一命啊!
问题是这样的:我用AN2131Q,在Anchor提供的Firmware Frame上加了自己的代码做成Firmware,然后使用Anchor提供的通用驱动ezusb.sys,然后做了个应用程序测试。 2131初始化、枚举没问题,firmware也能正常运行。应用程序这边CreateFile然后用DeviceIoControl发Get Descriptor都能正常返回。但是一旦用DeviceIoControl发Bulk读写操作时应用程序返回错误代码23,查MSDN是Data error。后来不知怎么改了一下firmware再运行就变成应用程序挂起了。我用debugview查看ezusb.sys的消息,发现应用程序发读写操作时ezusb.sys在一个wait for single object处未得到返回。并且USB CORE还未设置中断,我的endpoint中断未被进入过。我不明白我哪里没做对,求救! 付代码如下: firmware的初始化: void TD_Init(void) // Called once at startup { // USBPAIR = 9; //Set EP2 and EP3 Paired IN07VAL |= bmEP1 + bmEP2 + bmEP3 + bmEP4 + bmEP5 + bmEP6 + bmEP7; OUT07VAL |= bmEP1 + bmEP2 + bmEP3 + bmEP4 + bmEP5 + bmEP6 + bmEP7; IN07IEN |= bmEP1 + bmEP2 + bmEP3 + bmEP4 + bmEP5 + bmEP6 + bmEP7; OUT07IEN |= bmEP1 + bmEP2 + bmEP3 + bmEP4 + bmEP5 + bmEP6 + bmEP7; PORTACFG = 0; //Set Port A for Data Transfer PORTBCFG = 0; //Set Port B for Data Transfer PORTCCFG = 0; //Set Port C for Data Transfer OEA = 0xff; //Set Out Enable for Port A OEB = 0xff; //Set Out Enable for Port B OEC = 0xff; //Set Out Enable for Port C OUTC = 0; //Turn off the Busy LED IN2BC = 64; //Set EP2IN\'s BUSY Bit // OUT2BC = 0; //Set EP2OUT\'s BUSY Bit Rwuen = FALSE; // Disable remote-wakeup } 应用程序的调用: HDev = CreateFile(\"\\\\\\\\.\\\\Ezusb-0\", GENERIC_READ || GENERIC_WRITE,FILE_SHARE_READ || FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); BULK_TRANSFER_CONTROL btc; byte buf[64]; btc.pipeNum = 2; DeviceIoControl(HDev, IOCTL_EZUSB_BULK_READ, &btc, sizeof(BULK_TRANSFER_CONTROL), buf, 64, &junk, NULL ) debugview返回的信息: Ezusb.SYS: IRP_MJ_DEVICE_CONTROL Ezusb.SYS: Enter Ezusb_GetDeviceDescriptor Ezusb.SYS: enter Ezusb_CallUSBD Ezusb.SYS: Calling USB Driver Stack Ezusb.SYS: return from IoCallDriver USBD 103 Ezusb.SYS: Wait for single object Ezusb.SYS: Wait for single object, returned 0 Ezusb.SYS: URB status = 0 status = 0 irp status 0 Ezusb.SYS: exit Ezusb_CallUSBD (0) Ezusb.SYS: 18 bytes of dev descriptor received Ezusb.SYS: Leaving Ezusb_GetDeviceDescriptor Ezusb.SYS: Get Device Descriptor returned 18 bytes Ezusb.SYS: IRP_MJ_DEVICE_CONTROL Ezusb.SYS: enter Ezusb_Read_Write() Ezusb.SYS: enter Ezusb_CallUSBD Ezusb.SYS: Calling USB Driver Stack Ezusb.SYS: return from IoCallDriver USBD 103 Ezusb.SYS: Wait for single object [编辑 - 1/23/02 作者: Borden] |
|
最新喜欢:![]() |
沙发#
发布于:2002-01-23 23:23
读CYPRESS提供的BULKTEST例子里HOST部分的MAIN.C,我没用过,不过看起来和你的还是有区别。我也正在做这个试验,不知道有没有哪为老大有成功的经验,望能告知小弟用DEVICEIOCONTROL和READ、WRITE读写数据的速度有多大差别
|
|
板凳#
发布于:2002-01-23 23:41
我看了的,跟我的差不多丫,我贴出来:
bResult = DeviceIoControl (hDevice, IOCTL_EZUSB_BULK_WRITE, &bulkControl, sizeof(BULK_TRANSFER_CONTROL), &outBuffer[0], outPacketSize, &nBytes, NULL); HANDLE * phDeviceHandle *phDeviceHandle = CreateFile( completeDeviceName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); |
|
地板#
发布于:2002-01-24 00:04
bulktest的main.c我看了的呀,和我这个差不多啊。而且我GetDescriptor通过了的,应该CreateFile和DeviceIoControl的调用方面没有大问题吧?请指教。
|
|
地下室#
发布于:2002-01-24 10:00
好象这句不太一样,CYPRESS提供的例子里读IN?POINT用的都是大于7的不知道是不是和这个有关系,
btc.pipeNum = 2; |
|
5楼#
发布于:2002-01-24 10:28
不知道为什么,我将pipenum设成9或者12都会出来错误87(incorrect parameter),不知道bulktest为什么可以这样做?
|
|
6楼#
发布于:2002-01-24 19:32
也许是你的pipenum9或者12是ISO的传输方式吧
而你自己用的BULK的方式 |
|
7楼#
发布于:2002-01-24 19:43
我不知道Pipe在哪里定义啊,所以根本就没有定义它。我查了Anchor的好多资料,还有ezusb.sys的文档,都没有提到pipe的事情啊?楼上的大哥能告诉我是怎么回事,怎么定义,或者哪里能找到相关资料么?叩。
|
|
8楼#
发布于:2002-01-25 01:38
BulkTest中的pipenum最大可达14,是不是和ENDPOINT PAIRING有关? BORDEN兄的固件是全速设置吗?
|
|
9楼#
发布于:2002-01-25 10:26
回楼上的,我不懂啊,你说的全速设置是什么啊?在哪里设置啊?Anchor提供的Framework里面有设置速度的地方么?
|
|
10楼#
发布于:2002-01-25 14:17
btc.pipeNum = 2 是什么意思呢? 全速设置我的意思是BULK full-speed transfer. 我也刚起步。感觉全速的话(endpoint pairing一定要用的),pipenum应该小于7。
你可以令btc.pipeNum = 0或者1再试一下。 有结果告诉我一声。 |
|
11楼#
发布于:2002-01-25 14:29
我完全不知道ezusb.sys里面的pipenum是怎么定义的,其文档也没说,所以我就设了一个Endpoint号,后来发现pipenum是从0开始的,所以我就设成1以选择EP2,发现可以了。现在的问题是好像我的2131没有配置起来,我用usbcomp测的时候它说device not configurated,我想configuration不用应用程序来设吧,bulktest里面就没有设,我就不明白为什么我的2131没配置起来了。
|
|
12楼#
发布于:2002-01-25 15:49
各位开发过ezusb的大哥,谁能告诉我ezusb.sys里面调用IOCTL_EZUSB_BULK_READ/WRITE时的BULK_TRANSFER_CONTROL.pipenum是怎么定义,在哪里定义的啊?叩!
|
|
13楼#
发布于:2002-01-28 23:32
好象在INIT里初始化IN?BC后,不知道在什么地方又被清掉了,换个地方试一下吧,关于PIPENUM的问题,你的代码我也测试了一下,没有问题
|
|
14楼#
发布于:2002-01-29 09:02
我现在差不多搞通了,OUT1~OUT7的pipeNum是0-6,IN2~IN7的pipeNum是8-13,但IN1还是不通,而且我还是没在任何文档里面找到其定义,看来就是ezusb.sys里面自己定义了而忘了在文档里面说。
|
|
15楼#
发布于:2002-01-29 09:13
别忘了给帮助过你的兄弟加分呀!
|
|
|
16楼#
发布于:2002-01-29 09:16
怎么加啊?我不会啊?站长葛格帮帮忙吧?
|
|
17楼#
发布于:2002-01-31 13:58
是呀
怎么加分呀? |
|
18楼#
发布于:2002-02-01 18:05
如果你愿意,可以跟我联系,我们互相讨论提高。lvgx@263.net
|
|
|
19楼#
发布于:2002-02-05 14:54
pipe number和endpoint根本就没有直接联系,pipe number是总线驱动分的一个逻辑号,视endpoint描述信息在config描述表内的先后顺序而定。为什么不改一下anchor(现在应该叫cypress)firmare的原码,改一下你就全明白了
|
|
|
上一页
下一页