我用的CH375串口模式,在向U盤寫入512字節(jié)數(shù)據(jù)后,再從U盤讀512字節(jié)數(shù)據(jù),中間需要延時8秒鐘時間,才能讀成功,不然,CH375的中斷會少于9個,但沒有錯誤返回,即讀出錯。U盤的program時間不需要延遲那么長時間吧?但在兩個寫入程序之間不需要延時。請教這是什么原因? 測試: WriteSector(address,512); delays(8); ReadSector(address,512); 讀和寫兩個函數(shù)都測試過,沒問題。波特率是默認(rèn)的9600bps
這個需要看下你的讀寫函數(shù)以及你的波特率的設(shè)置上面會不會誤差過大導(dǎo)致上述問題,我們這邊測試的時候沒有出現(xiàn)你說的上述的現(xiàn)象.
波特率9615,誤差:0.16% 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); //sector 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); // 操作失敗 }
寫函數(shù)與此類似