首页 > 解决方案 > 通过 RS-232 的串行通信在一段时间后停止,无法传输数据,为什么?

问题描述

我正在尝试通过 USB 到 TTL转换器数据表)使用 RS-232 协议在特殊板(详情如下)和我的笔记本之间进行通信。我在笔记本上使用GtkTerm(1.0 版)。在船上我使用minicom(2.7 版)。

我可以在开始时在 GtkTerm 上毫无错误地发送数据我可以发送原始文件,这些文件可以通过船上的 minicom 进行监控。一段时间后,我无法传输数据或从板的 minicom 获得任何响应。我尝试在两台设备上通过 minicom 进行通信,但问题仍然存在。

我正在使用特殊产品的嵌入式板。它上面有德州仪器AM4376BZDN80数据表)微处理器。Ubuntu 正在此板上运行。详细信息uname -aLinux *companyname* 4.14.40-51464-gaf2366a-dirty #13 PREEMPT Mon Dec 2 09:43:55 +03 2019 armv7l GNU/Linux

我正在使用带有 Ubuntu 19.10 和详细信息的笔记本uname -aLinux Lenovo 5.3.0-24-generic #26-Ubuntu SMP Thu Nov 14 01:33:18 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux.

我用于 USB 到 TTL 转换器的驱动程序的详细信息。

内核模块modinfo ftdi_sio::

filename:       /lib/modules/5.3.0-24-generic/kernel/drivers/usb/serial/ftdi_sio.ko
license:        GPL
description:    USB FTDI Serial Converters Driver
author:         Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>, Andreas Mohr, Johan Hovold <jhovold@gmail.com>
srcversion:     973CCF3AD54611DBC628693
alias:          usb:v0920p7500d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403p8348d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v22B7p150Dd*dc*dsc*dp*ic*isc*ip*in01*
alias:          usb:v1C40p0477d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v1E8Ep6001d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v04B4pF900d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v04B4p009Bd*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0451pC32Ad*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0A5Cp6422d*dc*dsc*dp*ic*isc*ip*in*
...
alias:          usb:v0403pD9A8d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v1901p0015d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v058Bp0043d*dc*dsc*dp*ic*isc*ip*in01*
alias:          usb:v058Bp0028d*dc*dsc*dp*ic*isc*ip*in01*
alias:          usb:v0403pCB08d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v05D1p8004d*dc*dsc*dp*ic*isc*ip*in*
...
alias:          usb:v0C6Cp04B2d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v1514p2008d*dc*dsc*dp*ic*isc*ip*in02*
alias:          usb:v04D8p000Ad*dc*dsc*dp*icFFiscFFip00in*
alias:          usb:v0456pF001d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0456pF000d*dc*dsc*dp*ic*isc*ip*in*
...
alias:          usb:v0403p9F80d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403pFFA8d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403pFF00d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403pF60Bd*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403pF608d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403pF7C0d*dc*dsc*dp*ic*isc*ip*in*
alias:          usb:v0403p0000d*dc*dsc*dp*ic*isc*ip*in*
depends:        usbserial
retpoline:      Y
intree:         Y
name:           ftdi_sio
vermagic:       5.3.0-24-generic SMP mod_unload 
sig_id:         PKCS#7
signer:         Build time autogenerated kernel key
sig_key:        37:BE:2D  ...  97:58:77:1C:1B
sig_hashalgo:   sha512
signature:      4A:E1:50:53:10:61:08:46:4C:95:07:E7:AE:2A:22:D0:12:A1:42:DD:
        09:77:73:96:6E:4A:BB:26:F4:EA:6B:DB:DB:7E:07:EA:A0:DF:E0:FF:
        B3:96:11:B3:E4:33:9D:29:52:56:37:E1:1A:08:49:AE:EF:E4:30:3D:
...
        78:C9:E9:84:85:23:7D:4C:64:20:8D:48:3F:C1:01:72:E1:36:14:D5:
        77:C5:25:E2:4A:A5:84:1D:75:D3:2D:4B:F7:9E:94:DF:10:0F:13:54:
        17:F1:3C:62:F0:3F:AD:57:26:CC:59:44:B8:71:53:B7:F4:56:32:A2:
        21:C9:B8:F9:5E:63:9D:5F:A8:B6:51:F8:F6:DA:FB:97:6B:94:5D:76:
        AF:50:EA:33:00:23:88:7B:BE:34:4F:E0:D0:C7:C0:0C:0C:34:44:51:
        B8:E4:EC:E0:7B:36:DD:79:88:F8:E9:15
