CH376初始化失败

mInitCH376Host( void )这个函数运行的时候,测试通讯是对的,但是后面的设备工作模式输出的res不对,这是什么问题啊? 意思是我的初始化程序这段res输出是0x9A u8 res; xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */ xWriteCH376Data( 0x65 ); res = xReadCH376Data( ); xEndCH376Cmd( ); // 结束通信测试 if ( res != 0x9A ) { USART1_SendByte(0xe1); return( ERR_USB_UNKNOWN ); /* 通讯接口不正常,可能原因有:接口连接异常,其它设备影响(片选不唯一),串口波特率,一直在复位,晶振不工作 */ }

但是运行到这里的时候res输出确是0x86了 xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 设备USB工作模式 */ xWriteCH376Data( 0x06 ); // 模式代码为0x06,表示切换到已启用的USB主机方式,自动产生SOF包 mDelayuS( 20 ); res = xReadCH376Data( ); // 返回操作状态 xEndCH376Cmd( );

设置模式的流程和测试命令的流程是一样的,后面过不了的话测试命令应该过不去,检查一下你的硬件连线和接口时序。


我刚试了下,要在测试命令之前加上一段CH376_RET命令测试命令才会通过,这是怎么回事? CH376_RST=1; delay_ms(20); CH376_RST=0; delay_ms(100); xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 设备USB工作模式 */ xWriteCH376Data( 0x06 ); // 模式代码为0x06,表示切换到已启用的USB主机方式,自动产生SOF包 mDelayuS( 20 ); res = xReadCH376Data( ); // 返回操作状态 xEndCH376Cmd( ); 这个时候返回的值才是对的?


可能你上电复位延时不够复位没有完成。


好像没用啊,我上电复位改成也没用啊 CH376_RST=1; delay_ms(1000); CH376_RST=0; delay_ms(1000);


建议你使用测试命令检测下你的硬件是否有问题,如果测试命令返回数据有问题,则检查你的硬件连线。例如发送0X55数据,读取到的数据应该为0XAA。如果不为0XAA而是0XA8的话,那么需要检查D1信号线是否有问题。


测试命令是能通过的,我试了几个,都是可以通过的,但是初始化里的另外一个设置模式返回值必须得再一次复位才行啊,但是这样做就不对了啊 CH376_RST=1; delay_ms(20); CH376_RST=0; delay_ms(100);


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