咨询,关于CH372的时序问题

各位高手你们好 : 我现在做了一块CH372的实验板,上层调试用的是贵公司提供的DEBUG工具,使用这个工具时,相邻两次的读写时间最小要多少?(我们要求是要很快,但是上层软件我不会,暂时用这个先调试),前端电路都没问题了,当实验板与计算机连接时能正常显示有CH372设备插入。 我按照贵公司提供的源程序编写的程序,用的查询方式检测CH372中断,可是我在连续发送时(从PC向MCU发送)老是出现问题,第一次一般都成功,第二次就检测不到CH372中断然后DEBUG工具的下传按钮就变成灰色的了。 请高手们指点下,不胜感激!!! [Emot]6[/Emot] [Emot]2[/Emot]

上位机成功下传数据之后,单片机要发CMD_RD_USB_DATA,然后依次把数据读取出来,或者要发送解锁命令.


相邻两次的读写时间没有限制,你写的再快也是在等待CH372返回ACK后,否则底层是在重试的. 产生这个问题是下位机没有处理好! 你监视一下你的代码是否把所有的数据都读出来了,数据不能读少,先读长度,根据长度依次把数据读出.


我是用CMD_RD_USB_DATA指令读的PC发送的数据,数据是否全部读出这个我去观察下。 不过昨天我做实验时,在MCU程序中不断等待来自PC下传的数据, loop: call scan_int call delay ljmp loop 其中scan-int程序是扫描CH372的中断引脚是否产生下传中断的程序,若产生中断则读出数据,若没中断(或中断不是02H,批量传送中断)返回,其中不加delay延时程序就发生上述现象,而加上延时就OK了,而且delay时间过小也不行,实在不解?


那你测试一下,每次进中断之后,发送读取中断状态的命令后,中断状态有没有取消掉,获取到数据后,你有没有再上传数据?可以把你中断处理函数发过来看看.


我用的是PHILIPS的一款80C51单片机,他的操作数是寄存器R0-R6,以下为我编写的程序,其中R6固定为写CH372命令端口地址,R5为CH372的数据读写控制端口地址(此处我只考虑批量接收,别的先不管,主函数中就不断调用这个函数): ;******************************************************************* ;接收中断 ;******************************************************************* recevie: mov.w r4,#000eh mov.w r0,[r4] jb r0.0,recevie_ret ;此处是我们设计的判断是否有CH372中断产生 mov.w [r6],#22h ;#CMD_GET_STATUS命令 nop nop nop nop nop nop mov.w r0,[r5] ;读回状态判断是什么中断 nop nop nop nop nop

cjne.b r0l,#02h,ch372_int_ret ;USB_EP2_OUT jmp ch372_down_ok

;******************************************************************** ;ch372批量接收程序: ;******************************************************************** ch372_down_ok: mov.b r0h,#00h mov.w [r6],#28h ;#CMD_RD_USB_DATA命令 nop nop nop nop nop mov.w r0,[r5] nop nop nop nop cmp.b r0l,#00h beq ch372_int_ret

ch372_down_1: mov.w r1,[r5] mov.b [r3+],r1l djnz.b r0l,ch372_down_1 ch372_int_ret: ret


监测一下第一次下传的数据长度是否正确,第二次下传检测不到CH372中断时,检测CH372的中断脚的电平


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