阅读:1863回复:11
关于端点描述符的一个问题????
我用CY7C63743芯片,除了端点0外还有两个端点,我打算把端点1设成中断输入,端点2设成中断输出。那么在写端点描述符时,就需要写两个端点描述符,请问其格式有什么特定的要求吗?因为我参考的资料都是一个端点描述符的,所以不清楚写两个端点描述符的格式,请高手们指点一二,本人不盛感激!!!!!!!!!!!!!!!!
|
|
|
沙发#
发布于:2004-06-24 17:59
终于有所明白了,看来我该在驱动程序上多下点工夫了,非常感谢楼上的这位高手,可惜没分了,不然一定多给点,谢谢啦!!!!
|
|
|
板凳#
发布于:2004-06-24 13:38
这个理解不对,驱动程序会跟据端点描述符建立管道列表,例如前面的0x81和0x01分别对应两个管道,如果固件中描述符定义中的顺序是0x81在前,那么他在管道列表里对应的就是Pipe[0],后一个对应的是Pipe[1]。
如果驱动程序可以自动分辨是In还是Out,那么应用程序里可以都用端点1,只需要指定是读还是写就行了,如果驱动程序里不能自动分辨,那你只好自己想办法了。 如果你不了解的驱动,那么这个问题恐怕有点难理解,可是我的表达能力有限,只能说到这里。 |
|
地板#
发布于:2004-06-23 18:01
那就是说,只要在固件的端点描述符中分别定义同一个端点的输入和输出功能,在用端点进行数据传输的时候,就可以用同一个端点进行输入和输出了?????这样理解对吗???我感到真不可思义,为什么我看的书中《USB2.0硬件设计》中,一再强调“在输出时,如果没有中断输出端点,只有中断输入端点时,就只能利用端点0的控制传输的SET REPORT类要求来实现输出的功能,除非再多一个端点”就象CYPRESS公司的CY7C63743有三个端点,端点1和2可分别设为中断输入和中断输出来传输数据,对了忘说了,我的设备是HID设备,再请高手门为我解释解释吧?????????????????????????????
|
|
|
地下室#
发布于:2004-06-23 15:45
其中的第3行
一个端点为 0x81, 另一个端点是 0x1, 入出就是这个字节的最高位来决定的 |
|
|
5楼#
发布于:2004-06-23 12:19
从pc来看,端点是一对对,如bulk端点,但是包含两个一进一出;
从firmware这看,端点是一个个的,如端点1、端点2、端点3等,但每个端点干什么用就看firmware自己定义了。 明白了吗? 还是有点不太明白,既然是两个端点,那么在定义时就应该是分别对端点1和端点2的定义,可我看上面的程序中都是对EP1定义的啊,我没用C写过固件,不是很了解,还请大家多指教.另外我用的CY7C63743中的端点1和2难到也能象上述的程序中一样分别定义两个方向???????????????????????? |
|
|
6楼#
发布于:2004-06-23 11:51
还是有点不太明白,既然是两个端点,那么在定义时就应该是分别对端点1和端点2的定义,可我看上面的程序中都是对EP1定义的啊,我没用C写过固件,不是很了解,还请大家多指教.另外我用的CY7C63743中的端点1和2难到也能象上述的程序中一样分别定义两个方向????????????????????????
|
|
|
7楼#
发布于:2004-06-23 07:34
每个端点在定义时只能定义为一个方向传输,不能既输出又输入,你理解没错,他定义的是两个端点,这两个端点的性质一样,只是一个入、一个出而已:)[/quote] 就象足球比赛中球衣号码一样,但是一个是红队,一个是蓝队!!! |
|
|
8楼#
发布于:2004-06-22 19:33
每个端点在定义时只能定义为一个方向传输,不能既输出又输入,你理解没错,他定义的是两个端点,这两个端点的性质一样,只是一个入、一个出而已:)
谢谢乐!另外楼上的这位高手,我还想问一个问题,我在资料中看到,除端点0外的每个端点可以输出,也可以输入,但每个端点在定义时只能定义为一个方向传输,不能既输出又输入,为什么你将同一个端点定义了两个方向呢,是不是和芯片的具体情况有关,还是我理解错误了 |
|
|
9楼#
发布于:2004-06-22 17:50
谢谢乐!另外楼上的这位高手,我还想问一个问题,我在资料中看到,除端点0外的每个端点可以输出,也可以输入,但每个端点在定义时只能定义为一个方向传输,不能既输出又输入,为什么你将同一个端点定义了两个方向呢,是不是和芯片的具体情况有关,还是我理解错误了
[编辑 - 6/22/04 by sunxiaozhlin] |
|
|
10楼#
发布于:2004-06-22 14:04
code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), USB_ENDPOINT_DESCRIPTOR_TYPE, 0x81, USB_ENDPOINT_TYPE_INTERRUPT, SWAP(EP1_PACKET_SIZE), 10 }; code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), USB_ENDPOINT_DESCRIPTOR_TYPE, 0x1, USB_ENDPOINT_TYPE_INTERRUPT, SWAP(EP1_PACKET_SIZE), 10 }; |
|
|
11楼#
发布于:2004-06-22 13:55
用户被禁言,该主题自动屏蔽! |
|