為什么我的U盤的0扇區(qū)的MBR的第一個(gè)分區(qū)表的啟動(dòng)代碼是00而不是80, 可是U盤能用,CH375卻讀不出來(lái)? 謝謝! MBR的信息截圖在附件里。
(1)CH375能否讀出數(shù)據(jù),與啟動(dòng)代碼是什么,沒(méi)任何關(guān)系 (2)讀不出來(lái)的具體現(xiàn)象是什么呢?U盤初始化通過(guò)了沒(méi)?下載CH375EVT.ZIP,參考\CH375EVT\PUB\MCS51C\MISCELL
然后就是執(zhí)行DISK_SIZE命令時(shí)總是出錯(cuò), 跳過(guò)去后在讀取U盤扇區(qū)數(shù)據(jù)時(shí)首先讀取的輸出數(shù)據(jù)塊長(zhǎng)度總是0,所以讀不出任何東西。 這個(gè)程序讀fat16的U盤是沒(méi)問(wèn)題的,讀fat32的初始化U盤命令也通過(guò)了,就是有上面的錯(cuò)誤。 幫幫忙啊~~
DISK_SIZE要有個(gè)重試。 失敗后延時(shí)200MS,然后R_SENSE命令,然后在重新獲取。一般2-3次都可以正確獲取到了。
我重新R_SENSE后再DISK_SIZE,始終得到0x1F,即存儲(chǔ)設(shè)備操作失敗, 會(huì)不會(huì)是不支持這個(gè)U盤?kingston的4G的
不知道可以不可以把你初始化U盤的程序貼出來(lái)看下,還有就是MS級(jí)的延時(shí)需要準(zhǔn)確點(diǎn),這樣我們的R_SENSE才有效果.
初始化程序?qū)e的幾款U盤都能用,不知道這個(gè)為什么不行。 這個(gè)的第一個(gè)分區(qū)表的啟動(dòng)代碼是00而不是80,不知道有沒(méi)有原因。 應(yīng)該不是程序的問(wèn)題,以為我3個(gè)u盤能讀出來(lái),這個(gè)不行,不過(guò)概率還是挺大的哦,這樣的產(chǎn)品不敢拿出去啊。。。
CH375_WR_CMD( CMD_SET_USB_MODE ); DelayMs(1); CH375_WR_DAT( 6 ); /* 模式代碼,自動(dòng)檢測(cè)USB設(shè)備連接 */ for ( i = 0xffff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT( ) == CMD_RET_SUCCESS ) break; if ( i != 0 ) { return( 0 ); /* 操作成功 */ #if DEBUG_PRINTF sea_printf("USB initialize ok.\n"); #endif } else return( 0xff ); /* CH375初始化未成功,例如芯片型號(hào)錯(cuò)或者處于串口方式或者不支持 */
CH375_WR_CMD( CMD_GET_STATUS ); mIntStatus = CH375_RD_DAT( ); if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* USB設(shè)備斷開(kāi) */ /* 初始化USB存儲(chǔ)器 */ CH375_WR_CMD( CMD_DISK_INIT ); mIntStatus = mWaitInterrupt( ); if ( mIntStatus != USB_INT_SUCCESS ) /* 返回USB_INT_SUCCESS標(biāo)識(shí)操作成功 */ return( mIntStatus ); /* 獲取USB存儲(chǔ)器的容量 */ SIZE: CH375_WR_CMD( CMD_DISK_SIZE ); mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus != USB_INT_SUCCESS ) /* 出錯(cuò)重試 */ { DelayMs( 200 ); CH375_WR_CMD( CMD_DISK_R_SENSE ); /* 獲取USB存儲(chǔ)器的容量 */ mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_CONNECT ) goto SIZE ; /* 出現(xiàn)錯(cuò)誤 */ }
你拿這個(gè)程序去測(cè)試下看可以不可以: 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è)備斷開(kāi) */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存儲(chǔ)器 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出現(xiàn)錯(cuò)誤 */ while(1){j++; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 獲取USB存儲(chǔ)器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯(cuò)誤 */ /*這里需要加上這個(gè)之后才可以,正確的做法也是這樣*/ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 獲取USB存儲(chǔ)器的容量 */ mDelaymS( 250 ); if(j==5) return(Status); } Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ){ /* 出現(xiàn)錯(cuò)誤 */ for(i=0;i!=5;i++){ printf("Ready\n"); CH375_WR_CMD_PORT( CMD_DISK_READY ); /* 獲取USB存儲(chǔ)器的容量 */ Status = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( Status == USB_INT_SUCCESS ) break; /* 出現(xiàn)錯(cuò)誤 */ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 獲取USB存儲(chǔ)器的容量 */ mDelaymS( 250 ); } } return( 0 ); /* U盤已經(jīng)成功初始化 */ }