使用ch372EVT\VC\BULK進(jìn)行測(cè)試上傳速度為 25.1 bytes/sec 我上傳256個(gè)字節(jié)需要10多秒鐘,如何提高速度呢?UploadImages/200881113489.rar
1:MCU的主頻 2:發(fā)送數(shù)據(jù)處理數(shù)據(jù)的復(fù)雜程序,比如你收數(shù)據(jù)的過程很復(fù)雜 3:總線方式還是模擬I/O方式,總線比較快. 4:當(dāng)然還和你的C代碼有關(guān)系
在"有關(guān)CH372或CH375的USB通訊的問題解答"中的“*關(guān)于USB傳輸速度”部分提到"CH372/CH375實(shí)測(cè)傳輸速度最高為400K字節(jié)每秒(在10秒內(nèi)連續(xù)測(cè)試的平均值),但是實(shí)際應(yīng)用考慮到留些余量,考慮到應(yīng)用程序在收發(fā)數(shù)據(jù)之外還要分析處理數(shù)據(jù),通常應(yīng)該按200K計(jì)算。"
我的程序上傳速度也太慢了吧
我的下位機(jī)流程: 1)連續(xù)采集256字節(jié)數(shù)據(jù),2)發(fā)送64字節(jié),3)命令GET_STATUS獲取中斷狀態(tài),4)命令UNLOCK_USB釋放當(dāng)前USB緩沖區(qū),5)返回第2步,并重復(fù)4次 上位機(jī)采用:ch372EVT\VC\BULK
1、我們測(cè)試速度的方式與你不同,以下位機(jī)處理方式為例:為了提高速度 (1)下傳:?jiǎn)纹瑱C(jī)對(duì)下傳的數(shù)據(jù)并不保存,直接丟棄 (2)上傳:?jiǎn)纹瑱C(jī)沒有從RAM中取數(shù)據(jù),而是從寄存器中取 簡(jiǎn)言之,為了測(cè)試,下位機(jī)對(duì)數(shù)據(jù)作了簡(jiǎn)化處理,而你的程序中還需要采集數(shù)據(jù),這也要耗許多時(shí)間。 2、另,還與下位機(jī)系統(tǒng)主頻、接口方式等有關(guān)。
256個(gè)字節(jié)的話,獲取GET_STATUS后中斷狀態(tài)應(yīng)該是USB_INT_EP2_IN,在這樣中斷狀態(tài)中先釋放緩沖區(qū)然后在上傳,一共4次就可以了 不知道你的MCU晶振多大的?程序貼出來看看
C8051F120單片機(jī)12M晶振,程序如下:UploadImages/20088111111574.txt
MOV DPTR,#0 MOV SFRPAGE,#0FH MOV USBDATALEN,#64 LCALL USB_WRDATADPTR NOP
MOV R0,#3 ;上傳(3+1)*64個(gè)字節(jié)
LGETSTATUS:LCALL USB_GETSTATUS MOV A,30H cjne A,#0AH,LGETSTATUS
MOV 30h,#00 LCALL USB_UNLOCK ;釋放緩沖區(qū)
nop MOV SFRPAGE,#0FH MOV USBDATALEN,#64 LCALL USB_WRDATADPTR NOP DJNZ R0,LGETSTATUS RET
USB_WRDATADPTR: NOP ;向USB寫入數(shù)據(jù)DPTR MOV P7,#02BH ;USB寫入命令碼 LCALL USB_CMD
MOV P7,USBDATALEN ;要向端點(diǎn)2緩沖區(qū)寫入的數(shù)據(jù)長(zhǎng)度 LCALL USB_DATAIN ;從DPTR開始的數(shù)據(jù)向上位機(jī)傳送 WRLPD:MOVX A,@DPTR MOV P7,A ;數(shù)據(jù) LCALL USB_DATAIN INC DPTR DJNZ USBDATALEN,WRLPD RET
USB_GETSTATUS:nop MOV P7,#22H ;USB寫入命令碼 LCALL USB_CMD
LCALL USB_DATAOUT ;輸出數(shù)據(jù)到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 ;讀數(shù)據(jù) mov P7,#0ffh lcall delay CLR USB_A CLR USB_CS CLR USB_RD CLR USB_CS mov 30H,p7 ;數(shù)據(jù)存放到30h SETB USB_RD SETB USB_CS lcall delay lcall delay RET
您用的是模擬總線的方式進(jìn)行讀寫的,速度比總線的肯定會(huì)慢的,可以的話改成總線方式速度會(huì)提升很多.
速度終于提高了,原來延時(shí)時(shí)間太長(zhǎng)了。 非常感謝技術(shù)人員的支持!