CH375A文件级应用

各位高手: 我现在用EXAM7中的C程序,用CH375HF4.lib和CH375HF4.H读U盘的数据,还是不成功,我看了很多网上的贴子,说如果打不开文件的话多是磁盘空间定义的不对,CH375HFT.C中直接定义成0x0000了,我不知道应该怎么改一下它,

我的仿真器选用的是P89C51RD2XX(内部有1KRAM),我现在把这三个文件加在一个项目后,初始化CH375A返回0,CH375DiskReady( )就过不去了,如果把CH375DiskReady( )屏蔽,则读出的文件返回的是0x20,不知道为什么?

还有,因为仿真芯片有1K RAM,那用不用把CH375HFT.C中的变量改一下变成XDATA存储方式呢?先谢了!!

你看下在使用我们的库的时候编译产生的RAM(包括内部RAM和外部RAM两部分)是多少,按照你如果是这个单片机的话,那么内部RAM不能超过256字节,外部RAM不能超过1K字节.如果DISK-READY()返回不成功的话,那么除了RAM之外你还需要检查下你的USB的2根信号线是否连接正确,USB口供电是否充足(5V)等等,都可能导致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)

这是编译后的结果,如果磁盘准备不成功的话,硬件肯定有问题??


CH375DiskReady( )这个函数的返回值是多少?


返回的是0x20


按照上面所说的去检查下,如果检查无任何问题的话在考虑软件上面的问题


一定要确保你的MCU的资源是足够的,另外看一下DISKBASEBUF里面的数据是多少,便于我们分析错误出现在什么地方.


谢谢大家的回复,我仔细检查了一下硬件,CH375DiskReady( )现在可以过去了,是我硬件的问题,但是,还是下面的语句过不去,如果跟踪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

如果我把上面这段都屏了,还是打开文件返回0x1f

我觉得还是RAM大小的问题,我现在选的是带1KRAM的单片机,不知道程序中 #define DISK_BASE_BUF_ADDR 0x0000应该怎么改一下呀?

还有KEIL的存储模式我设的是SMALL,设成LARGE时,CH375A初始化都过不去,程序中变量前用不用加XDATA???

请大家一定帮帮忙,谢谢了!!


 首先确定U盘扇区的大小.到网上下载WINHEX软件,查看U盘的扇区大小  然后测试一下你的磁盘数据缓冲区是否可以正常读写,也可以不定义DISK_BASE_BUF_ADDR 由编译器自动分配


下面是我的截图,是不是磁盘扇区大小为512, 怎么看磁盘扇区读写是否正确呢?谢谢[Emot]1[/Emot]


1.磁盘数据缓冲区的大小不得少于U盘扇区的大小,一般都是512字节,不排除有大扇区U盘的存在 2.往磁盘数据缓冲区中写一些特殊数据,比如0x55,0xaa....然后在读取出来,看读的数据和你写入的数据是否一致


BYTES PER SECTOR 512


我在程序的开始这样测了一下磁盘数据缓冲区,不知道对不对,请指教 main( ) { UINT8 i, month, hour,ddd; UINT16 date, adc, len; LED_OUT_INIT( ); LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start\n" );

for(len=0;len<500;len++) ////这里就是我加的测试语句 DISK_BASE_BUF[len]=len;

但是,我在观察窗口中看到的DISK_BASE_BUF的数据都是0X14, 请问我这么测试磁盘缓冲区对不?(如果仿真器设成软件仿真读出的数据就是正确的)

急死了


运行完打开文件子程序后,DISKBASEBUF的数据都是0X14

请高手指点呀!![Emot]20[/Emot]


是不是仿真器不正常呢,直接下载程序到芯片中,从串口打印出来看看


 这样测试是可以的,但数据是错的,单片机的内部XDATA是不是需要设置一下,才可以启用


只有登录才能回复,可以选择微信账号登录