PL2303/PL2303X USBシリアルドライバ

PL2303/PL2303X USBシリアルドライバ

オペレーティングシステム:Linux Mint 19 Tara(Ubuntu 18.04 LTSおよびUbuntu 14.04 LTSでもテスト済み)

コア:4.15.0-20-generic

ハードウェアをLinuxホストに接続するために使用するPL2303Xチップを備えたUSBシリアルアダプタがあります。端末は接続済みとマークされていますが、lsusbデータの送受信はできません。moserialデータを使用して送信/受信しようとしましたが、puttyコマンドを送信しようとしたときに応答データが返されず、dmesg変更がありませんでした/var/log/syslog

同じUSBシリアルアダプタは、WindowsでWindows 10を実行している同じDellノートブックモデルで接続および実行され、次のポート設定を使用して設定されたコマンドを受信して​​データを返すことができます。

MoserialとPuttyを使用して、次のようなさまざまなバリエーションを試しましたが、役に立たなかったにもかかわらず、次のポート設定を使用したいと思います(パリティなし、異なる転送速度、ハードウェア/ソフトウェアハンドシェイクなど)。

Device: /dev/ttyUSB0 (permissions 666, $USER added to `dialout` group)
Baud rate: 9600
Data bits: 8    
Stop bits: 1    
Parity: Even    
Handshake: none    
Access mode: read and write

Windowsでは、上記の設定を変更することもできます(パリティなし、7データビット、低/高転送レートなど)。

Windowsを使用してデバイスが動作する方法と同様に、コマンドを送信してデータを受信できる必要があり、上記のポート設定を使用することをお勧めします。

この問題を解決またはデバッグする方法についてのアイデアはありますか?ありがとうございます。


追加情報:

lsusb出力はデバイスを次のように識別します。 Bus 001 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

に基づいて

$ lsusb -v -d 067b:2303
bMaxPacketSize0 64

アダプタにPL2303X代わりにチップがあるようですPL2303(ソース:PL2303およびPL2303x USBシリアルデバイス)。

「MTPデバイスではありません」と「未処理のジョブ「バインディング」」というメッセージを確認しました/var/log/syslog

kernel: [ 7436.378438] usb 1-2: new full-speed USB device number 18 using xhci_hcd
kernel: [ 7436.528244] usb 1-2: New USB device found, idVendor=067b, idProduct=2303
kernel: [ 7436.528250] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
kernel: [ 7436.528253] usb 1-2: Product: USB-Serial Controller
kernel: [ 7436.528256] usb 1-2: Manufacturer: Prolific Technology Inc.
kernel: [ 7436.529219] pl2303 1-2:1.0: pl2303 converter detected
kernel: [ 7436.530024] usb 1-2: pl2303 converter now attached to ttyUSB0
mtp-probe: checking bus 1, device 18: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2"
mtp-probe: bus: 1, device: 18 was not an MTP device
upowerd[1238]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0
upowerd[1238]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2

古いパッチを見つけました。Prolific PL-2303X USBシリアルアダプタ用Linuxカーネルモジュールパッチ、デフォルトのカーネルツリーには2.6.8から始まるPL-2303Xのサポートが含まれていると言われています。

$ lsusb -v -d 067b:2303

Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x067b Prolific Technology, Inc.
  idProduct          0x2303 PL2303 Serial Port
  bcdDevice            3.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           39
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x000a  1x 10 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0

dmesgデバイスを接続した後:

[ 7436.378438] usb 1-2: new full-speed USB device number 18 using xhci_hcd
[ 7436.528244] usb 1-2: New USB device found, idVendor=067b, idProduct=2303
[ 7436.528250] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7436.528253] usb 1-2: Product: USB-Serial Controller
[ 7436.528256] usb 1-2: Manufacturer: Prolific Technology Inc.
[ 7436.529219] pl2303 1-2:1.0: pl2303 converter detected
[ 7436.530024] usb 1-2: pl2303 converter now attached to ttyUSB0

error sending break = -19以下のメッセージも見ましたが、再現できません。

[ 1382.828306] usb 1-2: new full-speed USB device number 6 using xhci_hcd
[ 1382.977353] usb 1-2: New USB device found, idVendor=067b, idProduct=2303
[ 1382.977357] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1382.977360] usb 1-2: Product: USB-Serial Controller
[ 1382.977363] usb 1-2: Manufacturer: Prolific Technology Inc.
[ 1382.978125] pl2303 1-2:1.0: pl2303 converter detected
[ 1382.978753] usb 1-2: pl2303 converter now attached to ttyUSB0
[ 1481.678435] usb 1-2: USB disconnect, device number 6
[ 1481.678645] pl2303 ttyUSB0: error sending break = -19
[ 1481.678821] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[ 1481.678859] pl2303 1-2:1.0: device disconnected

ベストアンサー1

(編集:@dirktのコメントに基づいて更新されました。ありがとう)

「一般的な通信ケーブルは3本のピン(RXD、TXD、GND)のみを使用しています。このデバイスには、ホストのDTR信号によって制御されるハードウェアリセットピンがあります」と説明したこのデバイスの前のマニュアルが見つかりました。

私はDTR = 1以下を実行してこれを確認しましたsudo statserial /dev/ttyUSB0

    デバイス: /dev/ttyUSB0
    
    信号ピン ピン方向状態 Full
    名前(25)(9)(コンピュータ)名
    ----- --- --- --------- ------ -----
    FG 1 - - - フレームグランド
    TxD 2 3 出力 - データ転送
    RxD 3 2インチ - データ受信
    RTS 4 7 out 1 転送要求
    CTS 5 8 in 0 転送可能
    DSR 6 6 in 0 データセット準備済み
    GND 7 5 - - 信号グランド
    DCD 8 1 in 0 データキャリア検出
    DTR 20 4 out 1 データ端末の準備
    RI 22 9-in-0 リングインジケータ

次に、次を追加してDTR = 0を設定するようにCコードを修正しました。

#include <sys/ioctl.h>
...
// then on connect, added the following:
int DTR_flag = TIOCM_DTR;   // modem constant for DTR pin.
ioctl(fd, TIOCMBIC, &DTR_flag);   // sets DTR = 0

[助けてくれた@dirktと視聴してくれた皆さんに感謝します。 ]

おすすめ記事