操作系统:Linux Mint 19 Tara(也在 Ubuntu 18.04 LTS 和 Ubuntu 14.04 LTS 上进行了测试)
核心:4.15.0-20-generic
我有一个带有 PL2303X 芯片的 USB 串行适配器,用于将硬件连接到 Linux 主机。该设备显示为通过 已连接lsusb
,但我无法发送和接收数据。我尝试使用moserial
和发送/接收数据putty
;当尝试发送命令时,没有返回响应数据,并且我注意到dmesg
或没有变化/var/log/syslog
。
相同的 USB 串行适配器可连接并在运行 Windows 10 的相同戴尔笔记本电脑型号上运行;在 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 串行设备)。
我注意到消息“不是 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 合 0 清除发送 DSR 6 6 合 0 数据集就绪 GND 7 5 - - 信号地 DCD 8 1 合 0 数据载波检测 DTR 20 4 出 1 数据终端就绪 RI 22 9合0环形指示灯
然后我修改了我的 C 代码以通过添加以下内容来设置 DTR = 0:
#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的帮助,也感谢大家的观看。]