无法读回数据

[b]文字[/b]我向CH375发出DISK_SIZE命令后,再发出RD_USB_DATA命令,读回来的数据怎么为0x15,请高手们告知一下。[Emot]1[/Emot]

(1)DISK_SIZE命令之前,DISK_INIT成功没 (2)DISK_SIZE成功没


正确的流程不是这样的,发出DISK_SIZE命令之后会有一个中断状态给出,判断成功之后在去发读命令,然后读数据.0X15是检测到连接中断,这样你在读容量之前去获取一下中断状态,以便把上一个中断状态消除掉.再发DISK_SIZE命令.


如果DISK_INIT没有成功,可能的情况有哪些?如果是优盘不能识别,怎样处理?


正确的流程不是这样的,发出DISK_SIZE命令之后会有一个中断状态给出,判断成功之后在去发读命令,然后读数据

我是这样做的。


可能的情况有硬件也有软件的问题.硬件包括供电不足,UD+上的电压偏低等等.软件性的问题一般来说前面的延时会有问题.你先去实验一下,给我们一个详细的结果这样才好解决问题.


(1)对于出错,一般是通过返回值来分析出错原因,且必须知道哪一步出错了,建议监控每一个命令的执行结果 (2)操作U盘需要一个流程,网上下载CH375EVT.ZIP,参考\PUB\MCS51C\MISCELL目录下的示例


还有什么原因没?查DISK_INIT也初始化成功,返回值为0X14(USB_INT_SUCCESS)。送出DISK_SIZE命令后成功返回,值为0X14,再发出RD_USB_DATA命令,返回值为0,按手册上介绍的应该为8。与优盘有关系没?


DISK_SIZE命令成功后,关于U盘容量的数据就已经在CH375芯片内部了,常理应该能读到数据 (1)DISK_SIZE重试几次,是否能有正确结果:即命令返回状态为:0x14,且返回数据长度为8 (2)更换U盘试试 


我用的430单片机,串口设置有什么特殊要求没?前面测试结果都对,就是发出RD_USB_DATA命令,返回值始终为0,试过不同的U盘,结果都一样。


你可以参考下面的程序试试,注意要有一定的延时

printf( "DiskSize\n" ); CH375_WR_CMD_PORT(CMD_DISK_SIZE); Delay_uS ( 2 ); //延时2us status = wait_interrupt( ); if (status == USB_INT_SUCCESS) { printf(" success :0x%02x \n",(unsigned short)status); CH375_WR_CMD_PORT(CMD_RD_USB_DATA); Delay_uS ( 2 ); len = CH375_RD_DAT_PORT( ); for (i=0;i!=len;i++) buf[i] = CH375_RD_DAT_PORT( ); printf("disk size: \n"); for(i=0;i!=len;i++) printf("0x%02x ",(unsigned short)buf[i]); printf("\n"); } else printf("disk size error: 0x%02x \n",(unsigned short)status);


len = CH375_RD_DAT_PORT( ); for (i=0;i!=len;i++) len的值是多少?我得到的返回值为0x14


通常情况下 len 的值为8字节, 你得到的返回值 0x14 可能是CMD_DISK_SIZE 命令发送成功后的一个中断状态, 你应该在读完这个中断状态之后,在发读命令,接着在读数据,应该才是 len 的值.


连续发送两次RD_USB_DATA命令,读出来的数据对了,为什么?我的延时时间应该很够。


在操作ch375的时候,写命令和读写数据之间要有几个uS 的延时, 也可能和你的单片机速度有关.


读两个数据之间需要精确延时?两个数据之间改变延时时间会得到不同的容量值,请问是什么原因造成的?


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