我用的MC9S08控制CH372B,内置固件模式,实现并口转USB功能。为何读数据/状态时,最高位始终是1,6~0位是正确的。我发送命令、数据CH372B的响应是正常的。更换了一片CH372B问题一样。
您好,您可以确认以下几点:
确认两颗芯片之间并口通讯是否正常,即发送读获取版本号命令,其次您设置为内置固件模式,电脑是否正确识别到了372设备。
关于读取数据的时候,您的MCU(控制芯片)IO的输入配置是否正确。
检查硬件电路,D7脚的连接是否正常,以及查看读取数据的程序是否哪里有错误的操作。
您好,谢谢您及时的解答:
1、两颗芯片通讯完全正常,我给CH372写入的数据和命令都正常,读出数据0~6位也正常,就第7位读出一直为1;我都用你们的调试软件试过,即单片机收到数据后,原样返回;如果忽略第7位数据,全部正常。电脑识别372设备正常;
2、我最不解的是为何同一个并口,只有1位会有问题?
2、我比较疑惑的是,我的IO口是8位口,都是统一操作的,为何会出现只有1位不正常?更换过CH372B,问题依旧。
我又进行了如下实验:
上电后,不进行任何设置,直接读取并口数据。按照数据手册的描述,读出数应该是0,但是读到的是0x80。我用示波器测量D7信号,确实始终是高电平。而D0~D6,在RD信号为低时,会输出低电平,RD信号为高时,会恢复到高电平。我又将单片机和D7连接的引脚断开,D7也始终是高电平。最后我又将D7接到另一个输入口上,读到的也始终是1,实在没有办法了。
总之,就是上电后,我只执行读取操作,D7和D6~D0的效果就不一样。
读数子程序:
byte ch372_data_read(void)
{
volatile byte recv_data1;
PTHDD=0x00; //port input mode
DATA_WR; //A0=0
CH372_RD_EN; //RD=0;
DELAY(1);
SRS=0x00;
recv_data1=PTHD;
CH372_RD_DIS; //RD=1;
return recv_data1;
}
以上是CH372电路,I/O引脚和MCU引脚直连
您好,看您的原理图,这边CH372的最小系统图是没有问题的。关于您读取数据的函数,请问您CS脚有控制么?读取函数您可以参考这段代码移植过去进行尝试。您也可以把MCU的D7脚接地,然后读取数据,看看是否也是为1.
u8 PortData;
DATA_MODE_IN; //把STM32连接CH375的数据端口配置成输入,读取CH372的数据
delay_us(10); //延时
CS=0; //打开片选
delay_us(10);
A0=0; //数据模式
delay_us(10);
RD=0; //打开读使能
delay_us(10);
PortData = (u8)( GPIO_ReadInputData(GPIO_CH375_Data) ); //读取数据
delay_us(10);
RD=1; //关闭读使能
delay_us(10);
CS=1; //关闭片选
delay_us(10);
A0=1; //恢复A0为高电平
delay_us(10);
return PortData; //返回读到的数据
你好,我想问一些关于CH376的问题:
1、文件属性(创建时间、修改时间等)是在创建文件的时候自动生成的?还是需要我发指令,把这些属性都写到某个固定位置?【我实测发现在PC端显示U盘中文件的创建时间、修改时间都不对,修改时间都是2004.01.01】
2、参照EXAM13例程,读取文件属性返回的长度为32,正确,但属性内容也全部为32,是哪里出错了吗?
你好,我想问一些关于CH376的问题:
1、文件属性(创建时间、修改时间等)是在创建文件的时候自动生成的?还是需要我发指令,把这些属性都写到某个固定位置?【我实测发现在PC端显示U盘中文件的创建时间、修改时间都不对,修改时间都是2004.01.01】
2、参照EXAM13例程,读取文件属性返回的长度为32,正确,但属性内容也全部为32,是哪里出错了吗?
直接修改文件属性是可以成功的,比如直接把文件名的后缀从TXT改为EXL。但是如果要先判断这个文件是不是TXT然后再修改的话,就得先把属性读出来判断,这时读取就会出错。
读到的文件属性32好像一直是前面返回的长度,32对应的字符是space(空格)。
因为我又测了读U盘的厂商信息和产品信息,INQUIRY_DATA结构体类型的大小为36,所以读到的长度也是36正确,紧接着读到的厂商信息和产品信息内容也全是36,对应的字符是$$$$$$$$$$$$$$$$$$$$$$$$$$$$
请问这是哪里的问题呢?望解答!谢谢
您好,正常来说厂商的这些信息都是unicode编码,您可以看一下是否为编码格式问题,导致的乱码显示等。