阅读:2077回复:11
是否可以设置Endpoint大小?
现有一个USB设备,我可以读出它的Enpoint Max Packet 大小为0x40是否可以通过某些函数把这个Endpoint 大小更改为 0x1000?
|
|
沙发#
发布于:2002-05-09 10:53
0X1000 (4096)??? ISO 的MAX PACKET SIZE 才1023
|
|
板凳#
发布于:2002-05-09 11:10
一个USB设备在做成以后,他的应许通信包的大小就已经定了,既是要改,也只能往小的改,比如64字节的可以改成32字节
|
|
|
地板#
发布于:2002-05-09 11:12
我也不是很清楚
我只想知道,是否Endpoint 大小是设备一出厂就给定了不能进行修改,还是在驱动程序里可以设定其大小? |
|
地下室#
发布于:2002-05-09 11:15
那就是说,我读出来maxPacketSize = 64是出厂时的设定,不能再往大的Size改了,对不对?
|
|
5楼#
发布于:2002-05-09 11:24
这里有段程序:
// Create the URB for the configuration request. pstUrb = USBD_CreateConfigurationRequestEx(pstConfigDescriptor, pstInterfaceList); if (NULL == pstUrb) { DBG_ERROR(gDbgInfo,(\"USBD_CreateConfigurationRequestEx failed pUrb=NULL\\n\",pstUrb)); DBG_RETURN(gDbgInfo,(long)(STATUS_INSUFFICIENT_RESOURCES)); return (STATUS_INSUFFICIENT_RESOURCES); } // // Initialize the Pipes for MaxTransfer size and // rest of the pipe information filled by USBD // for (i= 0; i< pstInterfaceList[0].Interface->NumberOfPipes; i++) { pstInterfaceList[0].Interface->Pipes.MaximumTransferSize = USB_DEVICE_MAX_BULK_TRANSFER_SIZE; } // Pass the configuration request to USBD NtStatus = UsbDevCallUSBD(pstUsbDev, pstUrb); 。。。。。。。。。。。。。。。。。。。。。。。。。。。 /*****************************************************/ 在这段程序中的 #define USB_DEVICE_MAX_BULK_TRANSFER_SIZE PAGE_SIZE 而我看了PAGE_SIZE 为 0x1000 通过用UsbDevCallUSBD()送到USBD上(重新写了IOCallDriver())。 难道这不是设置endpoint 大小为0x1000吗? 谁能解释一下? |
|
6楼#
发布于:2002-05-09 11:25
是的。
最大包大小是由硬件决定的。 |
|
|
7楼#
发布于:2002-05-09 11:29
那好象不是“最大包大小”,你用IOCallDriver()调用下层驱动程序,给它一个数据长度,它会把你需要的长度分成几批读/写。这是我的理解。不知道是否对。
|
|
|
8楼#
发布于:2002-05-09 11:39
usb1.0协议,规定bulk transfer为64,
usb2.0协议, 规定 bulk tranfer为512 详见usb 2.0 specification. chapter 5 page 52. 这是指的在一个td(transfer descriptor)(usb OHCI specification) 可传的数据。 当需要传更多数据时,可用多个td |
|
9楼#
发布于:2002-05-09 11:49
谢谢各位!
|
|
10楼#
发布于:2002-05-09 15:31
Enpoint Max Packet 是USB设备设定的,不是驱动程序能改变的吧?
|
|
11楼#
发布于:2002-05-09 22:36
bulk方式最大为64字节,ISOC方式为1023字节,但一般设备会有一些ALTERNATE SETTING供HOST端软件选择,看情况而定。
[编辑 - 5/10/02 by znsoft] |
|