CH372如何判断是否连接PC机

我使用的是CH376芯片,设置为从模式,连接PC机,PC连接正常,显示外部设备!但是我希望在单片机端知道已经连接上PC机,请问,如何操作?    我使用Suspend命令,

void  SetCH376Suspend( void )  

{

  CH376_EXTI_ENABLE();                  /* Enable ch376 Interrupt*/

/* 设备方式: 设置检查USB总线挂起状态的方式 */

/* 输入: 数据10H, 检查方式 */

/*           00H=不检查USB挂起, 04H=以50mS为间隔检查USB挂起, 05H=以10mS为间隔检查USB挂起 */

xWriteCH376Cmd( CMD_CHK_SUSPEND );  

xWriteCH376Data( 0x10 ); 

xWriteCH376Data( 0x04 ); 

xEndCH376Cmd( );

}

然后在中断中处理挂起,好像不起作用,无法判断不出物理,不产生中断!


而资料上讲:USB 总线挂起状态包括两种情况:一是USB 信号线物理断开,完全没有USB信号;二是USB 主机

端停止发送SOF 信号,也就是USB 主机端要求USB设备进入挂起状态。当检查到USB总线挂起状态后,

CH372 将产生USB_INT_USB_SUSPEND 事件中断。


请教了!

你好:

CMD_CHK_SUSPEND这个命令设置是可以让单片机检测到设备挂起的。你的中断开启在这条命令后再执行吧!另外注意供电,如果是主机USB口供电,那么连接供电同时设备没有挂起,拔下USB口后虽然是物理线断开也是挂起但同时单片机是否还有电?

测试时可以这样,外部电源供电单片机+ch376,设置内部固件模式和挂起检测,再打开外部中断。那么上电后就会产出挂起中断,然后USB口连接主机,中断取消。拔出USB连接线,中断再次产生,这应该是整个流程。


谢谢!

我使用USB端口可以连接PC、或者电源适配器,因此希望能将它们区分开来。

昨天我试着用USB_INT_EP0_SETUP、USB_INT_EP0_OUT、USB_INT_EP0_IN等中断事务进行判断。理论上应该可以,PC机枚举时必然有数据的交换,因此只要跟踪到任意一个中断,即可判断是PC机了,但是我发现有时候能产生中断、有时候不行,很不理解!不知能否告知一个办法?

另外,好像CH376资料上没有提供检测PC机是否连接的信息,对吧?


你好:

连接PC,那么ch376是做设备的,查看ch372的手册。检测是否挂起一般就可以代表主机是否连接。如果ch376做主机是可以检测是否有设备连接上的。


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