不知道有沒有遇到過類似問題, HOST方式下,在執(zhí)行DISK_INIT命令后,返回0x20(超時錯誤碼?) 可能是什么原因?
你用下面的一段程序試下: UINT8 mInitDisk( void ) { /* 初始化磁盤 */ UINT8 Status,i,j=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ Status = CH375_RD_DAT_PORT( ); if ( Status == USB_INT_DISCONNECT ) return( Status ); /* USB設(shè)備斷開 */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存儲器 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出現(xiàn)錯誤 */ while(1){j++; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯誤 */ mDelaymS( 250 ); if(j==5) return(Status); } CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ){ /* 出現(xiàn)錯誤 */ for(i=0;i!=5;i++){ printf("Ready\n"); CH375_WR_CMD_PORT( CMD_DISK_READY ); /* 獲取USB存儲器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯誤 */ } } return( 0 ); /* U盤已經(jīng)成功初始化 */ }
同問一下: 謝了 我的也出現(xiàn)這問題:(在執(zhí)行DISK_INIT命令后,返回0x20 超時錯誤碼) 我用上面的程序也試了,還是。 mCH375Init( );375初始化通過,返回0x15 CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_DAT_PORT=0x06; RST#電平為高,RST為低,RSTI為低; CH375_WR_CMD_PORT(CMD_DISK_INIT);返回 0X20 CH375_WR_CMD_PORT(CMD_DISK_SIZE);返回 0X1F CH375_WR_CMD_PORT(CMD_DISK_RESET);返回 0X20
要是不行的話你換個U盤試下,因為這個只是一般意義上面對U盤的初始化,而在WINDOWS對U盤的初始化則比這個復(fù)雜很多,你可以調(diào)用我們庫里面的DISK-READY這個函數(shù)看下U盤的初始化可以不可以過
還是不行 i = CH375LibInit( );返回0X15。 CH375_CMD_PORT=CMD_DISK_INIT; 返回0X2C CH375DiskReady( ) 返回0X2C 我換了一塊CH375,剛才返回0X2C的語句,都返回0X24 (是不是都一樣,超時錯誤,啥意思?) 可能是啥問題,電路板上的嗎? 電源供電,和板子上的電容會不會影響他, 幾個電容都好著,沒被擊穿。仿真器的KIIL C 應(yīng)該沒事吧 換了兩個U盤都是了都不行,一個三星的U盤,一個恒嘉的MP3
找到了,是板子上的問題。 電阻太大,UD+,UD-上電流太小,U盤不工作 謝謝了! :)
不知道有沒有遇到過類似問題,已啟用HOST方式下,在執(zhí)行DISK_INIT命令后,返回0x16。 可能是什么原因?
初始化時,發(fā)了讀狀態(tài)命令后,為什么INT會一直是低呢?
那你狀態(tài)讀出來了沒有??
把375設(shè)定為方式6時,執(zhí)行命令后產(chǎn)生中斷,讀取中斷狀態(tài)后,在INT的狀態(tài)仍為低的情況下,375還能接收下一個命令嗎?我這里就可以繼續(xù)執(zhí)行,但返回的狀態(tài)是上一個命令的。 我現(xiàn)在的讀中斷狀態(tài)的處理過程是這樣的: i = 0; while(1) { if(IO0PIN&USB_INT) { i++; if(i>300000) return 0xfa; //超時 } else { Loop(5); //延時100ns //GET_STATUS if((IO0PIN&USB_INT)==0) { Write_Ord(0x22); dat = ReadUSBData(); i = 0; while((IO0PIN&USB_INT)==0) { Write_Ord(0x22); dat = ReadUSBData(); LoopNop(20); i++; if(i>3000) return 0xfb; //超時 } } return(dat); }
執(zhí)行命令后如果產(chǎn)生了中斷,那么發(fā)GET_STATUS命令后能否使INT的狀態(tài)復(fù)位呢?
發(fā)獲取狀態(tài)的命令之后就會將INT腳拉高的
執(zhí)行了DISK_INIT命令后,INT有時會一直為低,發(fā)獲取狀態(tài)命令也不會高起來的;但有時卻又是正常的。是由于沒有把命令發(fā)到,還是由于其它什么問題? 讀取狀態(tài)時,有時INT會有一個高的狀態(tài)但是很短暫的,然后一直為低;但大多數(shù)時候是一直為低的,讀到的狀態(tài)是命令SET_USB_MODE執(zhí)行后的狀態(tài)14。
這個有可能你的GET-STATUS的命令沒有發(fā)送到375,這樣的話就有可能出現(xiàn)你說的這種情況
在INT為低時,繼續(xù)發(fā)GET_STATUS命令,用視波器觀察INT也有為高,但最終狀態(tài)仍是低。所以命令是發(fā)到了,但為什么又會低下來呢?有沒有可能375壞了。
Write_Ord()函數(shù)以及寫數(shù)據(jù)和讀數(shù)據(jù)的函數(shù)可以不可以看下?