請教 有關(guān)讀U盤的問題

向高手請教: 在向U盤寫入一個(gè)扇區(qū)(512字節(jié))數(shù)據(jù)時(shí),前幾次的中斷狀態(tài)是真確的,可是后面的幾次的就不正確的,請問這是為什么?設(shè)備初始化這些都沒問題。 unsigned char WriteSector(unsigned int address,unsigned char*pBuffer) { unsigned char Block=8,IntStatus,Block_Size=0x40; SendCH375CMD(DISK_WRITE); //send write data command SendSingleData(address&0xff); //send address SendSingleData((address>>8)&0xff); SendSingleData((address>>16)&0xff); SendSingleData((address>>24)&0xff); for(Block;Block!=0;Block--) { IntStatus=GetInterStatus(); //get the interrupt status if (IntStatus==USB_INT_DISK_WRITE) // USB存儲器寫數(shù)據(jù)塊,請求數(shù)據(jù)寫入 {SendCH375CMD(WR_USB_DATA7); //向CH375緩沖區(qū)寫入數(shù)據(jù)塊 SendSingleData(Block_Size); // 后續(xù)數(shù)據(jù)的長度 while (Block_Size--) // 根據(jù)長度寫入數(shù)據(jù) SendSingleData(*pBuffer++); //將數(shù)據(jù)寫入 SendCH375CMD(DISK_WR_GO); //繼續(xù)執(zhí)行USB存儲器的寫操作 } else break; } if (Block==0) if((IntStatus=GetInterStatus())==USB_INT_SUCCESS) //等待中斷并獲取狀態(tài) return(0); //操作成功 ClearError(); // 清除U盤錯誤 return(IntStatus); //操作失敗 }

void ClearError( void ) { delayus(10000); /* 延時(shí)10mS */ SendCH375CMD(DISK_R_SENSE); /* 檢查USB存儲器錯誤 */ delayus(10000); /* 延時(shí)10mS */ GetInterStatus(); /* 等待中斷并獲取狀態(tài) */ }

在讀取一個(gè)扇區(qū)的時(shí)候也有上面的情況,而且,只有第一次的“后續(xù)數(shù)據(jù)的長度”才是64字節(jié),后面幾次都不是64字節(jié),這樣的情況正常嗎?

unsigned char ReadSector(unsigned int address,unsigned char*pBuffer) { unsigned int Sector; unsigned char Block=8,IntStatus,Block_Size; SendCH375CMD(DISK_READ); //send read data command SendSingleData(address&0xff); //send address SendSingleData((address>>8)&0xff); SendSingleData((address>>16)&0xff); SendSingleData((address>>24)&0xff); for(Block;Block!=0;Block--) { IntStatus=GetInterStatus(); //get the interrupt status if (IntStatus==USB_INT_DISK_READ) // USB存儲器讀數(shù)據(jù)塊,請求數(shù)據(jù)讀出 { SendCH375CMD(RD_USB_DATA); // 從CH375緩沖區(qū)讀取數(shù)據(jù)塊 Block_Size=GetSingleByte(); // 后續(xù)數(shù)據(jù)的長度 while (Block_Size--) // 根據(jù)長度讀取數(shù)據(jù) *(pBuffer++)=GetSingleByte(); // 將數(shù)據(jù)讀出 SendCH375CMD(DISK_RD_GO); // 繼續(xù)執(zhí)行USB存儲器的讀操作 } else break; // 返回錯誤狀態(tài) } if (Block==0) if((IntStatus=GetInterStatus())==USB_INT_SUCCESS) //獲取狀態(tài) return(0); // 操作成功

ClearError(); //清除U盤錯誤 return(IntStatus); // 操作失敗 }

寫完DISK_WRITE,DISK_READ 命令之后要寫5個(gè)參數(shù),4個(gè)地址,還有一個(gè)要讀寫的扇區(qū)數(shù).


地址發(fā)送完畢后,要發(fā)送要寫的扇區(qū)數(shù). 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ù) */


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

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