您尚未登录。

楼主 #1 2020-09-18 21:06:45

david
会员
注册时间: 2018-03-05
已发帖子: 357
积分: 297.5

F1C100S裸奔USB的数据回传问题

目前的情况是,在数据量比较大时,回传的数据,就是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

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn