阅读:1662回复:9
关于report descriptor 请问
我看到在 report descriptor 中, 一个 report 中可以既有 Input 又有 Output ,而在get_report request的时候, 还须指出是 Input 还是 Output. 感觉很不理解.
我觉得很可能是我有什么地方没有搞清楚, 请高手指点. 谢谢! |
|
沙发#
发布于:2004-07-16 09:46
非常感谢。这样我就明白了。分已经发出。 应该差不多,你可以找个例子代码看看。 |
|
板凳#
发布于:2004-07-16 09:34
非常感谢。这样我就明白了。分已经发出。
最后还有一点小问题,我用的是PIC16C745,是将USB处理内置了的,处理方式是否应该与您说的独立的外部USB芯片也是一样? |
|
地板#
发布于:2004-07-16 08:53
非常感谢,好象有点明白了。不过分包发送数据是怎样进行的呢?是自动的还是须编程序控制的?我觉得不是自动的。 对于主机程序,分包发送是底层驱动完成的,你不需要干预;对于固件程序,你需要根据主机的要求来完成,如果主机收到你发送的第一个8字节数据包,那么会回复一个ack握手信号给设备,这个握手信号会导致USB芯片产生一个中断给你的pic芯片,在这个中断里你发送第二个8字节数据包,一次类推知道完成传输。 USB芯片可以看成是PIC的一个外部设备,例如一个SRAM什么的,它提供了数据接口,你可以从USB芯片的寄存器中读出上位机传下来的数据,这也是通过中断实现的。一个中断读取一个包(或者不满一个包,根据具体情况定)的数据。 你发的第一个帖子下面有一排按钮,倒数第二个是给分的。 |
|
地下室#
发布于:2004-07-15 18:55
顺便问一下,我怎么才能给你分呢?
|
|
5楼#
发布于:2004-07-15 18:51
非常感谢,好象有点明白了。不过分包发送数据是怎样进行的呢?是自动的还是须编程序控制的?我觉得不是自动的。
每八个字节发一次,总得有个提交信号之类的操作;然后再发。 如果对于接收的数据呢?怎么接收呢?因为我知道PIC只能直接对内部的缓冲区操作,即缓冲区有数据可以读,可读过之后怎样继续读下一包呢? 非常幼稚的问题呀,不过没办法,不懂啊,请多帮助。 |
|
6楼#
发布于:2004-07-15 14:38
对于控制传输,有三个阶段:
1,Setup阶段,此时主机发送8个字节的Setup包,这8个字节显示了请求的内容,以及是否有数据阶段,如果有数据量的长度。 2,数据阶段:设备(也就是那个PIC芯片)收到阶段1的8字节数据后,如果没有数据阶段,直接进入3,如果有则发送相应的数据,如果是分包发送的,例如以8字节为一个包,如果主机要求23个字节,那么就发送两次8字节,1次7字节给主机。 3,握手阶段:设备给主机握手信号。 |
|
7楼#
发布于:2004-07-15 13:50
对了,我还有一个问题. 我在使用PIC16C745. 我看到它只支持8个字节的缓冲区, 我就还没想明白对于比较长的request,它是怎么相应的? 我相信, 这也和具体的芯片无关,也是理解上的问题。
请多指教啊。 |
|
8楼#
发布于:2004-07-15 13:37
抱歉没有说清楚, 我想问的其实就是怎么通过report和USB设备通讯.
但我在看HID协议的时候感到不太明白, 就写了出来了. |
|
9楼#
发布于:2004-07-15 13:03
我怎么没看明白你想问什么呢?
郁闷! :( |
|