树莓派4 Ubuntu 20.04下FTDI串口接收数据持续丢字符问题
树莓派Ubuntu 20.04下FTDI串口接收丢字符问题
环境配置
- 设备:树莓派4,搭载Ubuntu 20.04系统
- USB转串口设备:VID=0eb8,PID=ea02,使用ftdi_sio驱动
- 自定义udev规则:
ACTION=="add", \ ATTRS{idVendor}=="0eb8", \ ATTRS{idProduct}=="ea02", \ RUN+="/usr/sbin/modprobe ftdi_sio" \ RUN+="/usr/bin/sh -c 'echo 0eb8 ea02 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'" ACTION=="remove", \ ATTRS{idVendor}=="0eb8", \ ATTRS{idProduct}=="ea02", \ RUN+="/usr/bin/sh -c 'echo usb-Mettler-Toledo_Seven_Excellence-if00-port0 > /sys/bus/usb/drivers/ftdi_sio/unbind'"
问题现象
Windows系统下用YAT、minicom等终端接收数据完全正常,但Linux下每接收62个字符就丢失2个字符。尝试过screen、minicom、Python等多种读取工具,问题一致;已确认使用树莓派官方电源供电。
已尝试配置dsrdtr、rtscts及xonxoff等流控参数,发送设备串口参数推测为:波特率9600、数据位8、无校验、可能启用xonxoff(该参数来自设备其他功能说明,未完全确认)。
数据丢失示例:
b'{丢失了"<?"}xml version="1.0" encoding="utf-8" standalone="yes" ?><Telegra{丢失了"m "}xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http:/{丢失了"/w"}ww.w3.org/2001/XMLSchema-instance" xmlns="LancePlatform"><EndO{丢失了"fM"}ethod><m_timestamp>2023-10-24T16:20:35.0000</m_timestamp><m_eA{丢失了"na"}lysisStatus>1</m_eAnalysisStatus><m_uiJobId>2</m_uiJobId><m_us{丢失了"er"}></m_user></EndOfMethod></Telegram>\r\n'
补充错误日志
在dmesg中捕获到相关错误信息,目前未找到有效解决方案:
[ 7150.279471] ftdi_sio ttyUSB0: error from flowcontrol urb [ 7151.045999] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 7151.054621] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 7151.062250] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 7151.069459] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 7151.075976] ftdi_sio ttyUSB0: error from flowcontrol urb [ 7258.303870] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 7258.312491] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 7258.320253] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 7258.327452] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 7258.333835] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 7258.341355] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 7258.347832] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 7264.638935] ttyUSB ttyUSB0: 1 input overrun(s) [ 7268.853097] ttyUSB ttyUSB0: 32 input overrun(s) [ 7275.768053] ttyUSB ttyUSB0: 4 input overrun(s) [ 7323.578412] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8465.312963] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 8465.321780] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 8465.329355] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8465.336715] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8465.343213] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8465.349976] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8465.359343] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 8465.367975] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 8465.375468] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8538.369178] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8564.307661] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 8564.316412] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 8564.324032] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8564.331160] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8564.337661] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8564.344415] ftdi_sio ttyUSB0: failed to get modem status: -32 [ 8564.353790] ftdi_sio ttyUSB0: ftdi_set_termios FAILED to set databits/stopbits/parity [ 8564.362411] ftdi_sio ttyUSB0: ftdi_set_termios urb failed to set baudrate [ 8564.369917] ftdi_sio ttyUSB0: failed to set flow control: -32 [ 8586.585832] ftdi_sio ttyUSB0: failed to get modem status: -32
内容的提问来源于stack exchange,提问作者lalannou
相关产品推荐
相关产品推荐

