【发布时间】:2017-10-13 12:56:02
【问题描述】:
它在 ATMega32U4 MCU 上工作正常,但是......当电池供电时,它无法检测到与 USB 的断开连接。它可以检测到重新连接(假),然后是真状态,但不会断开连接。
例如:
bool TEnjoyPad::isUSBConnected()
{
#if defined(UDADDR) && defined(_BV) && defined(ADDEN)
//setDelay( 1000 );
Serial1.println( "--------" );
Serial1.println( UDADDR & _BV(ADDEN), HEX );
//Serial1.println( UDADDR, HEX ); // 97 or 98 hex
//Serial1.println( _BV(ADDEN), HEX );
return (UDADDR & _BV(ADDEN));
#else
return false;
#endif
}
当你看线时:
Serial1.println( UDADDR & _BV(ADDEN), HEX );
打印出来:
Connected: 0x80 (function result = true)
Not connected: 0x00 (function result = false)
它可以检测到从未连接到连接但未连接到未连接(断开)的变化。
有没有简单的解决办法?
2017 年 13 月编辑:
只要弄清楚这一点,它就会起作用,但并非总是如此。在这里找到它: http://forum.arduino.cc/index.php?topic=28567.0
是UDINT寄存器,连接时报16进制(0x10 hex)。
上面这个函数第一个版本的修改版本:
bool TEnjoyPad::isUSBConnected()
{
#if defined(UDADDR) && defined(_BV) && defined(ADDEN) && defined(UDINT) && defined(USBCON)
return ( (UDADDR & _BV(ADDEN)) && (UDINT) );
#else
return false;
#endif
}
但只有在满足这些条件时才有效:
- Device is connected to computer, phone etc
- Device is disconnected from computer, phone etc
例如,如果您使用 USB 电池组,它会报告 true,并且对于某些电池组,断开连接时状态仍然为 true。公交车糊涂了?当您再次连接到计算机、电话等时,它会报告错误,然后是真的,当断开连接时,它会报告错误(应该如此)。
有什么想法吗?和建设USB数据线有关系吗?
在示例中,他们使用了这一行。当我添加它时,它对我没有任何影响:
USBCON = USBCON | B00010000;
2017 年 14 月编辑:
感谢@ralph htp,请参阅下面我发布的答案,也许它也可以帮助其他人。
【问题讨论】:
标签: c connection usb avr cpu-registers