我使用CH375模块和MAX232模块相连,没有使用单片机,使用PC做上位机 连接后 使用 0X01命令,0X06命令,都返回07FFFBF 这是为什么啊? 请尽快回复,我在线关注ing 。。谢谢
晕。。怎么没人理我? 我写入0X57 0XAB 0X01 0X00 格式应该没错吧?使用的中断串口程序,和另一个电脑联机是没有问题的,但是发给CH375什么指令都是返回07FFFBF 这是为什么啊???我要急死了。。。555555
你是用PC机直接操作CH375芯片还是串口版U盘读写模块??? (1)操作CH375,你的数据格式错误,具体方法参考CH375手册串口部分 (2)操作模块,你的操作方式错误,具体方法参考CH375HM.PDF
PC 串口 <=> MAX232 <=> CH375 这样应该是可行的啊 。。 我不想用单片机做中间的转接,我是用电脑做了单片机的事情,让电脑直接和CH375通信,而且还返回了数据的,就是不知道为什么,都是一个数据。。
你计算机软件中串口配置是否正确:9600bps,9位通信方式。第9位为1表示命令,为0表示数据。还有你的发送的数据格式也不对,不应该发送0x57,0xAB。例如获取版本的命令,直接发送0x01,等待1.5Us,再从串口读数据就可以了
哦。。你说到发送9位,好像我设置的是起始1,数据8,终止1,那也就是数据只七位?还有我看你们的ExecCommand函数都是先发送57 AB作为通知串口发送命令的啊?
现在我测试了,直接发送0X01 返回FFB7 直接发送0X60 返回0X5F 请问,这是正常的么?该怎么判断这些数据呢? 我使用的CH375B的芯片。
我看了你们网站上的,CH375DS1,发现这些返回数据是对的,当发送0x01是,返回B7,实际版本为37 发送0x60时,返回0X5F,说明操作失败,那么失败的原因可能是?
实在对不起,东西做到这里了,我是又激动又急躁,而且下了你们很多文档,看的我有点晕了,都是375系统,但是命令码都不一样,让我绕了很多圈,呵呵,不管怎么说,感觉你们的技术人员还是比较敬业的。。谢谢你们。。
看了你的描述,你把对CH375B芯片和U盘读写模块的操作混在一起了。 操作CH375B芯片,只要看看CH375DS1.PDF,CH375DS2.PD就可以了
哦,明白了,这样啊。。现在我在看CH375DS1.PDF了,测试了下,那些返回数据的操作都成功了,现在我还有两个疑问: 1 当我发送0X53 DISK_SIZE 命令后,文档里写的是产生中断,我使用的串口3线法,该怎么取得数据呢? 2 能介绍下,一般读取U盘前,对375发送命令的一般顺序吗?
明白了,我先用0X22命令判断下中断的状态,如果为0X14,说明是成功状态,然后用0X28命令取得USB数据缓冲区的数据,这样是对的吧?呵呵。。离成功不远!继续奋斗。。
呃。。又遇到问题了,实在是不想麻烦各位。。不过我倒置了几个小时了,实在是闹不懂这个数据该怎么分析了。
我取得了DISK_SIZE 返回的数据是:8 1 A 68 FD 14 48 20 C0
怎么样才能取出我的磁盘大小呢? 我使用的是爱国者64M(65,244,160字节)
DISK_SIZE的说明是8个字节,但是我要用RD_USB_DATA取出,RD_USB_DATA的格式又是先长度,后数据,但是这个明显数据长度不一致啊。。
返回的数据里那些是有用的??
PS:请尽快点拨一下啊。。我读出的MBR信息也是一片混乱。。和我实际的MBR差别颇多,到底该怎么去除无用信息呢?
项目就要成功了啊..烦请管理员指点一下啊..我怎么样都不能得到准确数据!!
你把操作U盘的流程贴出看看
再次声明,我是用的PC做的上位机,没有使用单片机,375B的TXD,RXD通过RS232接PC232串口上,所以下面的程序是MS-DOS下的C程序代码,可能跟你们的实例程序不同,仅仅是写的得到磁盘大小的东西,返回值在我们上面的帖子中。。。请帮忙分析下吧?
/*Initialize UDisk Unit*/ send_character(0x51); wait_interrupt(); send_character(0x22); tmpLen=wait_interrupt(); if((tmpLen>0)&(buf[0]==0x14)){ if(buf[0]==0x14) printf("Successfully initialize UDisk unit...\n"); } else{ printf("Failed initialize UDisk unit...\n"); exit(0);}
/*Get UDisk unit version*/ send_character(0x01); tmpLen=wait_interrupt(); if(tmpLen>0){ printf("UDisk unit version:"); for(i=0;i /*if((int) buf[i] > 256)*/ buf[i]=buf[i]&0x00ff; printf("\t(Retrun Value:%2x)",(unsigned char)buf[i]); printf("\tActual Version:%2x",((unsigned char)buf[i]&0x3F)); } printf("\n"); } else printf("Error1:Can't get CH375 version.\n");
/*Test UDisk Unit Connection*/ send_character(0x59); wait_interrupt(); send_character(0x22); tmpLen=wait_interrupt(); if(tmpLen>0){ if(buf[0]==0x14) printf("UDisk has been connected...\n"); else{ printf("UDisk is not connect...\n"); exit(0);} } else printf("Error2:Can't connect CH375.\n");
/*Get UDisk Capacity*/ send_character(0x53); wait_interrupt(); send_character(0x28); tmpLen=wait_interrupt(); if(tmpLen>0){ for(i=0;i } else printf("Error3:Can't get disk capacity.\n");
/*Reset all*/ send_character(0x05);
基本上操作都返回成功了,只是得到磁盘容量的时候,数据计算没法进行,第一位返回8,但是后面有九位。。。