Linux 驱动程序 CH341 USB 适配器串行端口问题

Linux 驱动程序 CH341 USB 适配器串行端口问题

在 x86_64 miniPC 上,可以控制 LED 灯带在串行端口上发送一些字节。此控制在 Windows 上有效,但在 Linux 上无效。

在 Windows 上,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

但 LED 灯带仍然亮着。

我还用 QSerialPort 编译了一个基本的 Qt5 应用程序:Windows 和 Linux 的源代码相同。结果是一样的,即 Windows 应用程序提供了良好的结果,而 Linux 应用程序没有效果。

所以我怀疑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

我读过了此 StackOverflow 主题但它是 9 年前写的。它谈到了一些未实现的 ch341 功能。

在原始内核中,驱动程序现在实现了以下功能: Vanilla 内核驱动程序 ch341

参见函数 ch341_set_termios

南京秦恒电子编写的旧驱动程序版本处理停止位和奇偶校验。

制造商 wch.cn 驱动程序 CH34x

我也整理了这个修补驱动程序虽然模块已经安装并且 /dev/ttyUSB0 已暴露,但没有成功。

lsmod | grep ch34x
ch34x                  24576  0
usbserial              69632  1 ch34x

我该如何修复此问题?

相关内容