目前的情况是,在数据量比较大时,回传的数据,就是IN数据,会偶尔出现丢包的情况。
传输代码如下,已经简单加入同步机制,抄的代码,不知道对不对。
u32 USBC_WritePacket(void *fifo, u32 cnt, void *buff)
{
u32 len = 0;
u32 i32 = 0;
u32 i8 = 0;
u8 *buf8 = 0;
u32 *buf32 = 0;
volatile int Timeout = 10000000;
while((USBC_Dev_IsWriteDataReady(USBC_EP_TYPE_TX))&&(--Timeout)); // wait for last write to clear
if (!Timeout)
{
rt_kprintf("*");
return 0;
}
//--<1>-- adjust data
buf32 = buff;
len = cnt;
i32 = len >> 2;
i8 = len & 0x03;
//--<2>-- deal with 4byte part
while (i32--)
{
USBC_Writel(*buf32++, fifo);
}
//--<3>-- deal with no 4byte part
buf8 = (u8 *)buf32;
while (i8--) {
USBC_Writeb(*buf8++, fifo);
}
return len;
}
另外测试代码
#elif (CDC_TEST_SEL == CDC_TEST_IN)
uint8_t test_buf[512];
uint16_t test_len = *((uint16_t *)pdat);
//rt_kprintf("test len: %d\n", test_len);
int i;
for(i=0; i<512; i++) test_buf[i] = (i&0xff);
while(test_len)
{
if (test_len > 512)
{
usb_device_write_data(1,test_buf,512);
test_len -= 512;
}
else
{
usb_device_write_data(1,test_buf,test_len);
test_len = 0;
}
}
#endif
离线