bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1140回复:8

u盘开发,枚举到get config时停住了,请各位帮忙分析一下。

楼主#
更多 发布于:2004-04-12 11:01
   最近开发,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才对啊?是不是第一次的应答有问题。
还有我发送了第二次请求的应答后,系统就停在哪里不动了。
请大家帮忙分析一下原因,多谢。
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-12 11:25
肯定是你回送FF这个请求的长度不够,没有回送完,所以停在那里了。我遇到过同样的问题,好好找找吧,马上就OK了,呵呵

另:这次之所以要求FF个,是因为这次主机要的是所有的CONFIG DESC,包括INTERFACE\\ENDPOINT!
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-12 11:35
非常感谢leadphone对我的帮助。
老大,我想给分,可是不知道怎么给啊。

另外,我的描述符表包括interface/endpoint总共只有32个字节,所以我的第二次应答只发送了32个字节的数据,难道一定要发FF个数据?
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-12 11:40
ff只是因为主机不知道你的配置符有多长,所以他给了最大值
但是你只要回送你的长度就OK了,只要回送完了,主机会识别的
不用被FF迷惑。

另:怎么给分可以去看看帮助嘛 :D不过说实话,到现在我自己给别人加分都还加不利索
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-12 12:05
我已经发送了全部的设备配置描述符过去,感觉主机好像没有识别一样,真是奇怪一点反应都没有,我在接口配置表中设置的类位0x08,0x06,即为mass storage ,可是host一点变化都没有。我比较了一下我的描述表和用bushound抓的标准的u盘的包,描述表基本一样。
不知道是哪个地方出问题了。
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-12 12:42
你回送的数据在BUS HOUND里面可以看到,在BUS HOUND的DEVICE里选中你的设备即可。看你下回送的对不对。
如果主机的SET CONFIG发出来了,则代表CONF_DESC回送完毕了
后面要配合你的主机驱动了
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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-------------------------
bbiliu
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2005-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-12 15:42
问题已经解决了。
原来需要把device description 字段的idProduct字段的值改为标准的NSC分配的用于MASS STORAGE的值为0x04c0,我原来用的是下载的代码中的字段是用于HID设备的。
leadphone
驱动牛犊
驱动牛犊
  • 注册日期2002-11-28
  • 最后登录2008-09-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-12 16:06
问题已经解决了。
原来需要把device description 字段的idProduct字段的值改为标准的NSC分配的用于MASS STORAGE的值为0x04c0,我原来用的是下载的代码中的字段是用于HID设备的。
 

呵呵,你是用的那个9602的FW吧 ;)
游客

返回顶部