raulshao
驱动牛犊
驱动牛犊
  • 注册日期2006-06-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望49点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
阅读:2798回复:6

急! USB 枚举不成功 (收不到PC的空数据包)

楼主#
更多 发布于:2007-01-12 21:31
  1. PC setup过来 数据: "80 06 00 01 00 00 40 00" 这是请求Device Descriptor.
2. 给Host回复Descriptor: "12 01 10 01 00 00 00 08",  并收到Host的ack了
3.但是没有收到 host的Zero length 数据包, 过段时间 host重发Device Descriptor请求,会重复步骤 1-2 三次, PC显示"无法识别的设备"

请问各位大侠 有可能是什么问题,该如何解决. (用的NS9604 USB chip.)
raulshao
驱动牛犊
驱动牛犊
  • 注册日期2006-06-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望49点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-12 21:34
是设备端的驱动
500jun
驱动牛犊
驱动牛犊
  • 注册日期2006-05-17
  • 最后登录2008-10-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望34点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-14 17:02
因为你发的数据只有8个字节,是错误的数据包,对于Device Descriptor,设备需要回18个字节。你发这18个字节试试:“12 01 10 01 - ff 00 00 08  45 53 34 12 - 00 01 01 02 00 01”
xywss
驱动牛犊
驱动牛犊
  • 注册日期2005-12-12
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-15 09:22
楼上的朋友说得没错,可我曾经在WIND ME 的系统下也试过这样的问题:枚举的时候PC发给设备的第一条命令“80 06 00 01 00 00 40 00”时只给它8个数据,如果你给18个就枚举不成功,第一次给8个字节后PC会重新再发一次同样的命令,此时再给18个字节,整个枚举过程就能完成,不知道是系统问题还是使用的USB IC的不同的问题?


********************************************************************
                义隆  USB IC  

<1>低速 IC,传输速率1.5MBit/S
EM78M612: 16PIN,18PIN,20PIN,24PIN,带有A/D,EEPROM,PWM功能,有EP0和EP1两个端点。  
EM78M611: 20PIN,24PIN,40PIN,44PIN(QFP),A/D,EEPROM, PWM功能,有EP0,EP1,EP2三个端点。

<2>全速 IC:传输速率12MBit/S
EM78M680: 20PIN,24PIN,40PIN,40PIN(QFP),A/D,EEPROM, PWM功能,有5个端点。

主要应用于:
1: USB和并口/PS2的转换
2:  USB 密码锁/小U盘
3: USB无线激光鼠标笔发射/接收
4: USB 无线鼠标、键盘
5: 电脑多媒体软件遥控器/接收器
6: USB摇杆/玩具飞机模拟遥控器
7: USB SKYPE电话
8: USB网络彩灯
9: USB按摩器/计步器
10:USB网卡/USB声卡/USB喇叭
11: 运动器材与电脑通信设备
12:U盘,读卡器等数据速度传输要求比较快的产品

我司是台湾义隆单片机的一级代理商,集销售和开发于一体,我USB部门拥有多位经验丰富的USB硬件开发工程师和电脑端USB驱动,应用程序软件开发工程师。能根据客户不同产品的功能选用信价比最好的IC,并在短周期内完成客户的方案!

欢迎大家来电洽谈!
**********************************

深圳广硕电子  USB开发部

联系人:吴先生

TEL:0755-83762428

EMAIL:HLXYWSS@163.COM

ADDRESS:深圳市福田区华强北路赛格科技园4栋中12D
**********************************
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-15 09:54
似乎。。host只会发送ACK(已经表示收到了数据)
不会发送Zero length的数序包
谢谢。。
asdfning
驱动牛犊
驱动牛犊
  • 注册日期2006-09-21
  • 最后登录2007-01-19
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-16 19:50
先顶起,慢慢学习一下。
500jun
驱动牛犊
驱动牛犊
  • 注册日期2006-05-17
  • 最后登录2008-10-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望34点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-18 14:11
枚举的过程3步曲如下:
  1.pc->usb function:  SETUP packet(eg: get device  descriptor).
   2.pc->usb function: pc send IN packet, usb funciton back 18 bytes data.
   3.pc->usb function: pc send OUT packet, usb functio response zero length packet.
   所以,你的问题在于是否收到out packet. 解决方法是重点检查你的usb register中out包接收命令是否已经打开,或者是否将out数据准备好了,其工作方式依芯片不同而不同.
   至于楼上说到先发8个数据的目的, 是host为了得到这个数据包的大小(usb function数据包的第1个字节(比如0x12)), 一般host不对这个包进行结构分析.等到下一setup包,pc就会要求usb function传输指定字节(0x12)数据.
游客

返回顶部