Usb 我可以从VCP(虚拟COM端口)获取255个数据包吗?

Usb 我可以从VCP(虚拟COM端口)获取255个数据包吗?,usb,stm32,descriptor,Usb,Stm32,Descriptor,我知道STM32库的usb_desc.h上“虚拟COM_端口_数据_大小64”的默认设置值。 但是,由于我们项目的长数据包,我希望一次获得255个字节。 所以我更改了下面的修改代码点,我无法获得正确的值,因为“USB缺陷问题” /****** usb_prop.c **********/ DEVICE_PROP Device_Property = { Virtual_Com_Port_init, Virtual_Com_Port_Reset, Virtual_Com_Port_Status_I

我知道STM32库的usb_desc.h上“虚拟COM_端口_数据_大小64”的默认设置值。 但是,由于我们项目的长数据包,我希望一次获得255个字节。 所以我更改了下面的修改代码点,我无法获得正确的值,因为“USB缺陷问题”

/****** 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

  • 你不能这样做。数据包的大小与USB端点相关,对于FS USB,数据包的大小始终为64字节。我的建议是:不要修改任何描述符,除非你真的知道自己在做什么(这里不是这样)

    如何接收较大的数据块:

  • 创建缓冲区
  • 当数据到达时,将其复制(追加)到该缓冲区
  • 检查您是否已收到所需的所有数据
  • 如果不转到第(2)点,否则转到第(5)点
  • 对数据(你的大数据包)做些什么
  • 重置缓冲区并转到点2

  • 没关系!我理解阿布沃问题的原因。这样我就可以得到64字节以下的。。。。(示例32bytes ok,65bytes NG)这是CDC类(或某些子类)的限制吗?因为虽然最大数据包大小是64,但USB传输可以由多个数据包组成。没关系!我理解阿布沃问题的原因。这样我就可以得到64字节以下的。。。。(示例32bytes ok,65bytes NG)这是CDC类(或某些子类)的限制吗?因为尽管最大数据包大小为64,但USB传输可以由多个数据包组成。