我用375B,自己寫的程序,在仿真器上沒有問題,能在U盤建立文件。把它燒進ROM片子,實際運行則會寫亂U盤,既:插上計算機,無法點開,顯示“文件或目錄損壞”。只能不厭其煩改一次程序,燒錄運行一次。發(fā)現(xiàn)在修改FAT表處就出問題。 具體來說就是: (1)讀U盤可以,一旦寫就不行。我試著讀出FAT表,不做任何修改,原樣原地址寫回,在仿真器上當(dāng)然正常,燒入片子運行就不行,用winhex看,發(fā)現(xiàn)FAT表有變,表頭有的FF變成了0F或7F,難怪說文件損壞。我沒改FAT表,所以應(yīng)該不是FAT表,修改程序的問題吧? (2)寫入片子后,讀扇區(qū)正常,寫入到扇區(qū)子函數(shù)開始的往CH375送指令,數(shù)據(jù)等也正常(不死U盤),僅在循環(huán)送入數(shù)據(jù)后死掉(當(dāng)然是因為送入的數(shù)據(jù)不知何故改變了) (3)偶爾會寫正確,平均寫7.8次扇區(qū),正確一次。 請教各位大師:既然在仿真器上正常,寫入片子后,操作375也正常,只有在循環(huán)送入數(shù)據(jù)后死掉(且偶爾會寫正確),可能是什么原因?是否我的程序并無問題,只是硬件受到干擾?什么不穩(wěn)定(電壓之類)?或者別的原因?[Emot]4[/Emot]
補充:我用的是上海星研得仿真器STAR16L,單片機是196KB。燒入片子后,別的程序運行正常,包括CH375與計算機通信
(1)仿真器與芯片相比,速度要慢一些,即操作CH375的時序也會慢一些 (2)檢查CH375的接口函數(shù)時序與芯片的速度是否匹配:命令后延時1.5uS,數(shù)據(jù)后延時0.6uS (3)直接寫物理扇區(qū)試試,僅寫入一個扇區(qū),分析一下哪個步驟出錯 (4)“循環(huán)送入數(shù)據(jù)后死掉”與“當(dāng)然是因為送入的數(shù)據(jù)不知何故改變了”沒什么關(guān)系,U盤本身不關(guān)心寫入什么數(shù)據(jù)
我是命令后延時2uS,數(shù)據(jù)后也延時2uS并因此能多讀寫2塊U盤(當(dāng)然是在仿真器上) 如果仿真器與芯片相比,速度要慢一些,即操作CH375的時序也會慢一些,我該修改什么?延時更長?還是修改別的? 直接寫物理扇區(qū)試試,僅寫入一個扇區(qū),在相繼送入LBA地址,每包長度(64字節(jié)),寫入扇區(qū)數(shù)(1扇區(qū)),LBA地址,每包長度(64字節(jié)),寫入扇區(qū)數(shù)后,送入寫數(shù)據(jù)指令,等待中斷狀態(tài)為1EH后(到此都是正確的),循環(huán)送入數(shù)據(jù)后,用winhex看,LBA地址,每包長度(64字節(jié)),寫入扇區(qū)數(shù)都正確,就是寫入的數(shù)組內(nèi)容不知何故改變了
(1)芯片的速度快,根據(jù)芯片的速度調(diào)整延時,使之符合命令后延時1.5uS,數(shù)據(jù)后延時0.6uS (2)CH375與U盤之間的數(shù)據(jù)含CRC校驗,這部分?jǐn)?shù)據(jù)傳輸不會錯,那么應(yīng)該是單片機CH375之間的數(shù)據(jù)出錯了 <1>磁盤初始化、獲取容量成功沒? <2>對比一下寫扇區(qū)的流程是否正確,下載CH375EVT.ZIP,參考MISCELL下的例程, <3>寫入特征數(shù)據(jù),如:0x55,看一下出錯數(shù)據(jù)是否有規(guī)律
一定要嚴(yán)格延時為命令后延時1.5uS,數(shù)據(jù)后延時0.6uS嗎?我不是太嚴(yán)格,再試試吧 單片機CH375之間的數(shù)據(jù)為什么會出錯了,仿真器上完全正確的,僅僅就是因為實際的MCU和仿真器的速度有差異,導(dǎo)致延時不準(zhǔn)確嗎? 磁盤初始化都成功(包括三塊不能讀出的U盤)獲取容量從未成功(在仿真器上能正確讀寫的8塊U盤) 我在看看CH375EVT.ZIP 我寫入未修改的FAT表扇區(qū),表頭有的FF變成0F,7F或00H
延時時間主要是對于高速單片機,大于這個這個時間基本上就可以,如果獲取容量不成功,可以發(fā)送CMD_DISK_R_SENSE 命令,獲取磁盤的錯誤狀態(tài),然后重試,一般循環(huán)獲取5次就可以了
唉,以前試過,再試試吧!只是硬件受到干擾?可是在燒入片子后,寫入的數(shù)組內(nèi)容不知何故改變了。到底是不是什么不穩(wěn)定(電壓之類)?或者屏蔽做得不好,電磁干擾導(dǎo)致數(shù)據(jù)傳輸錯誤?
我發(fā)現(xiàn)再讀出扇區(qū)數(shù)據(jù)時有時正確,有時要起變化(并且如果這次數(shù)據(jù)有變化,會比正確讀取一個扇區(qū)耗時久點),是不是連接375的插座和usb線的插頭接觸不良的原因? 因為有時連初始化也老通不過(此時U盤燈閃爍,375的發(fā)光管,亮著,不閃爍),用手壓一壓插頭,就初始化成功
耗時久可能是讀出的數(shù)據(jù)出現(xiàn)了錯誤,分析文件系統(tǒng)時無法通過,CH375試圖在去不斷的讀。 建議USB接口外殼要接地。USB平行走線。CH375的UD+,UD-到USB接口的線盡量短些。
謝謝我立即再試試,改改線,看行不行! 不知道為何仿真器環(huán)境下沒有這問題?
唉,極度不穩(wěn)定,寫3,4次才能正確一次。到底是哪里出了問題
經(jīng)過改線后,情況有沒有改善? 你可以直接寫物理扇區(qū),或者讀扇區(qū),看看有沒有錯誤.如果總線上有問題的話,不會就錯那幾個固定數(shù)據(jù)的.所以你測試一下讀扇區(qū).寫扇區(qū)看看有沒有問題,以便于確認(rèn)是庫里面有問題還是硬件出現(xiàn)問題了,.仿真器和真實的硬件還有一個區(qū)別那就是RAM大小可能會不一樣的.目前使用的RAM是多少?
還沒有,今天剛搞到一根屏蔽線,明天立即換上試試! 直接讀扇區(qū)的錯誤就是如上所言!不穩(wěn)定。時對時錯 ram好像是64K
和375B的晶振(12M的),電容有沒有關(guān)系?
電容和晶振有關(guān)系,一般都用15P-47P的,越小越容易起振,越大震蕩越穩(wěn)定