flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1414回复:9

USB Device接收第一个命令请教

楼主#
更多 发布于:2003-05-20 13:49
我的USB Device固件,连接usb host后,在出现设备状态改变后,收到了USB host发来的第一个命令,可是我读出来的命令怎么是这样的:80 06 00 01 00 01 00 01(字节从低到高)
实际的应该是:80 06 00 01 00 00 40 00
请问这是什么问题引起的呢?
不过,在程序还是可以发送我的Device Descriptor(18字节)
然后USB Device收到一个EP0 TX命令
此时我没有收到host发回的ACK握手信号,也就是说我的寄存器中没有指示有这么一个信号存在,反而是FIFO_En(使能信号)
请问,收到EP0 TX是正常的吗?没有收到ACK信号,是发送数据出错了吧?

最新喜欢:

abei11abei11
我思,故我在
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-20 14:36
先查查软件,看读setup包时是不是出了问题,如果没问题就在查查硬件,看数据线是否正确

收到ep0tx是对的,这正是主机发回的ack信号引起的中断。
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-05-20 17:20
>>先查查软件,看读setup包时是不是出了问题,如果没问题就在查查硬件,看数据线是否正确

硬件没有问题,我也看了软件,好像也是没有问题的
我怀疑是不是哪个寄存器没有设置正确?
虽然接收命令的最后四个字节不正确,我还是能够发送Device Descriptor到host,这是为什么呢?

>>收到ep0tx是对的,这正是主机发回的ack信号引起的中断。

大哥您的意思是,在我发送了Device Descriptor之后
host立即发回一个ep0tx信号,也就是ACK信号?
那我在接到这个信号后该作什么样的处理?要向host发送一个什么信号?

现在我没有作任何动作,host从这之后就没有发送命令到USB Device了,我的设备进入“挂起”状态
按照协议,host应该再向我要configuration呀,为什么没有了呢?
我思,故我在
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-20 23:02
在EP0TX里应该发送一个空的数据包给主机,表示本次请求完成。

你用的是什么芯片,是D12吗?我现在有一块板子和你的现象一样,有一块是调好了的,我现在还没弄明白为什么同样的固件在不同的板子上会通不过。

我会关注你的问题,咱们共同解决吧。
hukai
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-21 10:47
第一个get_device_descriptor 收到以后 不需要回一个空数据包,其实
80 06 00 01 00 00 40 00 是一个试探性的包,你只管回答,不可以不回答,否则hw 认为有usb device , 但是上层的software 会认为没有 。
在你还没有回答完成的时候 , HOST会进入rest>10 ms, 这样你也需要进入reset.
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-05-21 14:15
我使用的不是D12芯片,是TI公司OMAP系列芯片,在进行USB的固件编程。
由于我在读完前两个字节时(16位的DATA寄存器),分离出了bmRequestType和bmRequest,变相的在第二次读取DATA前加入了延时,然读取wValue,到目前这4个字节的数据都是正确的;现在读取wValue后直接读取wIndex和wLength,没有延时,从而读取的数据和wValue的一样,我怀疑是不是在读DATA寄存器时没有加入延时导致我的最后4个字节读取不对?
我思,故我在
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-05-21 16:03
第一个命令我已经正确的得到了,果然是没有延时所致,真是ft
所以,你的那个问题也有可能是延时不够啊

我思,故我在
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-21 21:56
我的第一个命令刚开始得到的就是正确的,现在问题是发送给主机的数据主机好像不认,或者是根本就没发走,因此set address中断没有来,你得到set address中断了吗?
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-05-22 10:53
我还没有得到set address命令,在前面就出现了问题
第一个命令得到了,向host发送了device descriptor,已经正确的写入了芯片的寄存器中,然后我启动芯片发送;
此时我得到一个从host发回来的ep0tx中断,照您所说,这是一个ACK信号,可是我的相应寄存器的相应位没有置位,也就是我的STAT_FLG(状态标识寄存器)中的“ACK”位没有置位(我不知道错误出在了什么地方),然后再接到一个挂起中断,到此我的程序就不再往下执行了

再请问一下,怎么发送空包?
我思,故我在
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-22 12:28
你的设备描述符应该是一次发不完的吧(d12的ep0是16字节的吧),所以你在这个ack中断里应该接着发送剩余的2个字节数据,发送完了之后在发送空包,发送空包应该是有个控制寄存器管的吧,你再看看datasheet上的寄存器描述吧。
游客

返回顶部