☰
FT230XS UART转USB驱动配置与排障:从ftdi_sio到udev规则
2026/10/24 4:18:31 网站建设 项目流程

简介:FT230XS UART to USB 驱动包面向使用 FT230XS 桥接芯片的硬件工程师、嵌入式开发者与桌面端串口调试人员,解决传统 UART 设备接入 USB 端口时的识别、安装与通信问题,覆盖 Windows 32/64 位驱动部署及 Linux 下基于 libftdi 的通信参考。压缩包共 30 个文件,约 1.59MB,包含 dll、sys、lib 等运行库与驱动文件,exe 安装程序,inf、cat 安装信息与数字签名,以及 h 头文件、txt 说明文档和 xml 配置,便于按平台选择安装并核对签名。已有 1505 人学习下载。包内提供双平台安装程序、FTD2XX API 头文件与静态/动态库,配套许可协议、说明文档与使用须知,可帮助读者完成驱动安装、接口调用、设备识别与常见通信问题排查,适合驱动移植和串口转 USB 项目参考。

1. FT230XS 插上只有 lsusb 认得:UART 转 USB 驱动这件事比想象中分层

板子焊好,USB 线插上,lsusb里明明白白跳出0403:6015,dmesg也打印了FTDI USB Serial Device converter detected,可/dev下面就是没有ttyUSB0。这是 FT230XS 串口转 USB 驱动没配对时最典型的现场,看着像硬件坏了,实际上多半是内核模块、udev 规则、权限三者里有一环没落到位。

FT230XS 这类单芯片 UART 转 USB 桥在嵌入式里太常见了:调试口、烧录口、传感器转接板、工装夹具,几乎人手好几颗。装不好最直接的后果是设备名乱飘、普通用户打不开串口、16 ms 的默认延迟把小包拖成一片、高波特率下悄悄丢字节,而这些问题在日志里往往一声不吭。后面几章就把这套环境从驱动形态一路装到能跑回环,新手照着能复现,熟手能看到参数取舍和自己踩过的坑。

2. 环境清单:FT230XS 在 Linux 与 Windows 上分别走哪条驱动路径

动手前先把“驱动”这个词拆开。FT230XS 是一颗 USB 转 UART 桥,主机侧认它靠的是 VID/PID,而真正把它变成/dev/ttyUSB0的,是操作系统里那一层 USB 串口框架。很多人装不上的根因,是根本没弄清自己该装哪一层。

2.1 三种驱动形态,选错就白折腾

第一种是 Linux 主线内核自带的ftdi_sio,挂在usbserial框架下面,由内核在枚举设备时自动匹配 VID/PID,匹配成功就创建设备节点。这也是 Linux 下唯一推荐的做法,不需要去厂商官网下载任何东西。

第二种是厂商的 VCP 虚拟串口驱动,Windows 和 macOS 需要它,Linux 不需要。VCP 的作用是把 USB 设备包装成一个传统 COM 口,让老上位机软件不用改代码就能打开。在 Linux 上装厂商驱动反而是负优化,会和内核模块抢设备。

第三种是用户态库,比如 libftdi 和 D2XX,直接通过 libusb 操作设备,绕开内核串口层。好处是能直接读 EEPROM、控制 CBUS 引脚、做批量传输;坏处是同一时刻只能有一个驱动绑定设备,ftdi_sio占着的时候用户态库打不开。

形态适用系统设备节点典型用途
内核 ftdi_sioLinux/dev/ttyUSBx通用串口收发、调试口
厂商 VCPWindows、macOSCOMx、/dev/cu.*上位机、老工具链
libftdi / D2XX全平台用户态无(句柄)EEPROM 烧写、CBUS 控制

提示:一块板子上只允许一个驱动绑定。要么让内核ftdi_sio管,要么用 libftdi,别指望同时开。

2.2 插上去先做一次体检,别急着装

在动任何配置之前,先把设备当前状态摸清楚。两条命令足够:一条看 USB 层认没认出芯片,一条看内核匹配到了什么。

# 只看 0403:6015 这一颗,-v 会打印描述符 lsusb -d 0403:6015 -v 2>/dev/null | grep -E 'iManufacturer|iProduct|iSerial|bcdDevice' # 插拔瞬间盯日志,-w 是持续跟随 sudo dmesg -w

