CH375數(shù)據(jù)讀取DISK_READ命令請教

各位大蝦好: 小弟在使用CH375時,初始化U盤成功后,就使用DISK_RESD命令讀取U盤數(shù)據(jù),可是讀出來的數(shù)據(jù)全是0X1D(USB_INT_DISK_READ),不知是不是中間過程出了什么問題?

注:我的程序設計為;初始化成功后,就直接發(fā)送DISK_RESD命令,然后送出四個字節(jié)地址和扇區(qū)數(shù),等待讀取中斷,產(chǎn)生中斷后讀取數(shù)據(jù)。

你可以不可以把DISK_READ這部分命令貼出來看下


/*=================================================================================== 函數(shù)功能:讀取字符串,將讀取字符存入數(shù)據(jù)緩沖區(qū)-----*data 輸入數(shù)據(jù):讀取數(shù)據(jù)長度/接收數(shù)據(jù)指針 輸出數(shù)據(jù):無 函數(shù)說明:讀取數(shù)據(jù)長度需單獨送入。此函數(shù)只讀取數(shù)據(jù) =====================================================================================*/ void PARA_read_string(uchar len,uchar *data) { uchar i; for(i=0;i { data[i] = PARA_read_data(); //循環(huán)讀取數(shù)據(jù),知道完畢,data[]為數(shù)據(jù)緩沖區(qū) putchar(data[i]); //顯示讀取數(shù)據(jù) delay_ms(1); } }

/*=================================================================================== 函數(shù)功能:讀取數(shù)據(jù)塊(以扇區(qū)為單位) 輸入?yún)?shù):數(shù)據(jù)絕對地址/讀取扇區(qū)數(shù)/讀入數(shù)據(jù)緩沖區(qū)指針 輸出參數(shù):無 函數(shù)說明:數(shù)據(jù)絕對地址是一個四字節(jié)的數(shù)組(低在前)由于CH375的內(nèi)置數(shù)據(jù)緩沖區(qū)只有64個字節(jié) 所以讀取一個扇區(qū)(512)需9次中斷(前8次讀取數(shù)據(jù),最后一次返回操作狀態(tài)) ====================================================================================*/ void PARA_read_Sector(uchar *LbaStart,uchar Sector_Count,uchar *Data_Buffer) { uchar Intrupt_Count; //中斷次數(shù)緩沖器 uchar status; //中斷狀態(tài) PARA_send_com(DISK_READ); //發(fā)送讀取數(shù)據(jù)命令 PARA_send_string(4,LbaStart); //發(fā)送地址 PARA_send_data(Sector_Count); //發(fā)送待讀取扇區(qū)數(shù) status = Wait_Intrupt(); //獲取中斷狀態(tài) //delay_ms(100); if(status == USB_INT_DISK_READ) { delay_ms(100); PARA_read_string(64,Data_Buffer); } }


不知道讀寫U盤程序流程是否為:初始化-----發(fā)送讀取數(shù)據(jù)塊命令-----發(fā)送4字節(jié)地址-----發(fā)送待讀取扇區(qū)數(shù)-----等待中斷----讀取數(shù)據(jù)? 初始化后有必要進行“識別分析U盤文件系統(tǒng)嗎”?


不需要,你是操作物理扇區(qū),是不需要考慮文件系統(tǒng)的,不過你讀的數(shù)據(jù)如果大于64字節(jié)的話,那么你要在讀的后面加上一個CH375_WR_CMD_PORT( CMD_DISK_RD_GO ); /* 繼續(xù)執(zhí)行USB存儲器的讀操作 */ 的命令


我現(xiàn)在只讀取64個字節(jié),我又在前面加了一個獲取容量命令,結(jié)果返回數(shù)據(jù)正確,但讀取的數(shù)據(jù)依然是64個0XID DISK_READ是否只要產(chǎn)生USB_INT_DISK_READ中斷后就直接讀取數(shù)據(jù)了?還是中間還要有其他過程?


你用這段程序改下看下; CH375_WR_CMD_PORT( CMD_DISK_READ ); /* 從USB存儲器讀數(shù)據(jù)塊 */ CH375_WR_DAT_PORT( (unsigned char)iLbaStart ); /* LBA的最低8位 */ CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 8 ) ); CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 16 ) ); CH375_WR_DAT_PORT( (unsigned char)( iLbaStart >> 24 ) ); /* LBA的最高8位 */ CH375_WR_DAT_PORT( iSectorCount ); /* 扇區(qū)數(shù) */ mBufferPoint = DATA_BUFFER; /* 指向緩沖區(qū)起始地址 */ for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC; mBlockCount != 0; mBlockCount -- ) { /* 數(shù)據(jù)塊計數(shù) */ mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_DISK_READ ) { /* USB存儲器讀數(shù)據(jù)塊,請求數(shù)據(jù)讀出 */ CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從CH375緩沖區(qū)讀取數(shù)據(jù)塊 */ mLength = CH375_RD_DAT_PORT( ); /* 后續(xù)數(shù)據(jù)的長度 */ while ( mLength ) { /* 根據(jù)長度讀取數(shù)據(jù) */ *mBufferPoint = CH375_RD_DAT_PORT( ); /* 讀出數(shù)據(jù)并保存 */ mBufferPoint ++; mLength --; } CH375_WR_CMD_PORT( CMD_DISK_RD_GO ); /* 繼續(xù)執(zhí)行USB存儲器的讀操作 */ } else break; /* 返回錯誤狀態(tài) */ } if ( mBlockCount == 0 ) { mIntStatus = mWaitInterrupt( ); /* 等待中斷并獲取狀態(tài) */ if ( mIntStatus == USB_INT_SUCCESS ) return( 0 ); /* 操作成功 */ } return( mIntStatus ); /* 操作失敗 */


現(xiàn)在的問題是我把地址該了,可讀出的數(shù)據(jù)是一樣的。我給的地址分別是0X00,0X00,0X00,0X00和0X00,0X00,0X01,0X00,讀出的數(shù)據(jù)是:40 FA 33 C0 8E D0 BC 00 7C 8B F4 50 07 50 1F FB FC BF 00 06 B9 00 01 F2 A5 EA 1D 06 00 00 BE BE 07 B3 04 80 3C 80 74 0E 80 3C 00 75 1C 83 C6 10 FE CB 75 EF CD 18 8B 14 8B 4C 02 8B EE 83 C6 10 FE 其中40表示數(shù)據(jù)個數(shù)


請問,是不是因為我沒有設置地址的原因呢?如果不設置不是默認地址0嗎?


請問你所說的地址是什么意思??是LBA扇區(qū)號嗎??



你要是讀第一扇區(qū)的數(shù)據(jù),那你的LBA扇區(qū)號要設置成0X00000000,你如果要是讀第2扇區(qū),那么你要輸入的扇區(qū)號是0X00000001啊,你沒輸入扇區(qū)號,那當然是不能操作的拉


我在使用DISK_READ命令后發(fā)送的0X00,0X00,0X00,0X00和0X00,0X00,0X01,0X00不就是嗎?


你現(xiàn)在讀的是第0x00000000和0x00000100扇區(qū)啊


是,可這樣兩個扇區(qū)數(shù)據(jù)一樣也不對吧?


只有登錄才能回復,可以選擇微信賬號登錄

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