[求助]用ch372做單片機(jī)和PC機(jī)的usb通信的問(wèn)題

各位做過(guò)類(lèi)似電路的大哥,現(xiàn)在我碰到一個(gè)尷尬的問(wèn)題,一直以來(lái)我的電路只要插上USB連線,電腦就提示“未識(shí)別的USB設(shè)備”,今天下午我把程序的延時(shí)部分加長(zhǎng)了,第一次連上去的時(shí)候無(wú)法識(shí)別,我第二次連上,居然奇跡出現(xiàn)了,提示設(shè)備識(shí)別成功了(當(dāng)時(shí)太激動(dòng),沒(méi)看清楚是幾個(gè)什么字,反正是能裝驅(qū)動(dòng)了),但是當(dāng)我裝完驅(qū)動(dòng),用調(diào)試工具的時(shí)候,設(shè)備再一次識(shí)別失敗,我拔掉連線,再插上去,依然是無(wú)法識(shí)別。 我很郁悶,我同學(xué)說(shuō)是我的電路不可靠,因?yàn)槲覜](méi)做PCB,為了圖方便,只是用一個(gè)單片機(jī)最小系統(tǒng)的板子連上幾根線再用萬(wàn)用板搭了一個(gè)372的最小系統(tǒng)。這樣是不是不行啊,請(qǐng)有經(jīng)驗(yàn)的大哥給個(gè)肯定的答復(fù),如果做PCB能解決問(wèn)題,我就做一塊,如果是其他問(wèn)題麻煩也告訴我,也好讓我甘心??!

首先,對(duì)于372芯片,只要模式設(shè)置成功之后,就應(yīng)該會(huì)可以找到新的硬件的,一般的程序里面的延時(shí)是這樣的:命令與命令,命令與數(shù)據(jù)之間的延時(shí)為2US,數(shù)據(jù)與數(shù)據(jù)之間的延時(shí)為1US,所以,如果延時(shí)不正確的話,模式也應(yīng)該不會(huì)設(shè)置成功,如果是自己搭的板子的話,那么一定要注意共地性一定要好,尤其是在你設(shè)置好模式之后,USB線和你板子以及計(jì)算機(jī)之間的共地,還有就是線一定要為屏蔽線,還有就你的測(cè)試命令是通過(guò)的嗎??


謝謝hcn,看來(lái)我的延時(shí)部分還是要繼續(xù)完善。不過(guò)一般我都沒(méi)有測(cè)試,因?yàn)椴恢谰唧w怎么去操作啊,呵呵,很弱智吧,是測(cè)試I/O口的引腳嗎?通過(guò)與不通過(guò)有什么區(qū)別呢?麻煩解答下


我已經(jīng)搞定了,發(fā)消息給我吧,看看我能幫上什么忙,最好把電路發(fā)給我看看

我就是采用標(biāo)準(zhǔn)電路,用AVR單片機(jī),雖然我是用375但是做slave是一樣的


你可以不用去做測(cè)試,你只要看下延時(shí)的反匯編就可以知道你的延時(shí)有多長(zhǎng)時(shí)間了,如果硬件連線沒(méi)有問(wèn)題的話,那么測(cè)試命令的通過(guò)就是從數(shù)據(jù)口讀出來(lái)的數(shù)據(jù)是你輸入數(shù)據(jù)的取反,這個(gè)時(shí)候設(shè)置模式的話,UD+的電壓應(yīng)該為3。3V左右


哦,謝謝兩位了,對(duì)hcn所說(shuō)的,我用的是c51編程,程序就是你們給的例子,編譯器是Keil uVision2,是不是模式設(shè)置對(duì)延時(shí)的要求很?chē)?yán)格啊,如果延時(shí)不是恰恰好就會(huì)面臨設(shè)置失敗嗎?還有,即使未識(shí)別設(shè)備的時(shí)候,UD+的電壓也是3.3V左右的,所以我覺(jué)得很納悶了

對(duì)里杰兄所說(shuō)的,先謝謝了,呵呵,我由于是做個(gè)實(shí)驗(yàn),所以就沒(méi)畫(huà)電路,具體連接是P2.0接A0,P2.6接CS#,int0接INT#,P3.6接WR#,P3.7接RD#,D0-D7直接接的P0.1—P0.7,我是想先能夠讓372工作,再考慮電路的其他部分,因?yàn)榫唧w要實(shí)現(xiàn)什么功能導(dǎo)師和我還沒(méi)商量好,請(qǐng)保持聯(lián)系,我有了方案就給你發(fā)圖,也有可能是用375,說(shuō)不定跟兄臺(tái)你做的差不多:)


USB協(xié)議里面在確定是不是USB設(shè)備的時(shí)候,只要在UD+電壓為3V,UD-電壓為0V的時(shí)候就認(rèn)為是全速設(shè)備,相反為低速設(shè)備,但是主機(jī)真正識(shí)別到是什么樣的設(shè)備的話,需要設(shè)備上傳描述符之后才可以識(shí)別到,所以,即使你不接USB設(shè)備,直接將USB線的UD+電壓拉到3V的話,也會(huì)識(shí)別到一個(gè)未知設(shè)備,所以,你可以將你的單片機(jī)拿下來(lái),直接給372上電,你看下UD+的電壓是多少?如果為3V的話,檢查硬件,如果不是的話,那么你將單片機(jī)和372通信,必要條件是測(cè)試命令必須要過(guò),我們提供給你的例子程序里面不一定都做了測(cè)試命令的,你可以看下程序,或者將你的程序貼出來(lái),如果沒(méi)加的話,我們可以幫你加下,在測(cè)試命令通過(guò)的情況下,設(shè)置好模式之后,UD+的電壓就應(yīng)該我3V左右了,如果這個(gè)時(shí)候還沒(méi)有找到新硬件的話(提示裝驅(qū)動(dòng)),那么你就要檢查USB口和計(jì)算機(jī)的連線是否為屏蔽線,UD+和UD-有沒(méi)有接反以及372的晶振是否為12M?