lsusb输出里的iProduct如果是空白或者显示乱码,说明这颗芯片的 EEPROM 没烧过字符串描述符,或者烧写过程中断电了,后面绑定设备名会麻烦。iSerial尤其重要,多颗同型号设备同时插在一台机器上时,只有序列号能把它们区分开。

再看内核这边有没有把设备挂上串口框架:

# 已经创建的 usb-serial 设备会列在这里 ls -l /sys/bus/usb-serial/devices/ # 看看模块在不在 lsmod | grep -E 'ftdi_sio|usbserial'

如果/sys/bus/usb-serial/devices/是空的,说明ftdi_sio压根没绑上,问题在模块层;如果里面有ttyUSB0而/dev/ttyUSB0不存在,问题在 udev 或 devtmpfs 层。这两类故障的处理方向完全相反,先分清能省一半时间。

2.3 版本与发行版对照表

FT230X 系列在主线内核里支持了很多年,近十年的发行版基本都是开箱即用。真正会翻车的是自己裁过内核的嵌入式系统,以及用老版本 Windows 的开发机。

环境内核/驱动状态需要额外装备注
Debian 11内核 5.10,ftdi_sio 自带否组名是 dialout
Debian 12内核 6.1,ftdi_sio 自带否同上
Ubuntu 20.04内核 5.4,ftdi_sio 自带否注意 brltty 抢设备
Ubuntu 22.04内核 5.15,ftdi_sio 自带否注意 ModemManager
Windows 10 1809 及以上系统可自动匹配视情况通过系统更新获取
Windows 7 / 8.1无内置是装厂商 VCP 驱动包
自裁内核嵌入式系统取决于 CONFIG可能需要见 3.3

在 Linux 上判断内核到底带没带这一项,最稳的是直接读配置:

# 有 /proc/config.gz 的用这条 zcat /proc/config.gz | grep -i FTDI_SIO # 发行版内核一般把配置放在 /boot 下 grep -i FTDI_SIO /boot/config-$(uname -r)

期望看到CONFIG_USB_SERIAL_FTDI_SIO=m或=y。看到# CONFIG_USB_SERIAL_FTDI_SIO is not set就说明这个内核根本没编进驱动,后面再怎么 modprobe 都是白搭。

2.4 Windows 主机装 VCP 的两个关键点

开发机是 Windows 的话,流程比 Linux 短,但同样有两个容易卡住的地方。装完厂商 VCP 驱动包之后重新插拔设备,设备管理器里应该出现两类节点:USB Serial Converter和它下面的USB Serial Port (COMx)。只出现前者,说明串口功能驱动没装上。

第二个点是 COM 口号。多个设备插拔顺序不同,口号会变,上位机软件里写死 COM3 迟早出事。稳妥做法是在设备管理器的端口属性里手动指定一个高位口号,比如 COM20 往上,避开系统自动分配区间。同一个属性页的“高级”里还有一个 Latency Timer,默认 16 ms,跑小包协议时可以调到 1~2 ms,代价是 USB 中断更频繁。

3. 装内核驱动:ftdi_sio 从 modprobe 到出现 /dev/ttyUSB0

确认了内核带驱动之后,剩下的是把它加载起来、让它在正确的时候匹配到设备、并且在改过 EEPROM 的板子上也能认出来。这三件事分别对应模块加载、VID/PID 匹配和内核裁剪。

3.1 手动加载一次,再固化成开机加载

先手动跑一遍,确认模块本身没问题:

# 加载 ftdi_sio,它会自动带上依赖的 usbserial sudo modprobe ftdi_sio # 确认两个模块都在 lsmod | grep -E 'ftdi_sio|usbserial' # 如果设备已经插着,用 -r 卸载再插一次触发重新匹配 sudo modprobe -r ftdi_sio

手动加载成功、设备节点也出来了,再固化成开机自动加载,免得每次重启都要敲一遍:

# 开机加载列表,写模块名即可,不要带 .ko echo 'ftdi_sio' | sudo tee /etc/modules-load.d/ftdi_sio.conf # 顺便确认没被黑名单挡住 grep -r 'blacklist ftdi_sio' /etc/modprobe.d/ /lib/modprobe.d/ 2>/dev/null

