jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:5540回复:28

D12得到get_descriptor后,下面得到的是stall pid,!!!??

楼主#
更多 发布于:2004-08-16 14:58
D12得到get_descriptor后,下面得到的是stall pid!!!??

请问是为什么?

谢谢

最新喜欢:

lhaihlhaih
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-24 05:12
找到我的第一个错误了,其实是编译器的毛病,我改成汇编后,成功通过。。。。
leafage
驱动牛犊
驱动牛犊
  • 注册日期2004-06-07
  • 最后登录2010-03-04
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-23 18:19
D12成本不高,作USB1.1不错的阿
egrias
驱动牛犊
驱动牛犊
  • 注册日期2004-06-23
  • 最后登录2009-02-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-23 17:03
有谁解决掉这个问题了吗?
我现在的硬件,读取chip id的时候能够正确返回0x1210;soft connect以后clock out是12M,应该说对d12的操作是正常的。但是使用bus hound看,主机GET DESCRIPTOR时就没有得到回应,我在isr中保存中断寄存器的值,前面的是0x40,最后是0x80,没有端点0的中断信号,下位机当然不会回应。我的PCB中,D+、D-分别有1M的上拉和下拉,然后经过18欧姆的电阻接到d12的D+、D-。该不会是线拉长的点信号不好吧?
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-20 13:08
我放弃使用D12了,找到一个更好的方案。
www.ftdichip.com
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-20 11:03
关于clementzhao说的,设备没有接收到数据。会是什么原因呢。应该怎么解决。



lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-20 10:41
我以前一插上设备,主机就会送get descriptor,可是现在,只有一堆class,  device里面只有root hub可以选。怎么回事呢。急!!
谢谢!
qiuhua
驱动牛犊
驱动牛犊
  • 注册日期2004-04-19
  • 最后登录2007-11-20
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-19 15:14
to likeddk


我都快被炒鱿鱼了。

你觉得你的硬件有问题吗?

我觉得硬件设计可能出现阻抗不匹配的情况,由于我仅仅是做固件的,不能说程序调不出来就是硬件的问题,但我始终有这样的猜测。因为我们的程序都是样板程序,有很多人用过,应该没问题的。

我芯片是菲利普的764


LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-19 13:19
To LikeDDK;

我觉得你板子的问题和我一样。总是有get descriptor 命令过来,我的程序也进入中断读过。并且转到chap-9程序中执行get-decriptor的程序,发送相关的描述符。可奇怪的是,我用示波器检查,只发现主机给我的信号,却没有d12往主机回的数据。


相同问题,望多交流!那你解决了吗?我已经好几天没有进展了。说说我的操作:接收到Get Descriptor之后,1、ACK EP0;ACK EP1;2、写EP1缓冲16Bytes;3、向EP1发0xFA,使能EP1。我觉得,如果成功的话应该可以收到一个EP1发送成功的中断,以便发送剩余的描述符,但是此中断没有到达。

[编辑 -  8/19/04 by  LikeDDK]
qiuhua
驱动牛犊
驱动牛犊
  • 注册日期2004-04-19
  • 最后登录2007-11-20
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-19 09:43
to jimduan
你的情况我觉得会是硬件连接的问题。因为我soft connect之后完全没有做任何动作,就可以轻易收到get descriptor。我的硬件连接是DMACK_N、EOT_N接Vcc,SUSPEND接GND,D+、D-和ZLG的板子接得是一样的,D12_INT有10K上拉。注意D12_INT是open drain,必须上拉。其他没有什么特别。建议检查D12_INT脚。还有,我测试的时候这样做:先关掉任何中断,单片机初始化之后,单步运行1、soft connect;2、马上读中断寄存器,读出来的是0xC1;3、连续读控制输出缓冲的N个字节,读出来的就是C0 08 80 06 00 01 00 00 40 00。我建议,你看看按照这样做能不能成功。

to metalwing
我肯定数据没有被发送出去,正在找原因。还有,对于D12来说,总线复位的确可以不作任何处理,读中断寄存器之后返回就可以了。soft connect不会改变,读中断寄存器后INT会自动变高。


[编辑 -  8/17/04 by  LikeDDK]



To LikeDDK;

我觉得你板子的问题和我一样。总是有get descriptor 命令过来,我的程序也进入中断读过。并且转到chap-9程序中执行get-decriptor的程序,发送相关的描述符。可奇怪的是,我用示波器检查,只发现主机给我的信号,却没有d12往主机回的数据。
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-19 08:23
感觉读写接口错了。。。

哪位高人有Non-DMA 模式的InPortB和OutPortB的例子? 转发一份到jimduan@msn.com.

万分感谢。。。
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-18 09:38
谢了大家的帮助

有个问题,我做的板子在win2000和winXP下,用UsbHound读出的不一样。在2000下,起码能看到Get_descriptor,但XP下却看不到。怎么回事?

clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-18 09:18
插上设备主机会发get descriptor,bushound看不到可能是1、没选对设备 2、设备没有接收到数据。
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-18 09:14
to likddk
原来是这样子,不管了.你的数据没有发送出去,我建议你看看D12的发
送机制.
TO JIMDUAN
0XC1,0XC0,0X40各表示的是什么中断?LIKEDDK的调试过程是很值得借
鉴的,你也可以照那样做,读完中断后读控制输出缓冲的N个字节,看读
出来是什么.
新手上路,请多关照.
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-18 05:21
likeDDK
硬件检查过了,没有什么。

