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