CH341 USB转串口适配器Linux下控制LED灯带失效问题求助
CH341 USB转串口适配器Linux下控制LED灯带失效问题求助
大家好,我最近碰到一个棘手的问题,想请各位帮忙看看:
我在一台x86_64迷你PC上,需要通过串口发送字节来控制一条LED灯带。这套逻辑在Windows上完全正常,但到了Linux上就彻底失效了。
Windows下的有效操作(PowerShell)
我用下面的PowerShell命令可以正常关闭LED灯带:
$port = new-Object System.IO.Ports.SerialPort COM3, 9600, None, 8, one $port.Open() $bytes = [byte[]] (0xfa, 0x04, 0x03, 0x03, 0x04) $port.Write($bytes, 0, $bytes.Length) $port.Close()
Linux下的无效尝试(root用户操作)
我尝试了两种方式,结果都没法关闭灯带:
第一种是直接用命令行操作:
SERIAL_PORT="/dev/ttyUSB0" stty -F $SERIAL_PORT cs8 -cstopb -parenb 9600 printf "\xfa\x04\x03\x03\x04" > $SERIAL_PORT
第二种是用Qt5的QSerialPort写了跨平台程序,Windows版本正常工作,但Linux版本完全没效果。
怀疑点:CH341驱动
我怀疑问题出在Linux的CH341驱动上,先贴一下内核日志:
3.587111] usbcore: registered new interface driver usbserial_generic 3.587120] usbserial: USB Serial support registered for generic 3.589539] usbcore: registered new interface driver ch341 3.589549] usbserial: USB Serial support registered for ch341-uart 3.589564] ch341 1-7:1.0: ch341-uart converter detected 3.612837] usb 1-7: ch341-uart converter now attached to ttyUSB0
Windows上我用的是CH340版本1.3.0的驱动。
我之前看到过一个9年前的相关讨论,里面提到CH341驱动有一些未实现的功能,但现在 vanilla 内核里的ch341驱动应该已经补全了这些功能——比如ch341_set_termios函数里已经实现了停止位和奇偶校验的处理。
后来我还尝试编译安装了南京沁恒官方的CH34x驱动,模块确实安装成功了,/dev/ttyUSB0也正常识别:
lsmod | grep ch34x ch34x 24576 0 usbserial 69632 1 ch34x
但问题还是没解决,灯带依然保持亮起状态。
有没有大佬能给我指条明路,该怎么解决这个问题呢?
备注:内容来源于stack exchange,提问作者Sylva1n
相关产品推荐
相关产品推荐

