Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3719回复:22

USB AN2131 APP紧急求助!明天之内搞不定我就混不下去了!

楼主#
更多 发布于:2002-01-23 21:39
问题棘手,我已经为此拖延两天了!知道的大虾千万不要吝啬笔墨啊!点拨一句话,救人一命啊!

问题是这样的:我用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]

最新喜欢:

sunmaculasunmac...
cherry
驱动小牛
驱动小牛
  • 注册日期2001-11-28
  • 最后登录2006-03-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-07 21:09
改原码?那位好心ggjj告诉我怎么改呀!
nn_buaa
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2005-06-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-06 10:37
pipe和endpoint的关系在协议里有说明,而ez_usb的二者关系在controlpanl里getpipe可以得到。
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-02-05 16:00
pipe number和endpoint根本就没有直接联系,pipe number是总线驱动分的一个逻辑号,视endpoint描述信息在config描述表内的先后顺序而定。为什么不改一下anchor(现在应该叫cypress)firmare的原码,改一下你就全明白了


我已经改过了,我已经明白了,只是觉得Anchor没有给出pipeNum的定义和说明比较差劲。
six
six
驱动牛犊
驱动牛犊
  • 注册日期2001-06-03
  • 最后登录2003-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-02-05 14:54
pipe number和endpoint根本就没有直接联系,pipe number是总线驱动分的一个逻辑号,视endpoint描述信息在config描述表内的先后顺序而定。为什么不改一下anchor(现在应该叫cypress)firmare的原码,改一下你就全明白了
lu_six
lvgx
驱动牛犊
驱动牛犊
  • 注册日期2001-05-27
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-02-01 18:05
   如果你愿意,可以跟我联系,我们互相讨论提高。lvgx@263.net
lvgx
simonru
驱动牛犊
驱动牛犊
  • 注册日期2002-01-18
  • 最后登录2006-03-22
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-01-31 13:58
是呀
怎么加分呀?
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-01-29 09:16
怎么加啊?我不会啊?站长葛格帮帮忙吧?
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
8楼#
发布于:2002-01-29 09:13
别忘了给帮助过你的兄弟加分呀!
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-01-29 09:02
我现在差不多搞通了,OUT1~OUT7的pipeNum是0-6,IN2~IN7的pipeNum是8-13,但IN1还是不通,而且我还是没在任何文档里面找到其定义,看来就是ezusb.sys里面自己定义了而忘了在文档里面说。
WOOD
驱动老牛
驱动老牛
  • 注册日期2001-09-14
  • 最后登录2008-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-01-28 23:32
好象在INIT里初始化IN?BC后,不知道在什么地方又被清掉了,换个地方试一下吧,关于PIPENUM的问题,你的代码我也测试了一下,没有问题
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-01-25 15:49
各位开发过ezusb的大哥,谁能告诉我ezusb.sys里面调用IOCTL_EZUSB_BULK_READ/WRITE时的BULK_TRANSFER_CONTROL.pipenum是怎么定义,在哪里定义的啊?叩!
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-01-25 14:29
我完全不知道ezusb.sys里面的pipenum是怎么定义的,其文档也没说,所以我就设了一个Endpoint号,后来发现pipenum是从0开始的,所以我就设成1以选择EP2,发现可以了。现在的问题是好像我的2131没有配置起来,我用usbcomp测的时候它说device not configurated,我想configuration不用应用程序来设吧,bulktest里面就没有设,我就不明白为什么我的2131没配置起来了。
Jore
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2002-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-01-25 14:17
btc.pipeNum = 2 是什么意思呢? 全速设置我的意思是BULK full-speed transfer. 我也刚起步。感觉全速的话(endpoint pairing一定要用的),pipenum应该小于7。
你可以令btc.pipeNum = 0或者1再试一下。
有结果告诉我一声。
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-01-25 10:26
回楼上的,我不懂啊,你说的全速设置是什么啊?在哪里设置啊?Anchor提供的Framework里面有设置速度的地方么?
Jore
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2002-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-01-25 01:38
BulkTest中的pipenum最大可达14,是不是和ENDPOINT PAIRING有关? BORDEN兄的固件是全速设置吗?
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-01-24 19:43
我不知道Pipe在哪里定义啊,所以根本就没有定义它。我查了Anchor的好多资料,还有ezusb.sys的文档,都没有提到pipe的事情啊?楼上的大哥能告诉我是怎么回事,怎么定义,或者哪里能找到相关资料么?叩。
csyoyo
驱动牛犊
驱动牛犊
  • 注册日期2001-05-19
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-01-24 19:32
也许是你的pipenum9或者12是ISO的传输方式吧
而你自己用的BULK的方式
Borden
驱动牛犊
驱动牛犊
  • 注册日期2001-07-10
  • 最后登录2009-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-01-24 10:28
不知道为什么,我将pipenum设成9或者12都会出来错误87(incorrect parameter),不知道bulktest为什么可以这样做?
WOOD
驱动老牛
驱动老牛
  • 注册日期2001-09-14
  • 最后登录2008-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-01-24 10:00
好象这句不太一样,CYPRESS提供的例子里读IN?POINT用的都是大于7的不知道是不是和这个有关系,
btc.pipeNum = 2;
上一页
游客

返回顶部