CH374能连续下传4K的数据吗?

我在PC机端使用了函数CH375WriteData(ULONG iIndex,PVOID iBuffer,PULONG ioLength);其中ioLength=4096,每次下传4K的数据,在单片机端,当我使用CH372时,接受到数据后,会产生中断,每次包大小为64字节,读出一个64后,还会有下一个64包的中断,直到4K数据全部下传完 问题是:当我把372换成了374,PC机端也调用同样的函数,也是下传4K的数据,可是单片机端只收到一个64字节的包后,就没有中断了,请问是374不支持这样的处理吗?

当然支持了,这和你下位机程序有关,收到数据后要应答ACK,切换同步标志后,才可以的.接收到第一包数据后,然后:

Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG ); ,PC收到ACK后继续下传数据.


我这样又试了: PC先向下发送了一个小于64字节的包,下位机程序收到后应答ACK,即: Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG ); 然后再下传了一个大于64字节的包,下位机程序产生中断了,但只有一次,应该有两次才对吧? 如果让我自己把一个很大的包分成一个个64字节的小包再向下传,速度就会影响很大。


发送一次就产生一次中断,每次传输的数据包不能大于64,因为374的端点只有64.ioLength>64的时候,会分为64个字节一个包,进行传输. 为了验证问题,你用TEST程序进行测试,PC发送的数据,取反后上传给PC,下位机用CH374EVT.ZIP中的DEVICE.C就可以.如果PC没有接收到正确数据,说明下位机代码有问题. 同时你可以把你的下位机代码发送到tech@wch.cn邮箱,我们看一下


我就是想利用 “ioLength>64的时候,会分为64个字节一个包,进行传输 ”我理解这是你们PC机端的驱动分的包吧,这样比我自己分效率要高。 下位机我用的仿真器,与上位机对比可以看到下位机收到的数据是正确的,可不知为什么就只产生一次中断

哦,我发现在PC机端CH375WriteData执行后,返回的ioLength长度就是64!就是只成功下传了64个字节,查看下位机程序,把设置的断点换了个位置,PC机端返回的ioLength长度就正确了,应该是我的断点延误了时间,这好像是PC机端大于64字节的数据分成64字节下传也是有时间限制的吧?恩,我就按照这个思路向下调了,谢谢你!


确实是有时间限制,如果下位机时单步调试,那么很容易使上位机产生超时,从而只产生一次中断。 调试USB通讯,仿真器必须全速运行或者脱机运行。可以用串口监视程序运行,但串口波特率要高一些,且数据量不能过大,否则也会影响USB通讯 另, (1)下载CH372DBG.ZIP,用于调试您的下位机 (2)上位机可用3楼提供程序测试


恩,学习了!


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