理解錯誤,DATA_BUFFER是你單片機(jī)的緩沖區(qū),CH375怎么會 寫你的單片機(jī)緩沖區(qū)呢? CH375完全是MCU控制的。你把DATA_BUFFER數(shù)據(jù)送給375,375就把數(shù)據(jù)送給U盤了。 DATA_BUFFER為512字節(jié)的緩沖區(qū)(至少512,或者512整數(shù)倍),緩沖區(qū)滿后,調(diào)用mWriteSector,CH375就吧數(shù)據(jù)寫到U盤的扇區(qū)里面了。然后你在繼續(xù)采集,繼續(xù)寫就是了,扇區(qū)地址:上次寫1號扇區(qū),這次寫2號扇區(qū)。。。。。。。
哦,我好像明白點了,謝謝了。
再請教個問題,我現(xiàn)在寫512個字節(jié)的數(shù)到U盤里,執(zhí)行到mWriteSector寫操作的時候,返回0x1F,說明操作失敗,我用串口監(jiān)視到原因是寫數(shù)據(jù)塊的時候只寫了2個就停止了,本來應(yīng)該是mBlockCount=512/64=8,所以應(yīng)該寫8個數(shù)據(jù)塊,想問下為什么會寫操作中途失敗呢?原因大概出在哪里啊?
U盤的容量有沒有獲取到?前面的初始化部分呢?
前面的初始化正確返回0,我用串口看了一下返回的DATA_BUFFER[6],是0x02,根據(jù)說明是表示每扇區(qū)512字節(jié),具體的容量我沒算
我換了個U盤試了試,還是不行啊,初始化是正確的。不知道原因出在哪了?
是不是我沒檢查這個 CH375DiskReady的原因???我參考的CH375EVT\PUB\MCS51C\MISCELL\CH375EV0.C里的程序,應(yīng)為里面說大多數(shù)U盤不用檢查 CH375DiskReady,而且可以省代碼,我就沒寫這一步,這會不會是原因所在???
關(guān)于U盤容量你還是要好好看一下是否真正獲取到了,因為只有獲取到U盤容量的時候,U盤才算真正的可以操作了。 應(yīng)該不是 CH375DiskReady的問題。 移植程序的時候,流程上按照我們提供的代碼去做。另外需要注意延時函數(shù)根據(jù)你的MCU以及主頻進(jìn)行修改。 你可以把你的代碼發(fā)給我看看
好的,我先獲取下容量試試,一會還是不行我把程序發(fā)給你。
我獲取了容量,是正確的,下面是我的數(shù): DATA_BUFFER[0]=0x00,DATA_BUFFER[1]=0xF0,DATA_BUFFER[2]=0xA8,DATA_BUFFER[3]=0x47, DATA_BUFFER[4]=0x00,DATA_BUFFER[5]=0x00,DATA_BUFFER[6]=0x12,DATA_BUFFER[7]=0x00. 參照命令DISK_SIZE的說明計算的話,總共是15771719個扇區(qū),每扇區(qū)512字節(jié),所以磁盤容量是7.52G,跟我在電腦上查看的該U盤容量是一樣的。
別的還會是什么原因呢?幫我想想辦法吧,
你測試一下讀扇區(qū),看結(jié)果如何,另外把代碼發(fā)給我。
好的,我發(fā)你郵箱
unsigned char wait_interrupt(void) { unsigned short i; for(i=0;(PIND&0x04)==0x04;i++) /*如果INT為高電平則等待,通過計數(shù)防止超時 */ { delay_us(2); if(i=0xF000) xWriteCH375Cmd(0x17);/*如果超時達(dá)61ms以上則強(qiáng)行終止NAK重試*/ } if((PIND&0x04)==0) /*如果INT為低電平*/ return(GET_STATUS( )); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ else return(0); } 下面的語句錯誤,請修改 if(i=0xF000) xWriteCH375Cmd(0x17);/*如果超時達(dá)61ms以上則強(qiáng)行終止NAK重試*/ 為: if(i==0xF000) xWriteCH375Cmd(0x17);/*如果超時達(dá)61ms以上則強(qiáng)行終止NAK重試*/ 或者直接屏蔽掉,無限重試
真是謝謝你了,我按你說的改了,返回正確了,讀寫都正確,我編程太不嚴(yán)謹(jǐn)了,賦值和等于都沒寫對,以后長教訓(xùn)了。