[求助]时序问题?

这几天调试ch376,发现每次“写命令”和“写数据”都需要延时30毫秒才能正常创建文件并写入信息到文件,我延时5us无法创建文件,mStopIfError( s )也不报错。 我看手册上写的“写命令”和“写数据”延时超过0.6us或者1.5us就可以了啊。 请问这是咋回事啊?

把你的时序程序贴上来看看


#include #include

#include "HAL.H" #include "DEBUG.H" #include "FILE_SYS.H"

UINT8 buf[64];

Udisk( ) { UINT8 i, s; P_FAT_DIR_INFO pDir; UINT8 SrcName[64]; UINT8 TarName[64]; mDelaymS( 100 ); /* 延时100毫秒 */

printf( "Start\n" );

s = mInitCH376Host( ); /* 初始化CH376 */ mStopIfError( s ); /* 其它电路初始化 */

while ( 1 ) { printf( "Wait Udisk/SD\n" ); while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */

/* 对于检测到USB设备的,最多等待100*50mS,主要针对有些MP3太慢,对于检测到USB设备并且连接DISK_MOUNTED的,最多等待5*50mS,主要针对DiskReady不过的 */ for ( i = 0; i < 100; i ++ ) { /* 最长等待时间,100*50mS */ mDelaymS( 50 ); printf( "Ready ?\n" ); s = CH376DiskMount( ); /* 初始化磁盘并测试磁盘是否就绪 */ if ( s == USB_INT_SUCCESS ) break; /* 准备好 */ else if ( s == ERR_DISK_DISCON ) break; /* 检测到断开,重新检测并计时 */ if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ) break; /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */ } if ( s == ERR_DISK_DISCON ) { /* 检测到断开,重新检测并计时 */ printf( "Device gone\n" ); continue; } if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) { /* 未知USB设备,例如USB键盘、打印机等 */ printf( "Unknown device\n" ); goto UnknownUsbDevice; } i = CH376ReadBlock( buf ); /* 如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盘的厂商和产品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); }

strcpy( TarName, "\\NEWFILE.TXT" ); /* 目标文件名 */ printf( "Create\n" ); s = CH376FileCreatePath( TarName ); /* 新建多级目录下的文件,支持多级目录路径,输入缓冲区必须在RAM中 */

mStopIfError( s ); printf( "Write\n" ); strcpy( buf, "这是个测试文件,看看能不能把数据写进u盘\xd\n" ); s = CH376ByteWrite( buf, strlen(buf), NULL ); /* 以字节为单位向当前位置写入数据块 */

mStopIfError( s ); printf( "Close\n" ); s = CH376FileClose( TRUE ); /* 关闭文件,对于字节读写建议自动更新文件长度 */ mStopIfError( s ); printf( "U disk operation is complete!\n" );

UnknownUsbDevice: printf( "Please remove U disk!\n" ); while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ mDelaymS( 100 ); } mDelaymS( 200 ); } }


我发现主要问题就是出现在s = CH376FileCreatePath( TarName )上,要是延时小于30ms根本就不能创建文件,而且s返回值是正确的,并无报错信息。 这是打印信息: Start Wait Udisk/SD Ready ? Create Close U disk operation is complete!

但是u盘里就是啥也没有!

但是要是“写命令”和“写数据”延时30ms,u盘里就会有NEWFILE.TXT了。但是这样的速度无法满足项目要求啊!

请帮帮忙分析一下,谢谢了。


我的硬件平台是DSP5000系列。时钟跑到108M。


请沁恒的工程师帮忙分析一下吧,先谢谢了。


既然你测试到这一步了,则问题基本确定,时序过快导致的,按照CH376DS1时序说明去做。30MS是不会的,说明你的延时不准。


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