我正在使用 openwrt (在路由器上运行的嵌入式Linux)。我正在使用显示为/dev/ttyACM0
的USB转串口转换器。
[ 2430.460000] usb 1-1: new full-speed USB device number 4 using ehci-platform
[ 2430.630000] cdc_acm 1-1:1.0: This device cannot do calls on its own. It is not a modem.
[ 2430.630000] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
我为 openwrt 编写了一个小代码,它打开了给定的串口/dev/ttyACMO
,等待select()
系统调用串口上的读/写事件{ {1}}。
每当发生读取事件时,消息都会转储到fd
我没有在串口上启用硬件流控制。
我使连接的外围设备每2秒在串行链路上发送一些预定义的消息
现在,当我在 openwrt 中运行我的代码来打印串行消息时,我能够看到来自外围设备的消息。
问题是几分钟后串行链路就会死机。串行接口上没有更多读取事件
重置外围设备也无济于事。使其再次工作的唯一方法是从USB完全移除外围设备并重新启动
相同的设置在我的Ubuntu盒子上工作得很好。我使用相同的驱动程序接口,即usb-acm(在stdout
中)。在这里,系统可以在没有串行挂起的情况下永远运行。
关于发生了什么的任何想法或建议?
答案 0 :(得分:0)
我会尝试:在速度较慢的9600上使用串口,你可能想尝试使用某些终端模拟器来重现问题 - 你可以尝试:
(while :;do echo .;sleep 1m;done) >> /dev/serialdevicename
我还有一个提示:尝试使用inittab
您可能想要考虑原始问题的其他方法,并寻找根本不使用序列的替代方法(如果可能的话)
连接断开时......
possibliy no-op提示:接地是否正确连接?用万用表检查
答案 1 :(得分:0)
如果您使用的是基于AR9331的路由器(非常常见),那么CDC ACM设备通过USB就会出现众所周知的问题。该场景是USB连接在"全速" 12Mbps AND Wifi配置为客户端AND与AP无关。 USB 将挂起。这显然是一个 AR9331中没有软件解决方案的硬件错误。
关闭wifi界面应该解决这个问题,保留wifi的解决办法是 使用USB 2.0集线器有效地将连接速度转换为AR9331 USB2.0高速(480Mbps);你可能遇到的唯一问题是一些USB 2.0 集线器是劣等的,所以你可能需要尝试一两个。