我想问一下,现在CH375的动态库能兼容STC11F32XE单片机吗?这种单片机的运行速度是普通51单片机6--24倍,我发现在这种单片机下CH375的初始化都不能正确返回,谢谢!
完全可以,但是需要更换库.推荐是用LIB5,读写函数在外部,只要修改一下读写时序,符合CH375的读写要求就可以了.STC11F32XE这种MCU比一般的MCU最多快12倍.一般只快3倍左右.
CH375的读写操作有时序要求:命令后延时1uS,数据后延时0.6uS,这些参数参考CH375DS1.PDF中7.3. 时序参数 建议楼主把CH375DS1.PDF,CH375HF.PDF详细阅读一下,这些是读写U盘最基础的资料,也有利于碰到问题时分析解决
好的,谢谢!
我刚才把读写子程序改了一下,现在是CH375初始化可以,U盘插入时小灯也亮了,但是再往下走就过不去了,下面的子程序:CH375DiskReady( ),CH375DiskConnect( )等程序都看不到了,因为,时序图我不太会看就按其它的例子程序给加了点延时,请帮忙看看对不对,谢谢 void Delay2us( ) { UINT8 i; for ( i=10; i!=0; i-- ); //_Nop_();_Nop_();_Nop_(); } void xWriteCH375Cmd( UINT8 mCmd ) { TI = 0; TB8 = 1; Delay2us();Delay2us(); SBUF = mCmd; Delay2us();Delay2us(); while ( TI == 0 ); }
void xWriteCH375Data( UINT8 mData ) { TI = 0; TB8 = 0; SBUF = mData; Delay2us(); while ( TI == 0 ); }
UINT8 xReadCH375Data( void ) { Delay2us(); while ( RI == 0 ){ WDT_CONTR=0x33; } RI = 0; return( SBUF ); }
串口不要加延时.原因很简单 假设CH375把数据通过串口发送出来了,但是MCU在延时,错过了.那么也就永远收不到数据了.会死机.
那就是UINT8 xReadCH375Data( void )不要加延时对吧? 我的程序走到检测U盘是否准备好就过不去了。请指教,谢谢!
都不要加延时. 测试命令已经通过?中断引脚是否正确设置? 另外你可以设定超时退出.退出后,查看一下DISK_BASE_BUF中的内容.
我用普通51单片机可以往U盘中写入数据,但是,我的系统必须用STC11F32XE这个单片机,它的速度很快,如果我不改这些子程序就连CH375初始化都过不去,我现在改后是初始化能过去,U盘插入时能检测到,但是,U盘始终是没有准备好,我把这段屏了后,直接CH375FileOpen( )也是不对的:(
CH375DiskReady( ) 返回值是多少? UINT8 xReadCH375Data( void ) { UINT16 cnt; for(cnt=50000;cnt!=0;cnt--) { if(RI) { RI = 0; return SBUF; } } return 0; }
我想问一下如果我用STC11F32XE单片机,CH375是串口方式这三个子程序:void xWriteCH375Cmd( UINT8 mCmd ),void xWriteCH375Data( UINT8 mData ),UINT8 xReadCH375Data( void )还用改动吗?因为,波特率已经设定了,但是资料上写的数据和命令都是有时间间隔的,51单片机比较慢可以不加延时,是不是STC11F32XE还是得加一定的延时呢?我说的是串口方式,谢谢!
串口方式不需要加延时的,因为本身串口速度就比较慢。
谢谢各位的回复,上问题解决了,在程序中检测INT脚时要加点延时:)