CH375B 读写U盘初始化返回值不为0

采用CH375B STC12C5A60S2 并口方式 单片机晶振11.0592 在运行HOST.C时,执行到CH375FileOpen( )时不动了,后来发现初始化CH375的返回值不为0,这是为什么呢?请高手指点。

用HOST.C例程,经常在插入U盘后指示灯闪,按开关键多次才能不闪,偶尔有一次出现了创建文件,但是创建出的是:LCSOFT T.XT 很奇怪,对例程程序没做任何修改。


首先确保你硬件没有问题,上电复位延时50ms之后测一下25脚和26脚电压?然后做一下测试命令,CH375LibInit( ),检测磁盘连接,磁盘初始化一步一步测试通过之后然后再创建文件。


谢谢,硬件连接没有问题,25和26脚电压分别是3.27V和0V。不知道为什么现在又出现这样的问题了?可以读TXT文件的内容,也可以创建文件,但是不能在创建文件里写入要求写的东西,这又是怎么回事呢?


仅仅是换了个U盘,初始化通过,说明不同的U盘会影响初始化结果吗?


上电复位后,正常的话25脚是低电平、26脚是高电平。 写的操作和创建文件、读文件类似。但是需要关闭文件的时候更新文件长度。 库初始化的时候和U盘没有关系,CH375DiskReady是针对磁盘初始化,如果不能通过,请查看一下返回值。


哦,太谢谢了。 我现在往新建的TXT文件中写入“ABC”三个字符,结果只有一个A能显示在文件中,其余的BC不能显示,HOST.C中 mCmdParam.Close.mUpdateLen = 1;说是可以自动更新文件长度的呀。测试MAX_BYTE_IO和C,分别是MAX_BYTE_IO=1d07 c=16647 c=21255 c=17415 c=7。这又是为什么呢?如果要加上 CH375LibConfig |= 0x10;说是可以每次写完数据后会自动修改/更新文件长度。那这句要放在那个位置呢?需要放吗?谢谢


使用mCmdParam.Close.mUpdateLen = 1就可以更新文件长度,也可以在每次写完数据后使用全局变量CH375LibConfig|= 0x10 。MAX_BYTE_IO是单次读写文件时的最大长度,c是每次请求读出的长度,写三个的话c=3。


我用的例程是HOST.C这里的,我把截取的这段程序发给你,麻烦你再帮忙看看为什么只显示第一个a? #ifdef EN_DISK_WRITE /* 子程序库支持写操作 */ /* 产生新文件(覆盖原文件数据),关于向原有文件中添加数据的例子请参考EXAM7和EXAM8 */ LED_WR_NOW( ); /* 写操作 */ printf( "Create\n" ); mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/LCSOFT.TXT" ); /* 新文件名,在根目录下,中文文件名 */ i = CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */ mStopIfError( i ); printf( "Write\n" ); pCodeStr = "asdefrtg"; while( 1 ) { /* 分多次写入文件数据 */ for ( i=0; i c = *pCodeStr; mCmdParam.ByteWrite.mByteBuffer[i] = c; if ( c == 0 ) break; /* 源字符串结束 */ pCodeStr++; } if ( i == 0 ) break; /* 源字符串结束,完成写文件 */ mCmdParam.ByteWrite.mByteCount = i; /* 写入数据的字符数,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后写 */ i = CH375ByteWrite( ); /* 向文件写入数据 */ mStopIfError( i ); } printf( "Close\n" ); mCmdParam.Close.mUpdateLen = 1; /* 自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ i = CH375FileClose( ); mStopIfError( i ); LED_NOT_WR( ); #endif


怎么修改上面这段程序才能让它在新建的TXT文件中显示我想要的所有字符串呢?


第8楼上的程序基本和我们例子程序一样,经过测试是可以创建LCSOFT.TXT文件,并写入asdefrtg。你检查一下你的pCodeStr定义?或者换一个U盘试一下。


好的,非常感谢ZBin. 顺便再问一下:我想实现每次都在原来新建好的文件中,写入新采集到的数据,而不是像例程这样每次再写入新的时,都把原来的给覆盖掉了,我需要怎么做呢?


可以在打开文件之后使用移动文件指针的函数 mCmdParam.ByteLocate.mByteOffset = 0xffffffff; 移到文件的尾部(或者是指定位置) CH375ByteLocate( ); 最好再做写操作。


谢谢ZBin不厌其烦的帮忙,找到了CH375HF.PDF文件,写的都是我想知道的--


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