很多“驱动明明装了却不出节点”的现场,根子就在最后这条命令。有人为了用 D2XX 用户态库,在/etc/modprobe.d/里写了blacklist ftdi_sio,后来换了方案忘了删,结果内核永远不绑设备。看到这行就把它注释掉,重新modprobe一次。

模块参数也值得记住一组。ftdi_sio支持在加载时直接指定vendor和product,相当于把后面要讲的new_id提前固化:

sudo modprobe -r ftdi_sio sudo modprobe ftdi_sio vendor=0x0403 product=0x6015

这组参数适合量产工装这种 VID/PID 固定的场景,写进/etc/modprobe.d/ftdi_sio.conf里的options ftdi_sio vendor=0x0403 product=0x6015就长期生效。缺点是改一次要重载模块,插着的设备会掉一下。

3.2 改过 EEPROM 的板子:new_id 与设备节点重建

FT230XS 的 VID/PID 和字符串都存在外挂 EEPROM 里,很多产品出厂时会改成自家 ID,避免和原厂驱动混淆。一旦 ID 不在ftdi_sio的内置表里,模块就不会自动绑定,lsusb看得见、/dev里没有,就是这种局面。

临时救急用new_id:

# 把 0403 6015 动态加进 ftdi_sio 的匹配表,十六进制不带 0x echo "0403 6015" | sudo tee /sys/bus/usb-serial/drivers/ftdi_sio/new_id # 立刻看有没有新节点 ls -l /sys/bus/usb-serial/devices/

这条写入只对当前这次枚举有效,拔掉再插就失效,所以它只适合验证。要持久化,常见做法是在 udev 规则里挂一个RUN动作,在设备插入的瞬间把 ID 喂进去:

# /etc/udev/rules.d/98-ft230xs-newid.rules ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", \ RUN+="/bin/sh -c 'echo 0403 6015 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'"

ATTRS而不是ATTR,是因为idVendor挂在 USB 设备节点上,而匹配的子系统是 usb,需要沿父设备向上找。规则写完执行sudo udevadm control --reload-rules && sudo udevadm trigger,再重新插拔一次验证。

注意:new_id在某些内核版本上会打印 “driver does not support this device” 之类告警,但只要节点出来了就说明绑定成功,别被日志吓退。

3.3 嵌入式目标板:内核裁剪里的那一项

如果 FT230XS 是插在自己做的板子上,而不是插在开发机上,问题就变成“目标板内核里有没有ftdi_sio”。裁过内核的系统里,这颗芯片经常被顺手砍掉,因为没人想到调试口会用 USB 转串口。

用make menuconfig的话,路径是Device Drivers → USB support → USB Serial Converter support → USB FTDI Single Port Serial Driver,对应配置项CONFIG_USB_SERIAL_FTDI_SIO。上层的CONFIG_USB_SERIAL必须一起打开,否则选项根本不出现。

用 Buildroot 的话,在Device Drivers → USB support → USB Serial Converter support下面勾上同一项,然后重新编内核。这里有个取舍:编成=y最省事,插上就有;编成=m省内核体积,但必须保证模块文件真的进了 rootfs,否则modprobe会报module not found,现象和根本没编一样。

# 目标板上确认模块文件到底在不在 find /lib/modules/$(uname -r) -name 'ftdi_sio*' # 手动 insmod 一次,看真实报错 sudo insmod /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ftdi_sio.ko

insmod相比modprobe的好处是报错不做美化,缺符号、版本不匹配这类问题会直接打在屏幕上,排查时更有用。

3.4 读懂 dmesg 里的三行关键日志

绑定成功的现场,dmesg里会有三段内容,读懂了就能快速定位卡在哪一步。

# 插拔一次,过滤出 USB 与 ftdi 相关行 sudo dmesg -c > /dev/null && sudo dmesg | grep -i -E 'usb|ftdi'

第一行是new full-speed USB device number N using xhci_hcd,说明 USB 主机控制器完成了枚举,供电和差分线没问题。第二行是ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected,说明驱动认出了这是 FTDI 设备并开始探测。第三行是FTDI USB Serial Device converter now attached to ttyUSB0,这行出现才算真正拿到了设备节点。

