我可以从 VCP(虚拟 COM 端口)获得 255 个数据包吗?
can I get 255 packets from VCP (virtual COM Port)?
我知道 'VIRTUAL_COM_PORT_DATA_SIZE 64' 在 usb_desc.h 的 STM32 库的默认设置值。
但是,由于我们项目的数据包很长,我想一次获得255个字节。
所以我更改了以下修改代码点,我无法获得 'USB defect problem'.
的正确值
/****** usb_prop.c **********/
DEVICE_PROP Device_Property = {
Virtual_Com_Port_init,
Virtual_Com_Port_Reset,
Virtual_Com_Port_Status_In,
Virtual_Com_Port_Status_Out,
Virtual_Com_Port_Data_Setup,
Virtual_Com_Port_NoData_Setup,
Virtual_Com_Port_Get_Interface_Setting,
Virtual_Com_Port_GetDeviceDescriptor,
Virtual_Com_Port_GetConfigDescriptor,
Virtual_Com_Port_GetStringDescriptor,
0,
0xFF /*MAX PACKET SIZE*/ // default : 0x40
};
/****** usb_desc.c **********/
/* USB Standard Device Descriptor */
const uint8_t Virtual_Com_Port_DeviceDescriptor[] = {
0x12, /* bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00,
0x02, /* bcdUSB = 2.00 */
0x02, /* bDeviceClass: CDC */
0x00, /* bDeviceSubClass */
0x00, /* bDeviceProtocol */
0xFF, /* bMaxPacketSize0 */ // default : 0x40
0x83,
0x04, /* idVendor = 0x0483 */
0x40,
0x57, /* idProduct = 0x7540 */
0x00,
0x02, /* bcdDevice = 2.00 */
1, /* Index of string descriptor describing manufacturer */
2, /* Index of string descriptor describing product */
3, /* Index of string descriptor describing the device's serial number */
0x01 /* bNumConfigurations */ };
/****** usb_desc.h **********/
#define VIRTUAL_COM_PORT_DATA_SIZE 255 // 0xFF, default : 64
请告诉我如何修改以便从 USB 数据包发送 255 字节。
你不能这样做。数据包的大小与 USB 端点相关,对于 FS USB,它始终为 64 字节。我的建议是:不要修改任何描述符除非你真的知道你在做什么(这里不是这种情况)。
如何接收更大的数据块:
- 创建缓冲区
- 当数据到达时将其复制(附加)到该缓冲区
- 检查您是否收到了所有需要的数据
- 如果不去点 (2) 否则去点 (5)
- 对数据(你的大数据包)做点什么
- 重置缓冲区并转到点 2
我知道 'VIRTUAL_COM_PORT_DATA_SIZE 64' 在 usb_desc.h 的 STM32 库的默认设置值。 但是,由于我们项目的数据包很长,我想一次获得255个字节。 所以我更改了以下修改代码点,我无法获得 'USB defect problem'.
的正确值/****** usb_prop.c **********/
DEVICE_PROP Device_Property = {
Virtual_Com_Port_init,
Virtual_Com_Port_Reset,
Virtual_Com_Port_Status_In,
Virtual_Com_Port_Status_Out,
Virtual_Com_Port_Data_Setup,
Virtual_Com_Port_NoData_Setup,
Virtual_Com_Port_Get_Interface_Setting,
Virtual_Com_Port_GetDeviceDescriptor,
Virtual_Com_Port_GetConfigDescriptor,
Virtual_Com_Port_GetStringDescriptor,
0,
0xFF /*MAX PACKET SIZE*/ // default : 0x40
};
/****** usb_desc.c **********/
/* USB Standard Device Descriptor */
const uint8_t Virtual_Com_Port_DeviceDescriptor[] = {
0x12, /* bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */
0x00,
0x02, /* bcdUSB = 2.00 */
0x02, /* bDeviceClass: CDC */
0x00, /* bDeviceSubClass */
0x00, /* bDeviceProtocol */
0xFF, /* bMaxPacketSize0 */ // default : 0x40
0x83,
0x04, /* idVendor = 0x0483 */
0x40,
0x57, /* idProduct = 0x7540 */
0x00,
0x02, /* bcdDevice = 2.00 */
1, /* Index of string descriptor describing manufacturer */
2, /* Index of string descriptor describing product */
3, /* Index of string descriptor describing the device's serial number */
0x01 /* bNumConfigurations */ };
/****** usb_desc.h **********/
#define VIRTUAL_COM_PORT_DATA_SIZE 255 // 0xFF, default : 64
请告诉我如何修改以便从 USB 数据包发送 255 字节。
你不能这样做。数据包的大小与 USB 端点相关,对于 FS USB,它始终为 64 字节。我的建议是:不要修改任何描述符除非你真的知道你在做什么(这里不是这种情况)。
如何接收更大的数据块:
- 创建缓冲区
- 当数据到达时将其复制(附加)到该缓冲区
- 检查您是否收到了所有需要的数据
- 如果不去点 (2) 否则去点 (5)
- 对数据(你的大数据包)做点什么
- 重置缓冲区并转到点 2