parm:           ndi_latency_timer:NDI device latency timer override (int)


现在我正在测试具有禁用流量控制的波特率 115200 8N1 的串行控制台。将来我将在传输数据的 C 程序中使用接近 500000 的更高波特率。所以我正在寻找一个独立于波特率的解决方案。

我想知道缓冲区大小或超时是否有特殊设置?我认为这可能是因为缓冲区,但在 minicom 上没有与缓冲区相关的设置。如何了解缓冲区限制?我正在搜索<termios.h>. 我正在使用这篇文章中的代码。我试图通过两个 C 程序进行通信,但一段时间后仍然没有发生数据传输。

PS:如果我在本文中的英语有错误,请告诉我。不要犹豫,询问更多信息,但我无法提供有关板的更多详细信息,因为它不是公共设备。

编辑:

我拔掉了两根电缆并重试了这个过程,这次我不得不传输更多数据以获得相同的情况。我还移除了 USB 集线器并将转换器直接插入笔记本电脑。

dmesg 在我的笔记本上

[751114.353945] mce: CPU4: Package temperature/speed normal
[751114.353946] mce: CPU2: Package temperature/speed normal
[751114.353947] mce: CPU0: Package temperature/speed normal
[751114.353948] mce: CPU6: Package temperature/speed normal
[751114.353991] mce: CPU1: Package temperature/speed normal
[751114.353992] mce: CPU5: Package temperature/speed normal
[751114.353993] mce: CPU7: Package temperature/speed normal
[751114.353993] mce: CPU3: Package temperature/speed normal
[752203.675249] usb 1-2: clear tt 1 (9231) error -71
[752203.675361] usb 1-2: USB disconnect, device number 35
[752203.675363] usb 1-2.4: USB disconnect, device number 36
[752203.675542] usb 1-2: clear tt 1 (9231) error -71
[752203.675798] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
[752203.675824] ftdi_sio 1-2.4:1.0: device disconnected
[752206.940824] usb 1-2: new high-speed USB device number 37 using xhci_hcd
[752207.089000] usb 1-2: New USB device found, idVendor=214b, idProduct=7000, bcdDevice= 1.00
[752207.089002] usb 1-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[752207.089004] usb 1-2: Product: USB2.0 HUB
[752207.089731] hub 1-2:1.0: USB hub found
[752207.089748] hub 1-2:1.0: 4 ports detected
[752238.960329] usb 1-2: USB disconnect, device number 37
[752245.180955] usb 1-2: new full-speed USB device number 38 using xhci_hcd
[752245.334394] usb 1-2: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
[752245.334397] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[752245.334400] usb 1-2: Product: FT232R USB UART
[752245.334401] usb 1-2: Manufacturer: FTDI
[752245.334403] usb 1-2: SerialNumber: A50285BI
[752245.337563] ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
[752245.337602] usb 1-2: Detected FT232RL
[752245.337920] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB1

dmesg 板载 (AM437x)

[17845.257286] usb 1-1.2: USB disconnect, device number 4
[17845.270578] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[17845.284742] ftdi_sio 1-1.2:1.0: device disconnected
[17852.021023] usb 1-1.2: new full-speed USB device number 5 using xhci-hcd
[17852.122251] usb 1-1.2: New USB device found, idVendor=0403, idProduct=6001
[17852.129248] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[17852.137259] usb 1-1.2: Product: FT232R USB UART
[17852.142209] usb 1-1.2: Manufacturer: FTDI
[17852.146573] usb 1-1.2: SerialNumber: A50285BI
[17852.162378] ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
[17852.177916] usb 1-1.2: Detected FT232RL
[17852.187030] usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB0
[17928.632376] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
[17929.969381] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
[17988.165093] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32
[18032.176046] ftdi_sio ttyUSB0: usb_serial_generic_read_bulk_callback - urb stopped: -32

我也认可了 dmesg 中的以下声明。

[12191.865894] ftdi_sio ttyUSB0: failed to get modem status: -32 

标签: clinuxusbserial-communicationtermios

解决方案


推荐阅读