如果卡在第二行之后没有第三行,通常是 EEPROM 里的配置不被驱动接受,或者波特率基准、CBUS 配置写成了非法值;如果第一行都没有,那就跟软件无关了,先量 VBUS 和 D+/D-。

4. 权限与设备名配置:udev 规则和串口参数调到能跑

节点出来了只是开始。默认的/dev/ttyUSB0有两个问题:名字随插拔顺序漂移,权限只给 root 和 dialout 组。放到产线或者多设备并发的场景里,这两条都会变成事故。

4.1 用 udev 规则固定设备名和权限

最省心的做法是拿序列号做锚点,把节点固定成一个有语义的名字,顺便把组和权限一次配好。

# /etc/udev/rules.d/99-ft230xs.rules # serial 从 udevadm info -a 里抄,别写错大小写 SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", \ ATTRS{serial}=="FT5X0001", SYMLINK+="ttyFT230", GROUP="dialout", MODE="0660"

先说SUBSYSTEM=="tty"。设备节点属于 tty 子系统,但idVendor、serial这些属性挂在父级的 USB 设备上,所以必须用ATTRS向上查找,写成ATTR一定匹配不上,这是最常见的翻车点。GROUP和MODE决定普通用户能不能打开,0660配 dialout 组比0666安全,也不用每次 sudo。

序列号从哪来,用这条命令看:

# -a 会打印整条父设备链的属性,找 serial 那一行 udevadm info -a -n /dev/ttyUSB0 | grep -E 'looking at|serial|idVendor|idProduct' # 规则改完必须 reload 加 trigger,然后重新插拔 sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-match=tty

多颗同型号设备同时在线时,序列号是唯一的区分手段。如果 EEPROM 里没烧序列号,几颗板子的serial全是空的,那就只能退而求其次,用KERNELS=="1-1.2"这种物理端口路径来区分,代价是插错口就认错设备。量产环境里我一般要求出厂必须烧唯一序列号,就是为了这一步。

另外规则文件名前面的数字别乱写。udev 按字典序依次处理,99-放在最后能覆盖掉前面发行版自带的规则。写过60-的同学应该都体会过被系统规则改回去的滋味。

4.2 stty 参数与 16 ms 的 latency_timer

串口参数不对,最典型的表现是能打开、能发、收到的全是乱码。用stty一次配齐:

# 115200 8N1,raw 模式,关掉回显和软件流控 stty -F /dev/ttyFT230 115200 cs8 -cstopb -parenb raw -echo -ixon -crtscts # 回头确认实际生效的参数 stty -F /dev/ttyFT230 -a

cs8是 8 位数据,-cstopb是 1 位停止位,-parenb是无校验,合起来就是 8N1。raw表示不做任何行缓冲和字符转换,二进制协议必须加,否则0x0D、0x11这类字节会被终端层吃掉。-ixon关掉软件流控,不然对端发个0x13就被当暂停符。-crtscts是硬件流控,FT230XS 有完整的 RTS/CTS,长距离或者高波特率场景应该打开而不是关掉,这里先关是为了回环测试不被握手卡住。

比波特率更容易被忽略的是 latency_timer。USB 转串口不是真的串口,驱动会把收到的数据攒一攒再上报,攒多久由这个值决定,默认 16 ms。

# 查看当前值,单位毫秒 cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer # 临时改成 1 ms,需要 root echo 1 | sudo tee /sys/bus/usb-serial/devices/ttyUSB0/latency_timer

16 ms 对打印日志没影响,但对“一问一答、每次几十字节”的协议就是灾难:每问一次都要等一个 16 ms 的窗口,几百次交互下来延迟肉眼可见。改到 1 ms 后小包响应立刻正常,代价是 USB 中断频率上升,主机 CPU 占用会涨一点,笔记本上续航也会掉一点。工控机上我一般直接写 1,笔记本调试时留在 16 也无所谓。

这个值同样是掉电重置的,要持久化得靠 udev 规则里的ATTR{latency_timer}="1",写在 tty 子系统那一条规则里即可。

4.3 非标波特率与 3Mbaud 的取舍

FT230XS 的波特率由内部时钟分频得到,标准值之外的非标速率也能算出来,只是误差会大一些。常见需求是 921600、1500000、3000000 这几档。

