Windows下USB虚拟串口通讯有一定几率延迟数据
在使用MCU发送64 、128、 256字节的这种整包的数据时候(发送以后等待),
Windows在接收以后不会立即交给串口助手,会缓存起来,这个时候需要
在MCU端触发,比如发送一个空包或者一个字节的包,Windows才会把数据
给到串口助手,Mac下没这个问题,Windows下偶然发现的
send_bulk(buf, 64);
调小BULK_SIZE小于64不再出现,比如63
- void send_bulk(char* buf, u16 count)
- {
- uart_send("Bulk Send Start:");
- while (count > 0) {
- if (count>BULK_SIZE) {
- USB_BULK_SendData(buf, BULK_SIZE);
- buf += BULK_SIZE;
- count -= BULK_SIZE;
- } else {
- USB_BULK_SendData(buf, count);
- count=0;
- }
- }
- uart_send("Bulk Send End:");
- }
复制代码
- void USB_BULK_SendData(BYTE* dat, BYTE size)
- {
- uart_send("Send Start:");
- uart_send_char(size);
- while(UsbInBusy);
- IE2 &= ~0x80; //EUSB = 0;
- usb_write_reg(INDEX, 1);
- for (i=0; i< size; i++)
- {
- usb_write_reg(FIFO1, dat[i]);
- }
- UsbInBusy = 1;
- usb_write_reg(INCSR1, INIPRDY);
- IE2 |= 0x80; //EUSB = 1;
- uart_send("Send DONE");
- }
复制代码
使用USBTrace抓包与表象一致,下个包到以后,前一个包会和下一个包一起被处理, 似乎与确认回传机制有关
(UART是调试用的,打印数据正常,显示已经发送完毕了)
|