如何提高ch372A上传的速度?

使用ch372EVT\VC\BULK进行测试上传速度为 25.1 bytes/sec 我上传256个字节需要10多秒钟,如何提高速度呢?UploadImages/200881113489.rar

1:MCU的主频 2:发送数据处理数据的复杂程序,比如你收数据的过程很复杂 3:总线方式还是模拟I/O方式,总线比较快. 4:当然还和你的C代码有关系


在"有关CH372或CH375的USB通讯的问题解答"中的“*关于USB传输速度”部分提到"CH372/CH375实测传输速度最高为400K字节每秒(在10秒内连续测试的平均值),但是实际应用考虑到留些余量,考虑到应用程序在收发数据之外还要分析处理数据,通常应该按200K计算。"

我的程序上传速度也太慢了吧

我的下位机流程: 1)连续采集256字节数据,2)发送64字节,3)命令GET_STATUS获取中断状态,4)命令UNLOCK_USB释放当前USB缓冲区,5)返回第2步,并重复4次 上位机采用:ch372EVT\VC\BULK


1、我们测试速度的方式与你不同,以下位机处理方式为例:为了提高速度 (1)下传:单片机对下传的数据并不保存,直接丢弃 (2)上传:单片机没有从RAM中取数据,而是从寄存器中取 简言之,为了测试,下位机对数据作了简化处理,而你的程序中还需要采集数据,这也要耗许多时间。 2、另,还与下位机系统主频、接口方式等有关。


256个字节的话,获取GET_STATUS后中断状态应该是USB_INT_EP2_IN,在这样中断状态中先释放缓冲区然后在上传,一共4次就可以了 不知道你的MCU晶振多大的?程序贴出来看看


C8051F120单片机12M晶振,程序如下:UploadImages/20088111111574.txt

MOV DPTR,#0 MOV SFRPAGE,#0FH MOV USBDATALEN,#64 LCALL USB_WRDATADPTR NOP

MOV R0,#3 ;上传(3+1)*64个字节

LGETSTATUS:LCALL USB_GETSTATUS MOV A,30H cjne A,#0AH,LGETSTATUS

MOV 30h,#00 LCALL USB_UNLOCK ;释放缓冲区

nop MOV SFRPAGE,#0FH MOV USBDATALEN,#64 LCALL USB_WRDATADPTR NOP DJNZ R0,LGETSTATUS RET

USB_WRDATADPTR: NOP ;向USB写入数据DPTR MOV P7,#02BH ;USB写入命令码 LCALL USB_CMD

MOV P7,USBDATALEN ;要向端点2缓冲区写入的数据长度 LCALL USB_DATAIN ;从DPTR开始的数据向上位机传送 WRLPD:MOVX A,@DPTR MOV P7,A ;数据 LCALL USB_DATAIN INC DPTR DJNZ USBDATALEN,WRLPD RET

USB_GETSTATUS:nop MOV P7,#22H ;USB写入命令码 LCALL USB_CMD

LCALL USB_DATAOUT ;输出数据到30H RET

USB_UNLOCK:nop MOV P7,#23H ;USB写入命令码 LCALL USB_CMD RET

USB_CMD: NOP SETB USB_A CLR USB_CS CLR USB_WR CLR USB_CS SETB USB_WR SETB USB_CS CLR USB_A lcall delay lcall delay RET

USB_DATAIN: NOP CLR USB_A CLR USB_CS CLR USB_WR CLR USB_CS SETB USB_WR SETB USB_CS MOV P7,#0FFH lcall delay lcall delay RET

USB_DATAOUT:NOP mov P7MDOUT,#0h ;读数据 mov P7,#0ffh lcall delay CLR USB_A CLR USB_CS CLR USB_RD CLR USB_CS mov 30H,p7 ;数据存放到30h SETB USB_RD SETB USB_CS lcall delay lcall delay RET


您用的是模拟总线的方式进行读写的,速度比总线的肯定会慢的,可以的话改成总线方式速度会提升很多.


速度终于提高了,原来延时时间太长了。 非常感谢技术人员的支持!


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