import serial # 3000000 是 FT230XS 的上限,再高芯片本身不支持 ser = serial.Serial("/dev/ttyFT230", 3000000, timeout=1) print(ser.baudrate, ser.is_open) ser.close()

三兆这种速率下有三件事必须同时满足:latency_timer 调到 1,硬件流控打开,线材别用劣质的。USB 全速设备的理论带宽是 12 Mbps,串口跑满 3 Mbaud 已经占了相当比例,再加上 16 ms 的攒包延迟,收到的数据会出现阵发性的成块到达,看上去像丢包其实是缓存。

非标速率比如 250000,Linux 下一般能直接设,内核会算最接近的分频值。如果对端对误差敏感,建议先用示波器或者逻辑分析仪量一下实际位宽,别在软件层反复怀疑人生。我吃过这个亏:一度以为是驱动问题,最后发现是芯片分频误差累积到第 10 个字节就偏了半个位,换回标准速率立刻正常。

5. 避坑与排查:五条把 FT230XS 装到怀疑人生的记录

下面五条都是插上能看见、用起来就出问题的类型,共同点是日志里基本没有明显报错,全靠现象反推。

5.1 节点出现几秒又消失,设备被别的服务抢了

现象:dmesg里明明打印了 attached to ttyUSB0,ls /dev/ttyUSB0也有一瞬间能看见,过几秒再查就没了,反复插拔都一样。

原因:发行版里预装的辅助服务按 USB 描述符主动抓取串口设备。在 Ubuntu 上最常见的是屏幕阅读器服务 brltty,它会把一部分 USB 串口设备当成盲文点显器接管;另一类是 ModemManager,它会把串口当调制解调器,周期性发 AT 指令探测。

解决:先确认是谁在抢,sudo lsof /dev/ttyUSB0或者sudo fuser -v /dev/ttyUSB0都能看到进程名。确认之后二选一,要么卸掉,要么按设备屏蔽:

# 屏蔽 ModemManager 对这颗设备的探测 # /etc/udev/rules.d/99-ft230xs-mm.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", ENV{ID_MM_DEVICE_IGNORE}="1"

brltty 这类没有优雅屏蔽方式的,直接sudo apt remove brltty更干脆。删之前确认自己不用盲文设备。

5.2 收到的数据里混着 AT 指令和乱码

现象:自己的协议数据里偶尔夹进AT、OK这种字符串,或者每隔几秒收到一串来历不明的字节。

原因:还是 ModemManager,它在探测阶段会往串口写 AT 命令,同时也把设备返回的数据读走一部分。两边的读写交错,就成了这种“半截数据”。

解决:同 5.1,用ID_MM_DEVICE_IGNORE屏蔽。如果设备已经投入产线不方便改规则,临时sudo systemctl stop ModemManager也能验证是不是它干的。确认后建议写规则而不是长期停服务,免得影响真正用蜂窝模块的场景。

5.3 udev 规则写了不生效,改完跟没改一样

现象:规则文件内容反复核对没错,udevadm control --reload-rules也执行了,设备名还是ttyUSB0,权限也没变。

原因按出现频率排:把ATTRS写成了ATTR;规则文件名排序靠前被后面的覆盖;只 reload 没 trigger,或者 trigger 之后没重新插拔;SYMLINK+=写成了SYMLINK=,把别的规则设的值清空了。

解决:用udevadm test直接把规则跑一遍,能看到匹配过程和最终属性,比猜快得多:

# 对指定设备路径做一次规则演练,输出里搜 SYMLINK 和 GROUP sudo udevadm test /sys/class/tty/ttyUSB0 2>&1 | grep -E 'SYMLINK|GROUP|MODE|rules.d'

输出里能看到每条规则的匹配情况,哪条命中、哪条跳过一目了然。这招用过一次之后,基本就不会再靠猜改规则了。

5.4 sudo 能打开,普通用户 Permission denied

现象:sudo minicom -D /dev/ttyUSB0正常,换成自己的账号就报权限不足。

原因:设备节点默认属于 root:dialout,权限 0660,当前用户不在 dialout 组里。注意 Debian 系是 dialout,某些发行版用 uucp,组名不一样。

解决:

