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와 시청해 주신 모든 분들께 감사드립니다. ]

관련 정보