在測試CH375讀寫U盤時,先寫入一個扇區(qū),在讀一個扇區(qū),在中間需要加入8秒的延時。 不然,讀扇區(qū)的中斷就會少于9個。 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); SendSingleData(1); 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); // 操作失敗 } 但是,連續(xù)寫或讀多個扇區(qū)卻沒這個問題。后來,我在檢測到中斷腳為低與發(fā)送GET_STATUS命令之間加上40ms的延時,也可以。但是,還是沒找到根本的原因,請指教!