阅读:5538回复:28
D12得到get_descriptor后,下面得到的是stall pid,!!!??
D12得到get_descriptor后,下面得到的是stall pid!!!??
请问是为什么? 谢谢 |
|
最新喜欢:![]() |
沙发#
发布于:2004-08-16 15:08
我也遇见同样的问题。我在固件代码中设断点观察,发现只有reset或suspend中断,其他中断收不到。那位大虾帮忙分析分析?谢谢了。
|
|
板凳#
发布于:2004-08-16 16:35
我以前也遇到这样的问题,那是因为我的中断没有改好。周立功上是用外部中断0,而我是用中断1。所以对应中断设置要改。
我不清楚你是否也是这样的问题,希望能给你帮助。 |
|
地板#
发布于:2004-08-16 17:12
跟楼主碰到的问题一样,枚举通不过。我保存中断寄存器的值,总是0x80。不知道是不是硬件的缘故。
|
|
地下室#
发布于:2004-08-17 09:10
不是硬件就是固件的问题,建议好好查查.
楼主的建议你看看在GET DESCRIPTOR后,你的设备返回了什么,返回的 是否正确,用仿真器跟一下. |
|
|
5楼#
发布于:2004-08-17 10:33
谢谢各位的建议。
我用自检命令(0xFD),返回值是1010。 在重新连接后,收到的似乎都是挂起和复位中断(c0),没有其他中断。 我也想,是不是硬件连接有问题,请问谁有一个比较标准的电路图? 还有一个问题,在Get_Descriptor之前收到的东西,固件是不参与响应的,仅仅是D12自动回应的,是不是? 谢了 |
|
6楼#
发布于:2004-08-17 10:45
Device Phase Data Description Cmd.Phase.Ofs(rep)
------ ----- ------------------------ ---------------- ------------------ 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 1.1.0(2) 13.0 IN 01 01 01 00 .... 1.2.0 13.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 3.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 4.1.0 13.0 IN 03 01 00 00 .... 4.2.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 5.1.0(2) 13.0 IN 01 01 00 00 .... 5.2.0 13.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 7.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 8.1.0 13.0 IN 03 01 10 00 .... 8.2.0 13.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 9.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 10.1.0(2) 13.0 IN 03 01 00 00 .... 10.2.0 13.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 12.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 13.1.0 13.0 IN 03 01 10 00 .... 13.2.0 13.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 14.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 15.1.0 13.0 IN 03 01 00 00 .... 15.2.0 13.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 16.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 17.1.0 13.0 IN 03 01 10 00 .... 17.2.0 13.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 18.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 19.1.0 13.0 IN 00 01 03 00 .... 19.2.0 13.0 CTL 23 01 11 00 02 00 00 00 CLEAR FEATURE 20.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 21.1.0(2) 13.0 IN 00 01 01 00 .... 21.2.0 13.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 23.1.0 13.0 CTL 23 01 01 00 02 00 00 00 CLEAR FEATURE 24.1.0 13.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 25.1.0 13.0 IN 03 01 00 00 .... 25.2.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 26.1.0(3) 13.0 IN 01 01 01 00 .... 26.2.0 13.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 29.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 30.1.0 13.0 IN 01 01 00 00 .... 30.2.0 13.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 31.1.0 13.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 32.1.0 |
|
7楼#
发布于:2004-08-17 11:29
你检查到的好像只是对class(集线器)的操作。我的板子也是这样。在大多数情况下,我测的是:
Dev Phase Data Info Time Cmd.Phase.Ofs --- ----- ------------------------- ------------- ----- ------------------ 5 DI 02 . 0us 1.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 34us 2.1.0 5 DI 01 01 01 00 .... 35us 2.2.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 43us 3.1.0 5 DI 01 01 01 00 .... 18us 3.2.0 5 CTL 23 01 10 00 - 01 00 00 00 CLASS 44us 4.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 92us 5.1.0 5 DI 01 01 00 00 .... 18us 5.2.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 109ms 6.1.0 5 DI 01 01 00 00 .... 46us 6.2.0 5 CTL 23 03 04 00 - 01 00 00 00 CLASS 31us 7.1.0 5 DI 02 . 90ms 8.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 28us 9.1.0 5 DI 03 01 10 00 .... 31us 9.2.0 5 CTL 23 01 14 00 - 01 00 00 00 CLASS 10us 10.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 19ms 11.1.0 在极少数情况下,数据是这样的: 5 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 0us 1.1.0 5 DI 12 01 00 01 - 09 01 00 08 ........ 36us 1.2.0 5 CTL 80 06 00 02 - 00 00 ff 00 GET DESCRIPTR 33us 2.1.0 5 DI 09 02 19 00 - 01 23 00 40 .....#.@ 15us 2.2.0 5 CTL a0 06 00 00 - 00 00 47 00 CLASS 29us 3.1.0 5 DI 09 00 02 1b - 00 01 00 00 ........ 16us 3.2.0 5 CTL 80 00 00 00 - 00 00 02 00 GET STATUS 29us 4.1.0 5 DI 01 00 .. 18us 4.2.0 5 CTL 00 09 23 00 - 00 00 00 00 SET CONFIG 29us 5.1.0 5 CTL 23 03 08 00 - 01 00 00 00 CLASS 98us 6.1.0 5 CTL 23 03 08 00 - 02 00 00 00 CLASS 17ms 7.1.0 5 CTL 23 01 10 00 - 01 00 00 00 CLASS 21ms 8.1.0 5 CTL 23 01 10 00 - 02 00 00 00 CLASS 41us 9.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 1.1ms 10.1.0 5 DI 00 01 00 00 .... 35us 10.2.0 5 CTL a3 00 00 00 - 02 00 04 00 CLASS 31us 11.1.0 5 DI 00 01 00 00 .... 15us 11.2.0 5 CTL 80 00 00 00 - 00 00 02 00 GET STATUS 31sc 12.1.0 5 DI 01 00 .. 45us 12.2.0 5 DI 02 . 1.3hr 13.1.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 25us 14.1.0 5 DI 01 01 01 00 .... 33us 14.2.0 5 CTL a3 00 00 00 - 01 00 04 00 CLASS 12ms 15.1.0 5 DI 01 01 01 00 .... 37us 15.2.0 |
|
8楼#
发布于:2004-08-17 11:30
我现在还是搞不懂为什么会这样
|
|
9楼#
发布于:2004-08-17 16:13
呵呵.
你的BUSHOUND没有选中设备,也就不显示设备返回的信息. "13.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 14.1.0" 在这一段后你的设备应该收到GET DEVICE DESCRIPTOR命令,之后是 GET CONFIG DESCRIPTOR命令,(好象),你跟一下,或设个断点看看. 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 01 05 01 00 .... 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 01 05 01 00 .... 12 CTL 23 01 10 00 - 04 00 00 00 CLASS 12 CTL a3 00 00 00 - 01 00 04 00 CLASS 12 DI 00 05 00 00 .... 12 CTL a3 00 00 00 - 02 00 04 00 CLASS 12 DI 00 85 00 00 .... 12 CTL a3 00 00 00 - 03 00 04 00 CLASS 12 DI 00 05 00 00 .... 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 01 05 00 00 .... 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 01 05 00 00 .... 12 CTL 23 03 04 00 - 04 00 00 00 CLASS 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 10 00 .... 12 CTL 23 01 14 00 - 04 00 00 00 CLASS 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 00 00 .... 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 00 00 .... 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 00 00 .... 12 CTL 23 03 04 00 - 04 00 00 00 CLASS 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 10 00 .... 12 CTL 23 01 14 00 - 04 00 00 00 CLASS 12 CTL a3 00 00 00 - 04 00 04 00 CLASS 12 DI 03 05 00 00 .... 12 CTL 80 06 00 02 - 00 00 ff 00 GET DESCRIPTR 12 DI 09 02 2e 00 - 01 01 00 c0 ........ 32 09 04 00 - 00 04 00 00 2....... 00 00 07 05 - 81 03 40 00 ......@. 01 07 05 01 - 03 40 00 01 .....@.. 12 CTL a3 00 00 00 - 05 00 04 00 CLASS 12 DI 00 05 00 00 .... 12 CTL a3 00 00 00 - 06 00 04 00 CLASS 12 DI 00 05 00 00 .... 12 CTL 80 06 00 03 - 00 00 ff 00 GET DESCRIPTR 12 DI 04 03 09 04 .... 12 CTL 80 06 02 03 - 09 04 ff 00 GET DESCRIPTR 12 USTS 04 00 00 c0 pid stalled 12 CTL 80 06 00 03 - 00 00 ff 00 GET DESCRIPTR 12 DI 04 03 09 04 .... 12 CTL 80 06 02 03 - 09 04 ff 00 GET DESCRIPTR 12 USTS 04 00 00 c0 pid stalled 14 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 12 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 12 DI 12 01 00 02 - 00 00 00 40 .......@ cc 04 49 1b - 00 00 01 02 ..I..... 00 01 .. 14 DI 12 01 00 02 - 00 00 00 40 .......@ cc 04 49 1b - 00 00 01 02 ..I..... 00 01 .. 14 CTL 80 06 00 02 - 00 00 00 04 GET DESCRIPTR 12 CTL 80 06 00 02 - 00 00 00 04 GET DESCRIPTR 12 DI 09 02 2e 00 - 01 01 00 c0 ........ 32 09 04 00 - 00 04 00 00 2....... 00 00 07 05 - 81 03 40 00 ......@. 01 07 05 01 - 03 40 00 01 .....@.. 14 DI 09 02 2e 00 - 01 01 00 c0 ........ 32 09 04 00 - 00 04 00 00 2....... 00 00 07 05 - 81 03 40 00 ......@. 01 07 05 01 - 03 40 00 01 .....@.. 14 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 12 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG "在Get_Descriptor之前收到的东西,固件是不参与响应的,仅仅是D12自动回应的,是不是,"不是,如BUSRESET,你的固 件必须对他进行处理. [编辑 - 8/17/04 by metalwing] |
|
|
10楼#
发布于: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指教。 |
|
11楼#
发布于: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 。。 |
|
12楼#
发布于:2004-08-17 17:21
LikeDDK
感觉我是进不了Get_Descriptor,就是因为从中断寄存器中取出的值都是垃圾,这是为什么? 这有人说,用0xFD命令,自检得到1012,但我的是1010,有错? 是不是在开始re-connect后,不理会中断寄存器,直接调用Get_Descriptor()响应? 谢谢 |
|
13楼#
发布于: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] |
|
|
14楼#
发布于: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] |
|
15楼#
发布于:2004-08-18 05:21
likeDDK
硬件检查过了,没有什么。 单步运行1、soft connect;2、马上读中断寄存器,读出来的不是0xC1,而是0xc0, or 0x40, .. 我用的是PIC单片机,是不是这引起的?有谁有这方面的经验? 谢谢 |
|
16楼#
发布于:2004-08-18 09:14
to likddk
原来是这样子,不管了.你的数据没有发送出去,我建议你看看D12的发 送机制. TO JIMDUAN 0XC1,0XC0,0X40各表示的是什么中断?LIKEDDK的调试过程是很值得借 鉴的,你也可以照那样做,读完中断后读控制输出缓冲的N个字节,看读 出来是什么. |
|
|
17楼#
发布于:2004-08-18 09:18
插上设备主机会发get descriptor,bushound看不到可能是1、没选对设备 2、设备没有接收到数据。
|
|
18楼#
发布于:2004-08-18 09:38
谢了大家的帮助
有个问题,我做的板子在win2000和winXP下,用UsbHound读出的不一样。在2000下,起码能看到Get_descriptor,但XP下却看不到。怎么回事? |
|
19楼#
发布于:2004-08-19 08:23
感觉读写接口错了。。。
哪位高人有Non-DMA 模式的InPortB和OutPortB的例子? 转发一份到jimduan@msn.com. 万分感谢。。。 |
|
上一页
下一页