CH375A文件級(jí)應(yīng)用

各位高手: 我現(xiàn)在用EXAM7中的C程序,用CH375HF4.lib和CH375HF4.H讀U盤的數(shù)據(jù),還是不成功,我看了很多網(wǎng)上的貼子,說(shuō)如果打不開(kāi)文件的話多是磁盤空間定義的不對(duì),CH375HFT.C中直接定義成0x0000了,我不知道應(yīng)該怎么改一下它,

我的仿真器選用的是P89C51RD2XX(內(nèi)部有1KRAM),我現(xiàn)在把這三個(gè)文件加在一個(gè)項(xiàng)目后,初始化CH375A返回0,CH375DiskReady( )就過(guò)不去了,如果把CH375DiskReady( )屏蔽,則讀出的文件返回的是0x20,不知道為什么?

還有,因?yàn)榉抡嫘酒?K RAM,那用不用把CH375HFT.C中的變量改一下變成XDATA存儲(chǔ)方式呢?先謝了??!

你看下在使用我們的庫(kù)的時(shí)候編譯產(chǎn)生的RAM(包括內(nèi)部RAM和外部RAM兩部分)是多少,按照你如果是這個(gè)單片機(jī)的話,那么內(nèi)部RAM不能超過(guò)256字節(jié),外部RAM不能超過(guò)1K字節(jié).如果DISK-READY()返回不成功的話,那么除了RAM之外你還需要檢查下你的USB的2根信號(hào)線是否連接正確,USB口供電是否充足(5V)等等,都可能導(dǎo)致DISK-READY操作不正常.


*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?CH375FILEMODIFY?CH375MAI

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?CH375BYTEREAD?CH375BYT BL51 BANKED LINKER/LOCATER V5.12 05/04/2009 11:27:02 PAGE 13

Program Size: data=121.5 xdata=541 code=9951 LINK/LOCATE RUN COMPLETE. 2 WARNING(S), 0 ERROR(S)

這是編譯后的結(jié)果,如果磁盤準(zhǔn)備不成功的話,硬件肯定有問(wèn)題??


CH375DiskReady( )這個(gè)函數(shù)的返回值是多少?


返回的是0x20


按照上面所說(shuō)的去檢查下,如果檢查無(wú)任何問(wèn)題的話在考慮軟件上面的問(wèn)題


一定要確保你的MCU的資源是足夠的,另外看一下DISKBASEBUF里面的數(shù)據(jù)是多少,便于我們分析錯(cuò)誤出現(xiàn)在什么地方.


謝謝大家的回復(fù),我仔細(xì)檢查了一下硬件,CH375DiskReady( )現(xiàn)在可以過(guò)去了,是我硬件的問(wèn)題,但是,還是下面的語(yǔ)句過(guò)不去,如果跟蹤ddd=0,程序一直在不停的 mDelaymS( 100 ); #if DISK_BASE_BUF_LEN if ( DISK_BASE_BUF_LEN < CH375vSectorSize ) { printf( "Too large sector size\n" ); ddd=CH375DiskConnect( ); while ( CH375DiskConnect( ) == ERR_SUCCESS ) mDelaymS( 100 ); continue; } #endif

如果我把上面這段都屏了,還是打開(kāi)文件返回0x1f

我覺(jué)得還是RAM大小的問(wèn)題,我現(xiàn)在選的是帶1KRAM的單片機(jī),不知道程序中 #define DISK_BASE_BUF_ADDR 0x0000應(yīng)該怎么改一下呀?

還有KEIL的存儲(chǔ)模式我設(shè)的是SMALL,設(shè)成LARGE時(shí),CH375A初始化都過(guò)不去,程序中變量前用不用加X(jué)DATA???

請(qǐng)大家一定幫幫忙,謝謝了?。?/p>


 首先確定U盤扇區(qū)的大?。骄W(wǎng)上下載WINHEX軟件,查看U盤的扇區(qū)大小  然后測(cè)試一下你的磁盤數(shù)據(jù)緩沖區(qū)是否可以正常讀寫,也可以不定義DISK_BASE_BUF_ADDR 由編譯器自動(dòng)分配


下面是我的截圖,是不是磁盤扇區(qū)大小為512, 怎么看磁盤扇區(qū)讀寫是否正確呢?謝謝[Emot]1[/Emot]


1.磁盤數(shù)據(jù)緩沖區(qū)的大小不得少于U盤扇區(qū)的大小,一般都是512字節(jié),不排除有大扇區(qū)U盤的存在 2.往磁盤數(shù)據(jù)緩沖區(qū)中寫一些特殊數(shù)據(jù),比如0x55,0xaa....然后在讀取出來(lái),看讀的數(shù)據(jù)和你寫入的數(shù)據(jù)是否一致


BYTES PER SECTOR 512


我在程序的開(kāi)始這樣測(cè)了一下磁盤數(shù)據(jù)緩沖區(qū),不知道對(duì)不對(duì),請(qǐng)指教 main( ) { UINT8 i, month, hour,ddd; UINT16 date, adc, len; LED_OUT_INIT( ); LED_OUT_ACT( ); /* 開(kāi)機(jī)后LED亮一下以示工作 */ mDelaymS( 100 ); /* 延時(shí)100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 為了讓計(jì)算機(jī)通過(guò)串口監(jiān)控演示過(guò)程 */ printf( "Start\n" );

for(len=0;len<500;len++) ////這里就是我加的測(cè)試語(yǔ)句 DISK_BASE_BUF[len]=len;

但是,我在觀察窗口中看到的DISK_BASE_BUF的數(shù)據(jù)都是0X14, 請(qǐng)問(wèn)我這么測(cè)試磁盤緩沖區(qū)對(duì)不?(如果仿真器設(shè)成軟件仿真讀出的數(shù)據(jù)就是正確的)

急死了


運(yùn)行完打開(kāi)文件子程序后,DISKBASEBUF的數(shù)據(jù)都是0X14

請(qǐng)高手指點(diǎn)呀?。Emot]20[/Emot]


是不是仿真器不正常呢,直接下載程序到芯片中,從串口打印出來(lái)看看


 這樣測(cè)試是可以的,但數(shù)據(jù)是錯(cuò)的,單片機(jī)的內(nèi)部XDATA是不是需要設(shè)置一下,才可以啟用


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频