上電后26為高電平,25低。測試命令可以通過。插入U盤沒有反應(yīng),這個怎么辦?INT#腳一直是高電平(用示波器看)。
估計問題不大,因為這時候芯片已經(jīng)正常工作了,根據(jù)你的情況,建議檢查一下以下地方: 1.是否設(shè)置了主機模式06! 2.CH375工作的電壓是多少,如果是3.3V的情況下,U盤的電壓是怎么提供的?這時候U盤必須要單獨供電,否則無法工作! 3.和2一樣,檢查一下U盤插上去以后U盤的電壓是多少,盡量保證在4.8V以上! 4.UD+和UD-有沒有串電阻?如果有的話,最好在5歐以內(nèi)!
xWriteCH375Cmd( 0x06 ); xWriteCH375Data( 0x5a ); while(1){ i=xReadCH375Data(); SSPrintf("Data:"); sprintf(buf,"%x",i); SSPrintf(buf); SSPrintf("\n"); if(i==0xa5)break; } mDelaymS(20); i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i );
/*A處,可以通過*/ while ( 1 ) { SSPrintf( "Wait Udisk\n" ); /*B處,一直出在查詢狀態(tài),不能通過*/ while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ mDelaymS( 200 ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */ //* 檢查U盤是否準備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 10; i ++ ) { // 有的U盤總是返回未準備好,不過可以被忽略 mDelaymS( 100 ); SSPrintf( "Ready ?\n" ); if ( (j=CH375DiskReady( )) == ERR_SUCCESS ) break; // 查詢磁盤是否準備好 }
U盤供電一直在4.6V以上,原先串了一個電阻,是10歐的,后來被短起來了。 說明:我原來是可以檢測到INT#的低電平的,突然之間就不行了。
你將INT#腳撬起來,然后用示波器去看在查上U盤的時候是否有低電平?懷疑你的電路有問題!
INT#腳和cpu的連線沒有出問題啊。會是什么問題?
你可以這樣做一個測試,在CH375LIBInit()之后,后面的檢測U盤什么的都不要做,你看下插上U盤之后375的中斷引腳電壓是多少?
我有類似問題。。做了這個測試之后。。INT腳是4.94V。。然后呢?
只要測試命名返回正常。CH375LIBInit()這個庫返回0X00,那么。插入U盤一定會將中斷引腳拉低的。否則就是你初始化CH375芯片有問題。
。。unsigned char CH375_Init() { unsigned char i=0; CH375_Write_Cmd(CMD_GET_IC_VER); /* 獲取芯片及固件版本 */ i=CH375_Read_Dat(); /* 版本 */ if(i<0xA2) return 1; /* 不支持該芯片 */
CH375_Write_Cmd(CMD_SET_USB_MODE); /* 設(shè)置USB工作模式 */ CH375_Write_Dat(0x06); /* 模式代碼,自動檢測USB設(shè)備連接 */
for(i=0;i<250;i++) { /* 等待操作成功,通常需要等待10uS-20uS */ delay(10); if(CH375_Read_Dat()==CMD_RET_SUCCESS ) return 0; /* 操作成功 */ }
return 1; /* CH375出錯,例如芯片型號錯或者處于串口方式或者不支持 */ } 這個是我的375初始化。然后返回成功了。。但是我插U盤。。ACT還是高電平。INT也是高電平~~還有。。在偶然的情況下。。我把A0和CS腳接反。。(就是本來A0接2.0。CS接2.1的,變成A0接2.1,cs接2.0)ACT腳竟然正常了。。拔U盤。插U盤。。對應(yīng)滅和亮。當(dāng)然。。375初始化不成功了。為什么呢?
你需要做測試命令, cmd = 0x06 data = 0x55 i = data 正確的話i應(yīng)該為0XAA 只有這樣才能說明你的硬件沒問題,按照你上述的程序。無法說明你的硬件是沒問題的。
我的初始化成功了。。但是又出現(xiàn)了新的問題。我在讀U盤內(nèi)存的時候。 CH375_Write_Cmd(CMD_RD_USB_DATA); temp = CH375_Read_Dat(); for(i=0;i { buffer[i] = CH375_Read_Dat(); } temp1 = (unsigned long)buffer[0]<<24; temp1 |= (unsigned long)buffer[1]<<16; temp1 |= (unsigned long)buffer[2]<<8; temp1 |= (unsigned long)buffer[3]<<0; temp1>>=1; u32tostr(temp1,buffer); UART_Send_Str("U盤內(nèi)存為:"); UART_Send_Str(buffer);
UART_Send_Str("KB\n\r"); return 0; //正常返回0 的時候。??ㄔ诹?。U32TOSTR這里。。這個函數(shù)是有的。。但是程序過不去。。。
unsigned char CH375_ReadDiskSize(void) { unsigned char buffer[8],temp,i,t; unsigned long temp1/*,temp2*/; CH375_CS=0; // UART_Send_Str("1"); CH375_Write_Cmd(CMD_DISK_SIZE); //UART_Send_Str("2"); if(CH375_Wait_Int() != USB_INT_SUCCESS) { CH375_CS=1; UART_Send_Str("讀取U盤內(nèi)存失敗\n\r"); return 1; }
然后我這樣改 for(i=0;i { buffer[i] = CH375_Read_Dat(); UART_Send_Str("5"); } 程序執(zhí)行。。發(fā)現(xiàn)都沒輸出5