OS: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 10と同じDellラップトップモデルに接続して動作します。 Windowsでは、コマンドを受信し、以下のポート設定で構成されたデータを返すことができます。
次のポート設定を使用したいのですが、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 serial device )。
/var/log/syslog
に「MTPデバイスではありません」というメッセージと「未処理のアクション「バインド」」というメッセージが表示されます。
カーネル:[7436.378438] usb 1-2:xhci_hcd カーネルを使用した新しいフルスピードUSBデバイス番号18:[7436.528244] usb 1-2:新しいUSBデバイスが見つかりました、 idVendor = 067b、idProduct = 2303 カーネル:[7436.528250] usb 1-2:新しいUSBデバイス文字列:Mfr = 1、Product = 2、SerialNumber = 0 カーネル:[7436.528253] usb 1 -2:製品:USB-Serial Controller カーネル:[7436.528256] usb 1-2:製造元:Prolific Technology Inc。 カーネル:[7436.529219] pl2303 1-2:1.0:pl2303コンバーターが検出されました カーネル:[7436.530024] usb 1-2:pl2303コンバーターがttyUSB0に接続されました mtp-probe:バス1、デバイス18をチェックしています: "/ sys/devices/pci0000:00/0000:00 :14.0/usb1/1-2 " mtp-probe:bus:1、device:18 was a 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]:/ 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:xhci_hcdを使用した新しいフルスピードUSBデバイス番号18 [7436.528244] usb 1-2:新しいUSBデバイスが見つかりました、idVendor = 067b、 idProduct = 2303 [7436.528250] usb 1-2:新しいUSBデバイス文字列:Mfr = 1、Product = 2、SerialNumber = 0 [7436.528253] usb 1-2:製品:USB-Serialコントローラ [7436.528256] usb 1-2:製造元:Prolific Technology Inc。 [7436.529219] pl2303 1-2:1.0:pl2303コンバーターが検出されました [7436.530024] usb 1-2 :pl2303コンバーターがttyUSB0に接続されました
以下のerror sending break = -19
メッセージも見ましたが、再現に問題があります。
[1382.828306] usb 1-2:xhci_hcdを使用した新しいフルスピードUSBデバイス番号6 [1382.977353] usb 1-2:新しいUSBデバイスが見つかりました、idVendor = 067b、 idProduct = 2303 [1382.977357] usb 1-2:新しいUSBデバイス文字列:Mfr = 1、Product = 2、SerialNumber = 0 [1382.977360] usb 1-2:製品:USB-Serialコントローラ [1382.977363] usb 1-2:製造元:Prolific Technology Inc。 [1382.978125] pl2303 1-2:1.0:pl2303コンバーターが検出されました [1382.978753] usb 1-2 :pl2303コンバーターがttyUSB0 に接続されました[1481.678435] usb 1-2:USB切断、デバイス番号6 [1481.678645] pl2303 ttyUSB0:エラー送信ブレーク= -19 [1481.678821 ] pl2303 ttyUSB0:pl2303コンバーターがttyUSB0から切断されました [1481.678859] pl2303 1-2:1.0:デバイスが切断されました
「通常、通信ケーブルは3つのピン(RXD、TXD、およびGNDのみを使用します。このデバイスには、ホストからのDTR信号によって制御されるハードウェアリセットピンがあります。」を説明する古いマニュアルを見つけました。
確認しましたDTR = 1
を実行してSudo statserial /dev/ttyUSB0
:
デバイス:/dev/ttyUSB0 信号ピンピンの方向ステータスフル 名前(25)(9)(コンピュータ)名前 ----- --- --- --------- ------ ----- FG 1---フレームグラウンド TxD 2 3 out-データの送信 RxD 3 2 in-データの受信 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 Ring Indicator
次に、以下を追加して、Dコードを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をご利用いただきありがとうございます。