# 加组,注意要重新登录才生效 sudo usermod -aG dialout $USER # 确认加上了没 id | tr ' ' '\n' | grep -E 'dialout|uucp' # 不想重新登录的话,用 newgrp 临时切一下当前 shell newgrp dialout

加组之后不重新登录是最常见的“加了没用”,因为进程的组 ID 在会话建立时就确定了。要么退出重登,要么用newgrp,要么新开一个登录终端。

5.5 改过 EEPROM 之后设备彻底不认了

现象:用烧写工具把 VID/PID 或者 CBUS 配置改了一遍,再插上lsusb里是个陌生 ID,/dev什么都没有,Windows 上也只显示未知设备。

原因:ftdi_sio只认内置的 ID 表,改过的 ID 不在表里就不会绑定。另一种情况是 CBUS 引脚被配成了不合适的复用功能,驱动探测阶段读到的配置自相矛盾,直接放弃。

解决:先用 3.2 的new_id验证是不是纯粹的 ID 问题。如果能出节点,说明芯片是好的,只是没匹配上,把 ID 加进规则里长期化即可。如果new_id也不行,就得把 EEPROM 恢复成出厂配置:Linux 下用 libftdi 带的ftdi_eeprom工具,配置里至少把vendor_id、product_id、manufacturer、product、serial这几项写成合法值;Windows 下用官方烧写工具重新写一遍。

# ft230x-restore.conf,字段按芯片手册和原厂默认值填 vendor_id=0x0403 product_id=0x6015 manufacturer="FTDI" product="FT230X Basic UART" serial="FT5X0001"

注意:EEPROM 的写入次数有限,别把烧写当调试手段反复刷。改配置之前先把原始内容读出来备份一份,这是唯一的后悔药。

6. 装完怎么验证:从回环测试到 3Mbaud 压测的一套检查单

驱动装没装好,不能靠“设备管理器里没黄叹号”判断。最省事的验证是硬件回环:把模块上的 TXD 和 RXD 用一根杜邦线短接,发什么就该收什么,一位不差才算通。短接前确认没有把 VCC 或 GND 接到信号脚上,这一下接错芯片就报废了,属于血泪经验。

快速验证一行就够:

# 先 cat 挂住读端,另一个终端往里写 cat /dev/ttyFT230 & printf 'ft230xs loopback\n' > /dev/ttyFT230

想看得更细一点,用脚本做逐字节比对,顺便把延迟也量出来:

# loopback_check.py —— TX 与 RX 短接后运行 import serial, time PORT, BAUD = "/dev/ttyFT230", 115200 payload = bytes(range(256)) * 4 # 1KB 全字节覆盖,能查出 0x11/0x13 被吞 with serial.Serial(PORT, BAUD, timeout=1) as ser: ser.reset_input_buffer() # 清掉插拔残留 t0 = time.time() ser.write(payload) # 写完立刻读 got = ser.read(len(payload)) print("recv", len(got), "match", got == payload, "cost %.3fs" % (time.time() - t0))

bytes(range(256))这组数据是刻意选的,包含0x11(XON)、0x13(XOFF)、0x0D、0x0A,只要stty里的raw、-ixon少配一个,比对就会失败。timeout=1是秒,读不满会提前返回,靠len(got)就能看出少了多少字节。

低速过了之后再加一档压力测试,把优化后的脚本用if __name__ == "__main__":包起来,外面套一层循环跑上几百次,每次改一下波特率。3 Mbaud 下如果出现偶发丢字节,先把 latency_timer 调到 1、打开crtscts,再换一根短一点的 USB 线,这三步基本能解决九成问题。

一份可以直接照抄的检查单:

检查项命令期望结果
USB 枚举lsusb -d 0403:6015能看到设备行
驱动绑定ls /sys/bus/usb-serial/devices/出现 ttyUSB0
设备名固定ls -l /dev/ttyFT230指向 ttyUSB0 的软链
权限ls -l /dev/ttyFT230属组 dialout,0660
延迟cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer1 或按需设定值
回环短接 TX/RX 后跑脚本match True
高速3 Mbaud 跑 500 轮零丢字节

从那以后我每次给新板子装这套环境,都强制走一遍上面的检查单,尤其是回环那一步,不管多赶时间都不跳。它能把驱动、权限、串口参数、硬件连接四层问题一次性区分开,比事后在协议层抓瞎强太多。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询