跪求高人指点!

我在调试对 U 盘物理读写时,发现程序运行的不是很稳定! 在插入 U 盘之前对 CH375 进行初始化设置和设置主机模式时,或者刚插入 U 盘之时,有时会出现程序跑飞的现象,或者停在 xWriteCH375Cmd( UINT8 mCmd )中的 PORTA=mCmd 命令行就不动了! 我使用的是虚拟 I/O 总线控制,xWriteCH375Cmd( )函数编写如下: void xWriteCH375Cmd( UINT8 mCmd ) { DDRA=0xFF; A0=1; PORTA=mCmd; WR=0; CS_HOST=0; WR=0; // 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS CS_HOST=1; WR=1; A0=0; mDelay1uS( ); mDelay1uS( ); // 至少延时2uS } xWriteCH375Data( UINT8 mData ) 和 xReadCH375Data(void) 类似,使用 WR=0 命令来延时,出现上述不稳定现象!但能够正常工作时,可以执行 mReadSector( ) 和 mWriteSector( ) 函数,只是 DATA_BUFFER[521] 中读出的 #0 扇区的数据不完整,很多数据变成了0x00,指定的扇区中也没有任何数据被写入!并且状态参数 CH375DiskStstus = 0x03 (磁盘已经初始化成功,但是尚未分析文件系统或者文件系统不支持)! 之前,xWriteCH375Cmd( ),xWriteCH375Data( ) 和 xReadCH375Data( ) 里使用的是 CH375HQF.H 头文件中提供的 xDelay100uS( void )函数来代替 WR=0 命令用来延时: void xWriteCH375Cmd( UINT8 mCmd ) { DDRA=0xFF; A0=1; PORTA=mCmd; WR=0; CS_HOST=0; xDelay100uS( );// 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS CS_HOST=1; WR=1; A0=0; mDelay1uS( ); mDelay1uS( ); // 至少延时2uS } 但是,在这种情况下,虽然可以保证程序不会跑飞,但是却无法运行 mReadSector( ) 和 mWriteSector( ) 函数,或者运行后返回错误代码! 请问出现上述不稳定的工作现象,是否还是因为延时指令设置不当所导致的?如果是,请问到底应该如何延时才合适? 另外,我执行了 mInitDisk( ) 函数和 CH375DiskReady( ) 函数,并且返回值也是正确代码,应该可以视为 U 盘枚举成功了,可为什么 CH375DiskStstus = 0x03 (磁盘已经初始化成功,但是尚未分析文件系统或者文件系统不支持)?请问这是何原因?应该如何解决?

你这个时序有问题啊,按照你这样的做法,可能通信都有问题: void xWriteCH375Cmd( UINT8 mCmd ) { DDRA=0xFF; A0=1; PORTA=mCmd; CS_HOST=0; WR=0; WR=0; // 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS WR=1; CS_HOST=1; A0=0; mDelay1uS( ); mDelay1uS( ); // 至少延时2uS } 我们的数据采样点在WR的上升延,也就是说,在WR的上升延的时候,写命令的话,A0=1,CS=0,命令要在数据端口,按照你上面的时序,可能命令是写不下去的,也就出现了你操作不稳定的现象


执行到该句 PORTA=mCmd 命令行就不动了! 在void xWriteCH375Cmd( UINT8 mCmd ) 函数中没有使你的程序跑飞的语句, 我认为这是你的系统本身不稳定,是不是无意触动了中断,造成你的程序跑飞.


感谢两位高人的指点! 我使用的单片机是 MOTO 的 MC9S12D64 ,我写上述命令的时候参考过 MC9S12D64 的芯片说明,之所以把 WR=0 放在 CS_HOST=0 之前,把 WR=1 放在 CS_HOST=1 之后,是看到该芯片说明书中的参考逻辑时序图中是这么画的!他图中的 WR 信号下降沿在 CS 下降沿之前,WR 信号上升沿在 CS 上升沿之后! 我也参考了 CH375 芯片的说明书,其中给出的参考时序图中,片选信号 CS 与 WR 或 RD 是用同一信号序列表示的,并没有明显说明 CS 信号和 WR(或RD) 信号,哪个应该在前,哪个应该在后,所以我就按照单片机的参考时序来编程了! 请问,编写底层通讯的时序时,到底是应该根据单片机的时序来编写,还是应该按照 CH375 的时序来编写?谢谢!再次表示感谢!


应按照CH375的时序来写,否则你怎么控制CH375呢


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