阅读:1709回复:13
大家开发用sl811hs是遇到这样的问题了么
我用sl811hs和我自己做得从设备通信
我用的是cypress的程序,我感觉他们的程序是不是有点问题啊? 我的一次发送setup包,我的从设备可以收到。问题的关键在于 我第二次发in包的时候,老是出现timerout或者是stall。因为 descriptor18个字节,而我用的是d12做的从设备,端点0最多支持16个字节,问题的关键是不是在这里呢? 请教大家又没有遇到同样的问题的? 多谢先了。 我已经完成了d12的从设备 大家可以交流 swhit@hit.edu.cn |
|
沙发#
发布于:2004-05-24 18:35
我用sl811hs和我自己做得从设备通信 你发给我的email已经回了,不知道行不行。本来想这里也回一下,给你增点人气:)但懒得再弄了。 |
|
|
板凳#
发布于:2004-05-24 19:28
你发在那个信箱里了?
是swhit@hit.edu.cn么? 我怎么没有收到? 麻烦你再发一次好么? 多谢先了! |
|
地板#
发布于:2004-05-24 19:32
这个swhit.student@sina.com信箱
原件没保存:( 收到了吗? [编辑 - 5/24/04 by flyhye] |
|
|
地下室#
发布于:2004-05-24 19:43
哎!
真是倒霉! 这个信箱很久没用了 现在进不去了。 我刚刚更新完我的信信箱。 我还是十分的谢谢你。 |
|
5楼#
发布于:2004-05-24 19:45
看到了没?
|
|
|
6楼#
发布于:2004-05-24 19:48
你可以在给我发一次么?
我就是在第一次发送setup包 然后我的设备还收到了sl811hs发送的setup数据。 并且返回ack。 然后我在发送别的数据包 肯定是timerout! 有的时候也是stall。 拜托了! |
|
7楼#
发布于:2004-05-24 19:55
个人认为你的USB设备枚举过程不对,给你看一下我抓的usb setup起始包:
PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3 PID:DATA0 data:80 06 00 01 00 00 40 00 CRC16:94dd idle:5 PID:ACK idle:2e1a PID:IN ADDR:00 ENDP:00 CRC5:02 idle:3 PID:DATA1 data:12 01 10 01 00 00 00 08 CRC16:7711 idle:8 PID:ACK idle:2e16 PID:OUT ADDR:00 ENDP:00 CRC5:02 idle:3 PID:DATA1 data:CRC16:0000 idle:5 PID:ACK idle:2e5a PID:SETUP ADDR:00 ENDP:00 CRC5:02 idle:3 // 你应该到了这里就…… // 接下来应当设置地址 PID:DATA0 data:00 05 02 00 00 00 00 00 CRC16:16eb idle:5 PID:ACK idle:2e1a // d12响应,请看代码set_address()函数,发一空包响应 PID:IN ADDR:00 ENDP:00 CRC5:02 idle:3 PID:DATA1 data:CRC16:0000 idle:7 PID:ACK idle:2e57 // host接收到ACK后再向该地址发setup包 PID:SETUP ADDR:02 ENDP:00 CRC5:15 idle:3 PID:DATA0 data:80 06 00 01 00 00 12 00 CRC16:f4e0 idle:5 PID:ACK idle:2e1a PID:IN ADDR:02 ENDP:00 CRC5:15 idle:3 PID:DATA1 data:12 01 10 01 00 00 00 08 CRC16:7711 idle:8 PID:ACK idle:2e17 你的问题应该跟timeout和stall没什么关系,看看是不是我说的这个原因。 |
|
|
8楼#
发布于:2004-05-24 20:13
你说抓到的数据确实对的啊。好像cypress的程序就是这样的思想。你可以留下你的e-mail么?我给你说说我的仔细的情况。我自己做的device可以知道sl811hs发送的数据。开始的时候,我发送的数据是pid setup,80 06 00 01 00 00 18 00,然后我的device里面正好收到了这组数据。不知你有没有用过d12?d12只有在收到一组合法的数据的时候,才产生中断。我的device得到的数据确实是80 06 00 01 00 00 18 00,然后我的device就发送device_descriptor。这有18 byte。我的sl811hs在发送pid in ,这个时候,有时候可以返回ack,大多数的时候返回stall。然后我就读取缓冲区,发现第一个字节确实是0x18。不过接下来的数据好像是错的。然后再发送pid out空包,device就返回timerout错误。我又换了另一种命令方式,先发送set_address的setup包,00 05 02 00 00 00 00 00,我的device也受到了这组数据。可是当我的sl811hs在发送空包的时候,永远得到的是timerout。你用sl811hs的中断了么?
|
|
9楼#
发布于:2004-05-24 20:48
你说抓到的数据确实对的啊。好像cypress的程序就是这样的思想。你可以留下你的e-mail么?我给你说说我的仔细的情况。我自己做的device可以知道sl811hs发送的数据。开始的时候,我发送的数据是pid setup,80 06 00 01 00 00 18 00,然后我的device里面正好收到了这组数据。不知你有没有用过d12?d12只有在收到一组合法的数据的时候,才产生中断。我的device得到的数据确实是80 06 00 01 00 00 18 00,然后我的device就发送device_descriptor。这有18 byte。我的sl811hs在发送pid in ,这个时候,有时候可以返回ack,大多数的时候返回stall。然后我就读取缓冲区,发现第一个字节确实是0x18。不过接下来的数据好像是错的。然后再发送pid out空包,device就返回timerout错误。我又换了另一种命令方式,先发送set_address的setup包,00 05 02 00 00 00 00 00,我的device也受到了这组数据。可是当我的sl811hs在发送空包的时候,永远得到的是timerout。你用sl811hs的中断了么? 俺的email:happy_flyhye@hotmail.com 太晚了,要回去吃饭了,你把一些相关的东西发过来看看,咱们再好好商量商量 |
|
|
10楼#
发布于:2004-05-24 20:56
谢谢flyhye。
我可以参考一下你的init 和usbXfer的实现么? 多谢了。 我想我的问题肯定是处在这上面。 我用的cpu不是mcs51。 所以不知道该怎么用中断。 |
|
11楼#
发布于:2004-05-25 09:06
D12和811我都做过,没又碰到你这种问题,程序我也是用的CPRESS的,没什么问题。你是不是811初始化不对啊?
|
|
12楼#
发布于:2004-05-25 10:36
请教tao_qiang
你用sl811hs的时候,是怎么初始化的么? 可以说说么? 不胜感激! |
|
13楼#
发布于:2004-05-25 10:50
请教tao_qiang
d12把d+1.5k的电阻上拉,我选择的是d12和sl811直接相连。这样sl811hs在speed_detect的时候应该是高速设备了。sl811hs初始化 0x0f中写入0xae,0x05中写入0x08用来reset设备,0x05中写入0x00然后0x06,写入0x61 接入d12后,发现是高速设备 0x0f中写入0xae,0x0e中写入0xe0 0x05中写入0x05 0x03中写入0x50 0x00中写入0x01 这有问题么? 请教了 |
|