阅读:4880回复:38
[请教] usb setup 包 问题
我使用 WinDriver 向mfp(多功能机 打印 扫描) 发送 setup 包。
可是每次都不成功。 可以读取描述符。 发送 0C 09 00 00 00 00 02 00 rror (0x80000004) - Unrecognized error code. Transferred 0 Bytes to Pipe00 2 x The device has been plugged into the system Stop listening to Pipe82 2 x The device has been plugged into the system Failed transferring 2 Bytes from Pipe00. Error (0x20000003) - Conflict between read and write operations. Transferred 0 Bytes from Pipe00 请指教,谢谢! |
|
沙发#
发布于:2003-12-05 14:37
错误原因好像是你的setup包的内容不对
你那个0C 09 00 00 00 00 02 00是set config命令吗? 那应该是00 09 吧。 |
|
板凳#
发布于:2003-12-05 14:52
大哥 谢谢了 是我写错了
你看一下这两个 帮我分析一下 Setup Data: C0 09 00 00 00 00 02 00 --------------------------------------- Direction: Device-to-host Type: Vendor Recipient: Device --------------------------------------- bRequest: 0x09 wValue: 0x0000 wIndex: 0x0000 wLength: 2 Setup Data: C0 0D 00 00 00 00 04 00 --------------------------------------- Direction: Device-to-host Type: Vendor Recipient: Device --------------------------------------- bRequest: 0x0D wValue: 0x0000 wIndex: 0x0000 wLength: 4 谢谢了 |
|
地板#
发布于:2003-12-05 15:18
你写清楚frist byte是00?c0?0c?区别很大的。0d我看不出来是什么,估计是厂商命令
|
|
地下室#
发布于:2003-12-05 18:42
确实是 0c
这个是我 拦截 程序发出的包 可是使用windriver 却发不出去 请你们帮帮我 谢谢了 |
|
5楼#
发布于:2003-12-06 09:12
0c 0d根本没有这个请求,你要是想法这个包出去,试试bushound 5.0
|
|
6楼#
发布于:2003-12-08 10:21
是 c0 0d 00 00 00 00 04 00
是厂商自己开发的命令吧 我使用 windriver 发不出去 bushound 没有Windriver 好使 问一下 厂商自己开发的 怎么 模仿呢 是不是有什么特别的呢 |
|
7楼#
发布于:2003-12-08 10:30
使用 WinDriver 发送 setup packet 的时候 出现下面的错误
c0 09 00 00 00 00 02 00 (这是发送的内容) error (0x20000003) - Conflict between read and write operations. [编辑 - 12/8/03 by flylionking] |
|
8楼#
发布于:2003-12-08 11:32
是 c0 0d 00 00 00 00 04 00 既然是厂商请求,除非你有源程,否则只能监测其通讯过程再去模仿咯。 |
|
9楼#
发布于:2003-12-08 12:47
它的 通信过程 我都抓到了
每一个包 我都找到了 可是不知道怎么模仿呢 |
|
10楼#
发布于:2003-12-08 13:31
c0 0d 00 00 00 00 04 00
确实是厂商请求,0d即为具体请求号,最后的(04 00)表示数据长度为4(实际组合为0004),厂商请求一般是从主控端点发出去的,具体的API函数可用DeviceIoControl,源代码的话你可以参考PHILIPS对D12的测试程序D12test.exe,这个程序的源码应该很容易找到。从你一开始的错误信息看,你发的SETUP包是从pipe00走的,而pipe00一般是指端点1而不是主控端点。其实厂商请求也是模仿的WINDOWS的枚举格式,你同WINDOWS本身发SETUP包仔细对照一下就可以发现连每个字节的具体含义都是一样的,比如最后两个字节表示数据长度(低位在前,高位在后)。希望对你有所帮助。 |
|
11楼#
发布于:2003-12-08 14:04
mailxufeng
谢谢你 WinDriver 是否能够做到呢? 不能的话,自己要写驱动吗? 分析截取的包 是长度为4 的 数据 可是却没有看到数据呢? 是否 C0 开头的 setup 包 都不能使用 pipe00 发送呢? [编辑 - 12/8/03 by flylionking] |
|
12楼#
发布于:2003-12-08 16:43
WinDriver能不能做到我不清楚,如果不能的话也不要改驱动啊,你可能对厂商请求这个概念不是很清楚,c0 0d 00 00 00 00 04 00
中的数据长度4是说明下一趟的传输数据的长度是4个字节,而一般厂商请求的话也是由主机发出,告诉下位机紧接下来的数据是从主机到设备还是从设备的主机,数据长度是多少等等,而这4个字节的数据怎么定义就无所谓了,只要跟下位机相配合就行了,而这4个字节也可以说是真正的具体请求(按你的情况,其他也有可能是6个,8个等等),一般是从端点1走的,而不是主控端点,而接下来的话才是真正数据传输,从设备到主机或者从主机到设备,如果你命令正确而下位机也有代码配合的话。至于c0 0d ,这是厂商自己定义的,也有可能40 0c或者其他什么的,简单的说只要你自己设计了一套命令,上位机和下位机都有程序配合的话那么一切都OK了,至于从哪个端点走都是无所谓的。只不过现在的厂商请求做成了WINDOWS标准SETUP包的形式从主控端点走罢了,谁让WINDOWS这么NB呢。好了,下面概括一下:c0即为某个厂商设定的厂商请求标志,0d即指向这个厂商设定的很多厂商请求中的一个(注:还只是个大类),04 00即为下一次具体命令的长度,而接下来由主机发送的4个字节的数据或者说是命令呢就是大类中的子类,即具体请求,比如我要下位机发送它的版本号或者某个端点缓冲区大小什么的,具体怎么定义要看你的东西了,我可不知道啊,呵呵,是不是很罗嗦,希望对你有所帮助哈。 |
|
13楼#
发布于:2003-12-09 07:55
mailxufeng
再次的感谢你。 请问主控端点 和 pipe00 有什么不同呢? WinDriver 里面 只有 pipe00, 没有主控端点,怎么才能够做到呢? 下面是我的截取数据的画面,请你看一下: 再感谢! |
|
14楼#
发布于:2003-12-09 10:11
从图上看,只能看出厂商请求确实是用SETUP包的形式发送的,比如
0xB4 3 0 0x0A..即为标准的SETUP包PID+地址+端点号+CRC校验,我想问一下你这个截取的数据是厂商提供的程序与USB设备通讯的数据吗,还是你自己通过WINDRIVER向USB设备发送的数据,因为从图上看,我发现SETUP包以后并没有包中指定长度的数据进行传输,比如第一个SETUP包中的2字节和后一个SETUP包中的4字节的数据,这个不符合通讯规则啊,假如是你自己发的数据,那么可以看出WINDRIVER是可以从主控端点发数据的(即端点0),而且也可以解释你为什么没有看到你需要的数据了,从你图上看,我所能解释的只有这么多。 |
|
15楼#
发布于:2003-12-09 10:25
谢谢
这是我截取的 厂商的程序发送的 数据包。 能否与你联系呢? 我的邮箱:stone.liu@liteon.com qq : 8509823 [编辑 - 12/9/03 by flylionking] |
|
16楼#
发布于:2003-12-09 10:38
那么按一般的常理的话,在31067和31068这两个包之间应该还有一个2字节的数据包或者31071包中的数据不应该为空,我没用过这个软件,你如果方便的话可以用BUSHOUND监测一下,看看c0 09 00 00 00 00 02 00后面紧跟的是什么数据,从你的图上实在看不出来,呵呵。
|
|
17楼#
发布于:2003-12-09 10:52
我使用的是 USB Chief, 公司买的,抓的数据应该没有什么问题吧?
BUSHOUND 我使用的时候总是看不到什么数据。 怎么样能联系到你呢? |
|
18楼#
发布于:2003-12-09 11:11
flylionking
:如何起步开发USB驱动 |
|
19楼#
发布于:2003-12-09 11:17
wushenghua
我也在学习当中。 多看一些书, 你要是会开发驱动,看看usb相关的东西。 |
|
上一页
下一页