单步运行1、soft connect;2、马上读中断寄存器,读出来的不是0xC1,而是0xc0, or 0x40, ..

我用的是PIC单片机,是不是这引起的?有谁有这方面的经验?

谢谢
LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-17 23:32
to jimduan
你的情况我觉得会是硬件连接的问题。因为我soft connect之后完全没有做任何动作,就可以轻易收到get descriptor。我的硬件连接是DMACK_N、EOT_N接Vcc,SUSPEND接GND,D+、D-和ZLG的板子接得是一样的,D12_INT有10K上拉。注意D12_INT是open drain,必须上拉。其他没有什么特别。建议检查D12_INT脚。还有,我测试的时候这样做:先关掉任何中断,单片机初始化之后,单步运行1、soft connect;2、马上读中断寄存器,读出来的是0xC1;3、连续读控制输出缓冲的N个字节,读出来的就是C0 08 80 06 00 01 00 00 40 00。我建议,你看看按照这样做能不能成功。

to metalwing
我肯定数据没有被发送出去,正在找原因。还有,对于D12来说,总线复位的确可以不作任何处理,读中断寄存器之后返回就可以了。soft connect不会改变,读中断寄存器后INT会自动变高。


[编辑 -  8/17/04 by  LikeDDK]
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-17 17:27
我用的不是D12,所以对D12的内部不太熟悉,在此仅以我用的芯片(ISP 1581)作例子.
在收到GET DESCRIPTOR后,我建议你设断点看看是否是收到该命令,
确认收到后,跟踪他,看是否进入了GET DESCRIPTOR处理命令,如没进
入,那你就要看看你的固件程序,为什么不进去?
"接受到Get Descriptor后,我写数据到控制输入,然后发命令FA,
但是bushound没有看到我发的数据,固件也没有收到数据发送成功的
中断。",你最好确认一下你的数据是否发送了.从现象上看,你的数据
没有被发送.ISP 1581发送数据有两种方式:
1.将要发送的数据的长度写入相应端点的LENGTH BUFF,然后向端点的
 BUFF写数据,当写入的数据达到LENGTH BUFF内的数时,BUFF有效,并
 在下一个IN令牌被送走.
2.直接向相应端点的BUFF写数据,当写完后,将1581的某一个寄存器的
 某一位置位,使BUFF有效,并在下一个IN令牌被送走.
 我不知道D12对于传输数据的过程是怎样的,你可以参考下上面的文
 字,看看有没有别的方法发送数据,或看看你发送数据的方式有什么
 不对的.
"在soft connect之后,读控制输出的缓冲区,收到的就是Get
Descriptor。之前也有DX告诉我,D12收到的第一个包就是Get
Descriptor。",不错,接收的第一个包是GET DESCRIPTOR,但你的第一
个中断决不是SETUP中断,而是BUSRESET中断.难道说你在收到总线复
位中断后不作任何的处理吗?
另:1581在BUSRESET后,SOFTCONNECT不改变,你也不用管他(不置位,也
不清零),我不知道D12在这方面是怎么样的.



[编辑 -  8/17/04 by  metalwing]
新手上路,请多关照.
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-08-17 17:21
LikeDDK
感觉我是进不了Get_Descriptor,就是因为从中断寄存器中取出的值都是垃圾,这是为什么?

这有人说,用0xFD命令,自检得到1012,但我的是1010,有错?

是不是在开始re-connect后,不理会中断寄存器,直接调用Get_Descriptor()响应?


谢谢
jimduan
驱动牛犊
驱动牛犊
  • 注册日期2004-05-05
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-08-17 16:57
我感觉主机(win XP)没发Get_Desriptor,用USBHound也看不到。. 后来换到win2000,就能在USBHound看到Get_desriptor,但它的下一行,都是些stall pid,no response, cancel之类的;跟踪时也是进不了Get_Descriptor响应函数,读出的中断值是80,40或c0。

有人有主意吗?

谢谢, metalwing 。。
LikeDDK
驱动牛犊
驱动牛犊
  • 注册日期2001-09-30
  • 最后登录2004-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-17 16:51
我也在玩D12,在soft connect之后,读控制输出的缓冲区,收到的就是Get Descriptor。之前也有DX告诉我,D12收到的第一个包就是Get Descriptor。所以我坚信,Get Descriptor之前的应该完全不用理会。补充一下,D12控制输出缓冲区的格式是这样的:
字节1 保留可为任意值
字节2 数据字节的数目/长度
字节3 数据字节1
字节4 数据字节2
即是,从字节3开始才是Get Descriptor。
我的第一个包数据是C0 08 80 06 00 01 00 00 40 00

但是,我还未能成功响应Get Descriptor。接受到Get Descriptor后,我写数据到控制输入,然后发命令FA,但是bushound没有看到我发的数据,固件也没有收到数据发送成功的中断。还望DX指教。
上一页
游客

返回顶部