小弟现在用CH376读写SD卡,遇到个棘手的问题,具体是读取我已经将CH376初始化了,然后打开根目录下的文件,运行了CMD2H_BYTE_READ命令,并写入了字节数,这时中断有时候能返回USB_INT_DISK_READ,有时候不能,而且返回了USB_INT_DISK_READ以后,运行CMD01_RD_USB_DATA0命令以后,再运行两遍xReadCH376Data(),这时候按理应该是输出我所读取的数据的了,但有时能正确返回,有时却不行,有哪位大侠可以赐教一下啊?或者可以给我详细讲讲CH376读取SD卡时的过程,还有CMD01_RD_USB_DATA0这个命令,感觉数据手册上对CMD01_RD_USB_DATA0这个命令讲得不是很清楚啊,谢谢~~~~
下载CH376EVT.ZIP,里面有完整的例程,我们把命令都封装成了函数,只要调用就可以
SD卡初始化有没有通过?你可以参考我们网站上提供的例程操作。
我就是按照CH376EVT.ZIP里面的函数改的,但还是出现这个问题,初始化已经通过了,具体代码如下: while(status!=USB_INT_SUCCESS) status=CH376DiskMount(); status=0; while(status!=USB_INT_SUCCESS) status=CH376FileOpen(buff); status=0; status=CH376ByteLocate(3); CH376ByteReadt(); while(1);
上面代码是初始化没通过或者文件没打开的话都不能进入读那个函数里的。现在都通过了,只是在读的时候返回来的数据有时对有时错,有时候甚至发了CMD2H_BYTE_READ命令后等不到USB_INT_DISK_READ中断。昨天问了一个以前弄过CH376的网友,他说他以前也碰到过这种问题,说是时序有问题,但怎么解决的忘记了。 下面是我自己改的CH376ByteReadt()函数,里面调用的都是CH376EVT.ZIP有的原来的函数。如果成功读取到‘D’字符的话,P3口会输出0xAA。 UINT8 CH376ByteReadt() /* 以字节为单位从当前位置读取数据块 */ { UINT8 s=0; xWriteCH376Cmd(CMD2H_BYTE_READ); xWriteCH376Data(1); xWriteCH376Data(0); s = Wait376Interrupt( ); if(s == USB_INT_DISK_READ) { xWriteCH376Cmd( CMD01_RD_USB_DATA0 ); xReadCH376Data(); TimeDelay(10000);//延时 if(xReadCH376Data()=='D') P3=0xAA; return(USB_INT_SUCCESS); } else return (s); }
我们的例程是经过测试的,移植例程,只要根据你的硬件连接修改底层的接口程序,如PARA_SW.C、PARA_HW.C之类的文件,以及根据单片机主频调整HAL_BASE.C中的延时,其他程序不要做任何修改,测试时监控各个函数的返回值
我也是这个问题,往SD卡里面写文件时正确,但是读出来的数据不对,感觉是跳着读出来的。
读和写的操作流程是一样的,请参考我们提供的程序。