我用的硬件串口读写SD卡,波特率9600,mInitCH376Host( )正常,CH376DiskConnect( )没有使用屏蔽掉了,CH376DiskMount( )正常,CH376ReadBlock( buf )读取的数据不正确,全是0,数据长度也不对,CH376FileOpenPath( SrcName )打开文件老是返回0x44,如果单步执行,有时候可以成功,有时会失败,但是全速就不行,全是回复0x44,单步执行如果成功了,但是到下一步的CopyAndConvertFile( SrcName, TarName )又会出现问题,最好的一次就是创建了"\\NEWFILE.TXT",但是"\\C51\\CH376HFT.C"中的数据没变化。请教这到底改怎么调试啊?
首先确保你CH376DiskMount( )正确通过,返回值应该是0x14.然后你执行一下s = CH376FileOpenPath("\\NEWFILE.TXT") 看一下返回值是多少?有没有创建成功?
我用的exam1,改成的sd卡,CH376DiskMount( )正确通过,返回值是0x14,接着是CH376ReadBlock( buf ),读取到的数据长度是0x14,可是我的文件里就写了7个字符--abcdefg,然后在执行CH376FileOpenPath( SrcName ),就不对了,如果我单步调试有时候会正确,但是大部分是错误的,唯一的一次正确就是创建了"\\NEWFILE.TXT"
CH376ReadBlock( buf )是用来读取INQUIRY命令的返回数据,可以不操作。你可以先调用CH376FileCreatePath创建一个文件看看返回值是多少?
我刚才试了一下,用CH376FileCreatePath创建一个文件,返回值有时候是0x44,有时候是0x14,用CH376FileCreate创建一个文件,无论返回值是0x44还是0xFA还是0x14,都能创建成功,包括.C和.TXT文件,这是怎么回事啊?
CH376FileCreate和CH376FileCreatePath用法类似只是后者支持多级目录下创建。返回0x44和0xFA都是不正确的而且没有0x44这种错误码。
那现在怎么无论返回值是0x44还是0xFA还是0x14,都能创建成功啊,我试了好几次的,确实有文件,名字都不同
那说明你读取的中断状态不正确,感觉你的硬件不是很稳定。你可以测试命令的时候,发个0x55看一下返回值,然后再发个0xAA看一下返回值。
发送0x65,返回0x9A,发送0x9A,返回0x65,都重复了3次,没有错误,出现错误的地方还是CH376FileOpenPath这个函数,很难返回成功,偶尔会出现,CH376FileOpenPath下面调用一个CH376SetFileName函数,这个函数如果我进去执行(就是单步调试进去)基本就会成功,如果全速运行,大部分是不成功的,我感觉是不是程序那里有问题,但是我又不清楚,查询中断我是用的INT#脚接的单片机的一个管脚检测外部中断来判断的。
你是使用什么单片机?单步执行和全速执行的区别在于执行的时间,你可以在读写子函数加一些延时,另外,检测一下执行创建命令有没有中断产生(INT低电平)?
单片机用的STM32的,72M时钟
我调用CH376FileCreatePath( "\\C51\\CH376HFT.C")总是返回0x10,请问是什么回事呢?CH376FileCreatePath( "\\NEWFILE.TXT")就没问题,能够创建成功。
创建指定目录下的文件需要存在那个目录,否则会返回错误。如果创建成功会返回0x14
那我想创建"\\C51\\CH376HFT.C"需要怎么操作?直接调用CH376FileCreatePath( "\\C51\\CH376HFT.C")不行么?我看CH376FileCreatePath( )里面有判断多目录的语句啊?还是我需要先CH376FileCreatePath( "\\C51")然后再CH376FileCreatePath( "\\C51\\CH376HFT.C")?谢谢指点!
你可以这样试一下,在电脑上创建一个C51文件夹,然后、再调用CH376FileCreatePath( "\\C51\\CH376HFT.C") 如果你想通过CH376创建,先调用CH376DirCreate创建一个C51文件夹,然后再调用CH376FileCreatePath( "\\C51\\CH376HFT.C")。
非常感谢,按照这两种方法都能创建成功,但是第二种方法:先调用CH376DirCreate创建一个C51文件夹,然后再调用CH376FileCreatePath( "\\C51\\CH376HFT.C")不行,如果先调用CH376DirCreate创建一个C51文件夹,然后再调用CH376FileCreatePath( "CH376HFT.C")才可以。 但是接下来我写数据时又出现问题了,如果我调用CH376ByteWrite( adsd, 10, NULL ),写进去的数据不正确,比如我adsd中的数据是0123456789,但是文件里面就有一个句号:.,如果我调用CH376ByteWrite( adsd, 1, NULL ),然后在调用CH376ByteWrite( adsd, 10, NULL )写进去的数据正确,但是我看例程中都是只调用一次CH376ByteWrite就行了啊,我这是什么情况啊?我也不敢就这么用了,请指教啊。