嗯,按你的方法試了一下,拿下單片機(jī),UD+是3V多,電腦果然是檢測(cè)到未識(shí)別的USb設(shè)備,真是高人啊,呵呵。程序貼在下面,連接線是屏蔽線,而且晶振和UD+和UD-沒(méi)接反,請(qǐng)問(wèn)識(shí)別成功后在任務(wù)欄里面有沒(méi)有一個(gè)提示符,就像U盤(pán)插進(jìn)去的時(shí)候一樣? #include #include #include #include #include "CH375INC.H" #define uchar unsigned char

uchar volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 CS接P2.1,A0接P2.0,D0-D7連P0-P7*/ uchar volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375數(shù)據(jù)端口的I/O地址 */

/* 延時(shí)根據(jù)具體情況調(diào)節(jié) */ void delay3us( ) { unsigned char i; for ( i = 3; i != 0; i -- ); /* 根據(jù)單片機(jī)的時(shí)鐘選擇初值 */ }

/* 與CH375有關(guān)的基本I/O操作 */

void CH375_WR_CMD_PORT(uchar cmd) { /* 向CH375的命令端口寫(xiě)入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ delay3us( ); CH375_CMD_PORT=cmd; delay3us( ); }

void CH375_WR_DAT_PORT(uchar dat) { /* 向CH375的數(shù)據(jù)端口寫(xiě)入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ _nop_(); _nop_(); CH375_DAT_PORT=dat; _nop_(); _nop_(); //delay1us( ); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ }

uchar CH375_RD_DAT_PORT( void ) { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ //delay1us( ); /* 如果是MCS51單片機(jī),因其較慢,所以實(shí)際上無(wú)需延時(shí) */ _nop_(); _nop_(); return(CH375_DAT_PORT); }

/* 延時(shí)50毫秒,不精確 */ void Delay50ms( ) { unsigned char i, j; for ( i=200; i!=0; i-- ) for ( j=250; j!=0; j-- ); }

/* CH375初始化子程序 */ void CH375_Init( ) { uchar i; /* 測(cè)試CH375是否正常工作,可選操作,通常不需要 */ CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 測(cè)試CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 寫(xiě)入測(cè)試數(shù)據(jù) */ i = ~ 0x55; /* 返回?cái)?shù)據(jù)應(yīng)該是測(cè)試數(shù)據(jù)取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT(0);

Delay50ms( ); /* 延時(shí)50ms */ }

/* 設(shè)置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_WR_DAT_PORT(2); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */

for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } /* if ( i==0 ) { CH375存在硬件錯(cuò)誤 }; */ /* 下述啟用中斷,假定CH375連接在INT0 */ IT0 = 0; /* 置外部信號(hào)為低電平觸發(fā) */ IE0 = 0; /* 清中斷標(biāo)志 */ EX0 = 1; /* 允許CH375中斷 */ }

/* CH375中斷服務(wù)程序,使用寄存器組1 */ void mCh375Interrupt( ) interrupt 0 using 1 { uchar InterruptStatus; uchar i, length; uchar data buffer[ 64 ];

CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請(qǐng)求 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 獲取中斷狀態(tài) */ switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點(diǎn)下傳成功 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = CH375_RD_DAT_PORT( ); /* 首先讀取后續(xù)數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_RD_DAT_PORT( ); /* 接收數(shù)據(jù)包 */ /* 測(cè)試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機(jī) */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( length ); /* 首先寫(xiě)入后續(xù)數(shù)據(jù)長(zhǎng)度,回傳剛接收到的數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ buffer[ i ] ); /* 數(shù)據(jù)取反后返回,由計(jì)算機(jī)應(yīng)用程序測(cè)試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } } }

/*主程序*/ main( ) { Delay50ms( ); /* 延時(shí)等待CH375初始化完成,如果單片機(jī)由CH375提供復(fù)位信號(hào)則不必延時(shí) */ CH375_Init( ); /* 初始化CH375 */ EA = 1; /* 允許中斷 */ while ( 1 ); /* 以下指令開(kāi)始工作循環(huán),等待PC機(jī)命令進(jìn)行操作 */ }


如果是這樣的話,那么你要檢查你的硬件了。仔細(xì)查USB口那邊的問(wèn)題


如果安裝了驅(qū)動(dòng),識(shí)別成功的話,并不在任務(wù)欄里顯示什么,而是在計(jì)算機(jī)的設(shè)備管理器中多了個(gè)外部接口,顯示為:USB CH372\CH375。


嗯,謝謝了,那我的程序沒(méi)問(wèn)題嗎?如果是硬件的問(wèn)題,準(zhǔn)備去做PCB,還有就是,有沒(méi)有什么辦法讓它在電腦里比較明顯的顯示出來(lái),畢竟每次去設(shè)備管理器里面找有些不方便啊,呵呵


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频