я могу получить 255 пакетов от VCP (виртуальный COM-порт)? - PullRequest
0 голосов
/ 18 февраля 2020

Мне известно значение по умолчанию для 'VIRTUAL_COM_PORT_DATA_SIZE 64' в usb_des c .h для библиотеки STM32. однако я хочу получить 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 

, пожалуйста, скажите мне, как изменить, чтобы отправить как 255 байт из USB-пакеты.

1 Ответ

2 голосов
/ 18 февраля 2020

Вы не можете сделать это таким образом. Размер пакета связан с конечной точкой USB, а для FS USB - всегда 64 байта. Мой совет: не изменяйте никакие дескрипторы , если вы действительно не знаете, что делаете (а это не так).

Как получать большие куски data:

  1. создать буфер
  2. при получении данных скопировать (добавить) в этот буфер
  3. проверить, получили ли вы все необходимые данные
  4. если нет go указать (2), иначе перейти к точке (5)
  5. Сделать что-то с данными (ваш большой пакет)
  6. Сбросить буфер и перейти к точке 2
...