阅读:1139回复:8
u盘开发,枚举到get config时停住了,请各位帮忙分析一下。
最近开发,u盘系统,文件系统已经做好,从一个实时操作系统下剥离出来的,支持FAT16,FAT32,可以fopen,fwrite, disk_format等几乎所有的文件操作。
目前堵在USB的驱动方面,在USBN9603的列举中,已经走到GET CONFIG description,命令如下: 80 06 00 02 00 00 09 00 (主机请求9个字节的config desc) 程序发送9个字节的应答config描述: 09 02 20 00 01 01 00 80 64 (我的程序的应答数据,20 表示我的 config desc 共有32个字节) 然后主机第二次发送GET CONFIG description请求: 80 06 00 02 00 00 FF 00 (FF表示请求的描述符的长度),在这步,我有一个疑问,按照前面我发送的应答来看,第二次请求GET CONFIG DESC的时候长度应该时20而不是FF才对啊?是不是第一次的应答有问题。 还有我发送了第二次请求的应答后,系统就停在哪里不动了。 请大家帮忙分析一下原因,多谢。 |
|
沙发#
发布于:2004-04-12 11:25
肯定是你回送FF这个请求的长度不够,没有回送完,所以停在那里了。我遇到过同样的问题,好好找找吧,马上就OK了,呵呵
另:这次之所以要求FF个,是因为这次主机要的是所有的CONFIG DESC,包括INTERFACE\\ENDPOINT! |
|
板凳#
发布于:2004-04-12 11:35
非常感谢leadphone对我的帮助。
老大,我想给分,可是不知道怎么给啊。 另外,我的描述符表包括interface/endpoint总共只有32个字节,所以我的第二次应答只发送了32个字节的数据,难道一定要发FF个数据? |
|
地板#
发布于:2004-04-12 11:40
ff只是因为主机不知道你的配置符有多长,所以他给了最大值
但是你只要回送你的长度就OK了,只要回送完了,主机会识别的 不用被FF迷惑。 另:怎么给分可以去看看帮助嘛 :D不过说实话,到现在我自己给别人加分都还加不利索 |
|
地下室#
发布于:2004-04-12 12:05
我已经发送了全部的设备配置描述符过去,感觉主机好像没有识别一样,真是奇怪一点反应都没有,我在接口配置表中设置的类位0x08,0x06,即为mass storage ,可是host一点变化都没有。我比较了一下我的描述表和用bushound抓的标准的u盘的包,描述表基本一样。
不知道是哪个地方出问题了。 |
|
5楼#
发布于:2004-04-12 12:42
你回送的数据在BUS HOUND里面可以看到,在BUS HOUND的DEVICE里选中你的设备即可。看你下回送的对不对。
如果主机的SET CONFIG发出来了,则代表CONF_DESC回送完毕了 后面要配合你的主机驱动了 |
|
6楼#
发布于:2004-04-12 13:55
leadphone!
我用bushound抓了一下usb的通信包,发现只看到第一次的get config desc的请求包,和我的应答包,但是第二次的get config desc没有抓到,但是我的程序中收到了这个请求。 我查看了了一下设备管理器中,看到增加了一个人体学(HID)设备,没有我要的mass storage device。看来我的第二次包host 没有收到。 一般的在设备管理器中显示哪个类的设备,要在第几步完成后才出现?是不是在第二步的get config desc后出现。 截取了一部分的打印信息,请帮我看看。 (1)第一次请求get config desc /---------------RX_FIFO0,setup request--------------------- the HEX COMMAND :80*06*00*02*00*00*09*00* /---------------------in standard req handler------------------ (2)第一次应答(9个字节) in config desc ACK HEX COMMAND :09*02*20*00*01*01*00*80* ************the tx toggle is 1 /----------------------In TX event------------------------- ACK HEX COMMAND :64* ************the tx toggle is 0 /----------------------In TX event------------------------- (3)第二次请求GET CONFIG DESC /---------------RX_FIFO0,setup request--------------------- the HEX COMMAND :80*06*00*02*00*00*FF*00* /---------------------in standard req handler------------------ (4)第二次请求应答 in config desc ACK HEX COMMAND :09*02*20*00*01*01*00*80* ************the tx toggle is 1 /----------------------In TX event------------------------- ACK HEX COMMAND :64*09*04*00*00*02*08*06* ************the tx toggle is 0 /----------------------In TX event------------------------- ACK HEX COMMAND :50*00*07*05*81*02*40*00* ************the tx toggle is 1 /----------------------In TX event------------------------- ACK HEX COMMAND :00*07*05*02*02*40*00*00* ************the tx toggle is 0 /----------------------In TX event------------------------- *******Send zero packet ************the tx toggle is 1 /----------------------In TX event------------------------- |
|
7楼#
发布于:2004-04-12 15:42
问题已经解决了。
原来需要把device description 字段的idProduct字段的值改为标准的NSC分配的用于MASS STORAGE的值为0x04c0,我原来用的是下载的代码中的字段是用于HID设备的。 |
|
8楼#
发布于:2004-04-12 16:06
问题已经解决了。 呵呵,你是用的那个9602的FW吧 ;) |
|