USB 连接的“信号量超时期限已过”错误
Posted
技术标签:
【中文标题】USB 连接的“信号量超时期限已过”错误【英文标题】:"The semaphore timeout period has expired" error for USB connection 【发布时间】:2012-12-09 13:59:07 【问题描述】:我收到此错误...
信号量超时期限已过。
在这条线上……
ThePorts.ActivePort1.Open();
...但我只是偶尔会得到它。当它发生时,它会一遍又一遍地发生。然后问题消失了,几个小时或几天,然后又回来了。
串行端口是连接蓝牙的 USB。
我认为这家伙遇到了一个非常相似的问题,但不是在 C# 中
Freeze on SerialPort.Open / DeviceIoControl / GetcommState with usbser.sys
尽我所能估计,我已经阅读了他的整个问题,以及由此产生的 cmets 和答案,但我真的无法弄清楚是哪一个解决了他的问题,或者 C# 是否与他所经历的有很大不同.
感谢您对无知者的任何帮助。这是实际发生的代码。
public static void Open_ActivePortWeWillUse(String Drone_StringNameFromUser)
SerialPort TempSerialPort = new SerialPort(Drone_StringNameFromUser, (int) SerialPortSpeed);
ThePorts.ActivePort1 = TempSerialPort;
ThePorts.ActivePort1.DataBits = 8;
ThePorts.ActivePort1.Parity = Parity.None;
ThePorts.ActivePort1.StopBits = StopBits.One;
ThePorts.ActivePort1.DataReceived += new SerialDataReceivedEventHandler(OurBackGroundSerialPortReceiver);
ThePorts.ActivePort1.Open(); // "Sometimes" Error hits here
【问题讨论】:
这是一个低级 Windows 错误,ERROR_SEM_TIMEOUT,错误代码 121。高度特定于使用信号量的代码。 .NET SerialPort 类不在任何地方使用信号量。您正在使用的模拟串行端口的蓝牙驱动程序肯定正在使用一个,它是本机代码中使用的常见同步对象。有错误的驱动程序出现这类问题并不罕见。 除了之前的评论:在您正在工作的级别(.NET 客户端)上,您无法使用有缺陷的串行端口驱动程序做任何事情。在您链接的帖子中,真正的答案在 cmets 中:“问题源于设备的固件故障”。 谢谢汉斯和亚历克斯。不知道我是否找到了答案,但我 THINK 这个页面((eHow Page On Misbehaving USB hubs)) 解释了该怎么做。虽然这不是我在整个互联网上最喜欢的,但如果它给了我答案,那就好了;随便。 3 小时后仍然可以。我应该发布答案吗? 【参考方案1】:我有一个类似的问题,我通过更改端口驱动程序中的端口设置(位于设备管理器的端口中)以适应我正在使用的设备。
对我来说,设置了错误的每秒位数。
【讨论】:
【参考方案2】:一口气处理了太多大文件。 Windows barfs。本质上,复制花费了太长时间,因为您对计算机的要求太多,并且文件锁定被锁定的时间太长并且设置了一个标志,该标志是一个信号量错误。
计算机自己塞住并窒息了。我看到这里的 RAM 内存逐渐被 RAM 中的缓存填充。然后当填充子系统时,由于信号量错误而停止。
我有一个解决方法;复制或传输更少的文件,而不是一个巨大的块。将其分解为多组块并一次发送一个文件,可能一次发送几个文件,但绝不是很多。
参考资料:
https://appuals.com/how-to-fix-the-semaphore-timeout-period-has-expired-0x80070079/
https://www-01.ibm.com/support/docview.wss?uid=swg21094630
【讨论】:
【参考方案3】:在与 Arduino Leonardo 通信时,我在两台不同的 Windows 计算机上也遇到了这个问题。可靠的解决方案是:
在设备管理器中找到 COM 端口并打开设备属性。 打开“端口设置”选项卡,然后单击高级按钮。 在那里,取消选中“使用 FIFO 缓冲区(需要 16550 兼容的 UART)”框,然后按 OK。很遗憾,我不知道这个功能有什么作用,或者它如何影响这个问题。在几次 PC 重新启动和十几个设备连接循环之后,这是唯一可靠地解决了该问题的方法。
【讨论】:
是的 - 将一个字节写入 USB 串行端口。重试 14 次后工作;)所以只需将 FIFO 发送缓冲区设置为 1(即禁用它)【参考方案4】:如果您遇到网络延迟或互联网或本地网络问题,也可能会出现此错误。对应失败的桥接连接也可能是罪魁祸首。
【讨论】:
【参考方案5】:好的,我现在连接没有信号量超时问题。
如果有人在阅读时遇到过同样的事情,我希望这个程序对你有用;但没有承诺;嘿,是窗户。
在我的例子中,这是 Windows 7
我从This page 那里得到了一点关于 eHow 的提示;不确定这是否对任何人都有帮助。
不管怎样,这就是对我有用的简单的 23 步程序
点击开始按钮
选择控制面板
从控制面板中选择设备管理器
从设备管理器中,选择通用串行总线控制器
在通用串行总线控制器中,单击侧面的小三角形
我无法预测您会在计算机上看到什么,但在我的计算机上我得到了一个长长的下拉列表
开始调查,找出此列表中的哪一个成员是罪魁祸首...
在下拉列表的每个成员上,右键单击名称
将打开一个列表,选择属性
猜测时间:使用打开的结果窗口顶部附近的各种选项卡,猜测这是否是 USB 适配器驱动程序因信号量超时而阻塞您的东西
做出正确猜测后,关闭 USB 根集线器属性窗口(但保持设备管理器窗口打开)。
从该 USB 集线器物理断开任何东西。
拔掉它。
将鼠标指针返回到您之前确定的列表中的那个 USB 根集线器。
再次右击
选择卸载
让 Windows 做自己的事
稍等
如果有时间,请关闭整个计算机;有人说这是必需的。我想我没有它就逃脱了。
将 USB 集线器插回 PC 上的 USB 连接器
如果设备管理器中的列表闪烁并闪烁几下,没关系。
将蓝牙连接器插回 USB 集线器
让 windows 做更多的事情
在两分钟内,我的 COM 端口再次正常工作,没有信号灯超时。
希望它适用于可能遇到类似问题的其他人。
【讨论】:
不,再次修复。谁能建议发生了什么? 当我的 *** 连接超时时,我得到了这个。我只需要重新连接即可更正它。 我断开了鼠标的连接,无法继续执行您提到的最后几点? :) 我有时会从蓝牙端(因此不涉及远程 USB 端)使用蓝牙串行设备(Microchip/Roving RN42 评估套件)出现此错误。一两次重试后,COM口通常打开,可以发送数据。这是在 Windows 10 1809 上,带有内置的 MS 蓝牙驱动程序。所以它看起来像是蓝牙 COM 端口仿真的神器。以上是关于USB 连接的“信号量超时期限已过”错误的主要内容,如果未能解决你的问题,请参考以下文章
大疆御遥控器改增强信号的模块,在下面usb取电,导致侧usb口连接不上手机,怎么解决?
virtualbox安装xp虚拟机,加载了usb无线网卡,但是找不到那个无线网络连接,那个显示信号强度的东西?