CH563 高速与PC传输

各位大牛,公司有一个项目需要用USB实现与PC 上位机高速的数据交互,之前对USB没有怎么了解,各位大牛能不能给一个框架,比如CH563需要用那种模式才能满足高速的需要。最好是有一些例程参考一下。感谢

您好 如果您想实现CH563USB作为Device与PC通讯,相对简单的就是将563USB作为372设备进行传输,具体可以参考CH563EVT下USB-->Device-->CH372例程。

CH563EVT链接:http://www.wch.cn/downloads/CH563EVT_ZIP.html


感谢你的回复,想问一下用这个方式速度可以达到多少?是否可以接近480Mb


在一些实际应用中可以达到20MB/s以上。要注意提升USB传输速度,代码中不能对数据进行CPU的memcpy类操作,这个十分影响速度。规划好缓冲区,只修改DMA地址来实现速度的高速传输。


非常感谢您的回复,20MB已可满足我司的需求。你们有DMA向USB FIFO写数据和读数据的例程吗?

贵司有PC USB测试工具吗?比如我可以用该工具发送USB数据来验证下位机正常状态。


您好,上述的例程中,有使用DMA传输的函数代码(CH372)。相关测试工具,可以去下载CH372DBG:http://www.wch.cn/search?t=all&q=372dbg

这是一个对应的372设备简单测试工具。


非常感谢,我使用你们的CH375DLL库文件现在可以用端口2进行发送和接收数据,速度10MB/s,但达不到20MB/s,我现在准备配置端点1为IN,并使用fifo 0作为数据传输。然后测试是否可以接收到数据,但上位机接收不到数据。你们的CH375DLL库定义死了只能对端口2进行发送和接收吗?下面是我用配置,你看一下是否正确:

    USB_DEV_FIFO_CONFIG = 0x00222222;    /* R(0x1AC) */

    USB_DEV_EP1_4_MAP = 0x33332130;      /* R(0x1A0) FIFO0(ENDP1_IN)、FIFO1(ENDP2_IN)、FIFO2(ENDP2_OUT) */

    USB_DEV_FIFO_MAP = 0x0F021211;       /* R(0x1A8) */

    USB_DEV_EP1_IN_MAXPKS = 0x00000040;  /* R(0x160) EP1_IN_MAXPKS  = 8 bytes */

    USB_DEV_EP2_IN_MAXPKS = 0x00000040;  /* R(0x164) EP2_IN_MAXPKS  = 64 bytes */

    USB_DEV_EP2_OUT_MAXPKS = 0x00000040; /* R(0x184) EP2_OUT_MAXPKS = 64 bytes */

UINT8 My_HS_CfgDescr[] = {0x09, 0x02, 0x27, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32,

                          0x09, 0x04, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x37, 0x00,

                          0x07, 0x05, 0x82, 0x02, 0x00, 0x02, 0x00,

                          0x07, 0x05, 0x02, 0x02, 0x00, 0x02, 0x00,

                          0x07, 0x05, 0x81, 0x02, 0x00, 0x02, 0x00};

中断:

if (intstatus & RB_F0_IN_INT)

USBDev_WR_FIFOx(USB_DMA_ACC_F0, 512, buf_ENDP2_IN);

上位机:

CH375ReadData(0, mReadBuf, &read_len);收不到数据


您好,您可以看一下CH563的下位机程序,是否触发了端点1的IN中断。您也可以用BusHound(或其它USB抓包工具)抓包看一下,看一下主机是否正确下发IN包。


只有登录才能回复,可以选择微信账号登录