シリアルポート:データを受信すると、文字が常に失われます。

シリアルポート:データを受信すると、文字が常に失われます。

私はRaspberry Pi 4でUbuntu 20.04を使用しており、ftdi_sioとudevルールを使用してシリアルポートで起動されたUSB経由で他のデバイスからデータを受信して​​います。

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'"

YATやminicomなど、いくつかの端末を使ってWindowsでテストしましたが、うまく機能し、データ型がうまくいきました。しかし、Linuxでは失敗します。私は62文字ごとに2文字が失われることを発見しました。また、Pythonの代わりに直接スクリーンソフトウェアを試してみました。電源も確認しましたが、公式raspi4充電器を使用しています。

シリアルポートを読み取るためにどのソフトウェア(screen、minicom、Pythonなど)を使用しても、同じエラーが発生します。

dsrdtr、rtscts、xonxoffのさまざまな設定を試しました。データを送信する他のデバイスを見ると、ルールはボーレート9600、データビット8、パリティなし、xonxoffイネーブルです。 (わかりません。デバイスの他の機能でこれらのパラメータを見つけました。)

データサンプルなので、62文字ごとに2つがありません。

b'{misses '<?'}xml version="1.0" encoding="utf-8" standalone="yes" ?><Telegra{misses 'm '}xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http:/{misses '/w'}ww.w3.org/2001/XMLSchema-instance" xmlns="LancePlatform"><EndO{misses 'fM'}ethod><m_timestamp>2023-10-24T16:20:35.0000</m_timestamp><m_eA{misses 'na'}lysisStatus>1</m_eAnalysisStatus><m_uiJobId>2</m_uiJobId><m_us{misses '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

答え1

このデバイスはUSB CDCクラス規格に準拠しています。 「一般」シリアルデバイスを直接使用できます。 rpi3とDebian bookwormでテストした結果、約1.8kByteの応答でポートが開き、デバイス情報メッセージを正しく読み取ることができます。

ACTION=="add", \
ATTRS{idVendor}=="0eb8", \
ATTRS{idProduct}=="ea02", \
RUN+="/usr/sbin/modprobe usbserial" \
RUN+="/bin/sh -c 'echo 0eb8 ea02 > /sys/bus/usb-serial/drivers/generic/new_id'"

丸太

[ 6303.984478] usb 1-1.3: new full-speed USB device number 11 using dwc2                                                                                             
[ 6304.095741] usb 1-1.3: not running at top speed; connect to a high speed hub                                                                                      
[ 6304.116616] usb 1-1.3: New USB device found, idVendor=0eb8, idProduct=ea02, bcdDevice= 0.00                                                                       
[ 6304.129901] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3                                                                                   
[ 6304.139771] usb 1-1.3: Product: Seven Excellence                                                                                                                  
[ 6304.146830] usb 1-1.3: Manufacturer: Mettler-Toledo                                                                                                               
[ 6304.154119] usb 1-1.3: SerialNumber: A000000000                                                                                                                   
[ 6304.162207] usbserial_generic 1-1.3:1.0: The "generic" usb-serial driver is only for testing and one-off prototypes.                                              
[ 6304.175985] usbserial_generic 1-1.3:1.0: Tell [email protected] to add your device to a proper driver.                                                    
[ 6304.189463] usbserial_generic 1-1.3:1.0: generic converter detected                                                                                               
[ 6304.198137] usb 1-1.3: generic converter now attached to ttyUSB0

答え2

同じ問題がある人のため。最後にドライバの問題があります。 ftdi_sioがこのデバイスに適していない理由と何をすべきかわかりません。

有効なドライバは次のとおりです。 https://github.com/pyusb/pyusb

Pythonの使用を強制しますが、少なくとも動作します。

関連情報