CH376我已经用ACT引脚,中断触发的方式实现了U盘拔插,但是消耗两个外部中断引脚。我这个思路是软件不停的查询U盘连接状态,不知道效率是否可行,我大体程序如下 volatile bit flag=1;//U盘插入的标志位 if(flag) //flag为状态切换标准 normal( );//正常模式 else weak( );//低功耗 normal() { init_1();//U盘初始化 while(1) { duxie();//U盘操作 xWriteCH376Cmd(CMD_TEST_CONNECT);//测试连接 delay_us(2); if(xReadCH376Data()== USB_INT_DISCONNECT)//是否为连接成功 { flag=0; break; } } } week() { init_2();//U盘初始化 while(1) { other();//U盘拔插操作 xWriteCH376Cmd(CMD_TEST_CONNECT);//测试连接 delay_us(2); if(xReadCH376Data()!= USB_INT_DISCONNECT)//是不为连接成功 { flag=1; break; } } }
一般隔几百个毫秒查询就可以了,不需要通过ACT引脚来检查插拔事件,可以发送CMD0H_DISK_CONNECT命令来检查磁盘连接,该命令会产生中断,单片机通过获取中断状态 就可以方便的查询设备连接事件。
说明书没说这命令会产生中断 引用: 该命令用于在 USB 主机方式下查询当前 USB 设备的连接状态。通常情况下,该命令在 2uS 时间之 内完成。完成后输出 USB_INT_CONNECT、USB_INT_DISCONNECT 或者 USB_INT_USB_READY 三种状态之一, 状态 USB_INT_CONNECT 说明 USB 设备刚连接或者已经连接但尚未初始化,状态 USB_INT_DISCONNECT 说明 USB 设备尚未连接或者已经断开,状态 USB_INT_USB_READY 说明 USB 设备已经连接并且已经被初 始化(已经分配 USB 地址),输出 0 说明该命令尚未完成,可以稍后再读取状态。
CMD0H_DISK_CONNECT 是我们提供程序上的宏定义, 在说明书上面名字是DISK_CONNECT
命令 CMD_TEST_CONNECT(0X16) 该命令用于在 USB 主机方式下查询当前 USB 设备的连接状态。 CMD_DISK_CONNECT (0x30) 该命令用于检查磁盘是否连接 这两个用哪个循环查询?
如果是检测设备连接的话,用0X30的命令来检测。
请问一下啊,进行U盘检测的时候,不管我插没插U盘,用逻辑分析测出CH376的INT#是51.us脉宽的低电平,然后569ms高电平,一直这样持续下去。很着急,有没有人知道为什么?
您好,在保证376硬件环境正常的情况下,INT是有内部上拉的,测试时是否保证INT是在悬空状态下,还是说有和主控的IO或其他引脚有硬件连接呢,如果是,可能是被外部IO拉低导致