我用的是8032內(nèi)核,40M晶振的單片機(jī),實用的是CH375HF5的頭文件。做的U盤讀寫系統(tǒng)遇到以下問題: (1)開始時只有一個老的朗科的128MU盤可以操作,后來發(fā)現(xiàn)是在程序里給375讀寫指令,數(shù)據(jù)的延時沒有做好,后來經(jīng)過調(diào)整可以操作朗科,紐曼等4,5種U盤。 (2)但是對一個老的朗科32MU盤和一個新的128M每次執(zhí)行CH375FileOpen( )后返回錯誤代碼0xEF而且這是將U盤拔下插入電腦后會發(fā)現(xiàn)U盤的文件系統(tǒng)變成了RAW格式,無法讀寫。 (3)對一個清華紫光128MU盤每次執(zhí)行到CH375DiskReady()后就會出現(xiàn)死機(jī)現(xiàn)象。 總的來說現(xiàn)在是大概一半的U盤可以讀寫。請各位牛人能給指點一下。多謝!
1、你測一下插上你所說的不能操作的清華紫光的盤,USB口的電源是多大,最好確保在5V左右,各種U盤的吸收電流不一樣,導(dǎo)致電壓降也不一樣,有些U盤電壓低于4.6V左右就不能正常工作了。 2、按你說的老的朗科32MU盤和一個新的128M的U盤,CH375FileOpen( )之前的DISKREADY()是能正常通過的嗎?如果DISKREADY()可以通過的話,一般來說這個U盤是可以操作的。你調(diào)一下你三個讀寫子程序的延時,命令與命令之間2us,命令與數(shù)據(jù)之間2us,數(shù)據(jù)與數(shù)據(jù)之間1us。
我現(xiàn)在直接給USB接口接上單獨的5V電源,還是像以前那個現(xiàn)象:清華紫光執(zhí)行到CH375DiskReady()后就會出現(xiàn)死機(jī)的現(xiàn)象。 老的朗科32MU盤和一個新的128M的U盤,CH375FileOpen( )之前的DISKREADY()是能正常通過的,返回值是 ERR_SUCCESS。但是執(zhí)行 CH375FileOpen( )后,就會返回0XEF。 我不知道命令與命令之間2us是指的最短時間是2us還是必須精確到2us? 我的單片機(jī)是8032內(nèi)核,40M晶振,12個時鐘周期。所以一個指令周期約為0.3個us,我的讀寫子程序代碼如下: void xWriteCH375Cmd( UINT8 mCmd )/* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { USBCS=0; _nop_(); _nop_(); write_xdata(CH375_CMD_PORT_ADDR,mCmd); _nop_(); _nop_(); USBCS=1; } void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { USBCS=0; write_xdata(CH375_DAT_PORT_ADDR,mData); _nop_(); _nop_(); USBCS=1; }
UINT8 xReadCH375Data( void )/* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { unsigned char i; USBCS=0; i=read_xdata(CH375_DAT_PORT_ADDR); _nop_(); _nop_(); USBCS=1; return( i ); } 其中的write_xdata()程序如下:#define write_xdata(adr,x) ( *(uc xdata *)adr = (uc)x) read_xdata(CH375_DAT_PORT_ADDR);為#define read_xdata(adr) (*(uc xdata *)adr) 我也試過將 每個子程序的 _nop_(); 數(shù)量增加或者減少,但是對不成功。不知道為什么。多謝指教!