![我的串行通信有问题](https://linux22.com/image/141035/%E6%88%91%E7%9A%84%E4%B8%B2%E8%A1%8C%E9%80%9A%E4%BF%A1%E6%9C%89%E9%97%AE%E9%A2%98.png)
我不是串行通信方面的专家,很久以前我就尝试过。我的直接目标是连接到 SUN Sparc T5140 上的服务处理器,但此后我尝试连接到多个设备,但每次都得到相同的结果。我得到一个空白屏幕/终端,光标没有移动,屏幕/终端上没有任何反应。
我在主机(也尝试了不同的主机)和目标之间有一条海峡连接电缆(零调制解调器电缆),连接到 9 针串行端口。
我已经检查了我正在使用哪个端口,如下所示:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 RTS|DTR
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0
通过这个我可以看到是ttyS0有电气连接。
我也粗略地尝试过不同的模式/速度等。
我尝试过不同的客户端,例如 minicom、screen 和 putty,最终都出现在这个空屏幕/终端中,不显示任何内容,也不接受任何输入。还有更多客户端我没有尝试过,但我觉得没有必要,问题在其他地方。
我考虑过电缆,但我今天从我信任的商店购买了它,我认为既然它显示了电气连接,它应该是正确的......?但在这里我不确定...
如果我使用 ttyS0 或 ttyS1 以外的其他东西,屏幕会显示以下内容:
[root@tc1 ~]# screen /dev/ttyS2
[screen is terminating]
我想这一定意味着没有通信或没有配置设备。
答案1
通过这个我可以看到是ttyS0有电气连接。
对不起,但你错了。
RTS 和 DTR 信号仅表明有东西正在本地激活端口,即有screen
、minicom
、ModemManager
或agetty
类似程序在您计算机上的端口上运行。它们根本没有透露任何有关远程端的信息,因为两者都是传出信号。使用fuser -u /dev/ttyS0
root 身份获取正在激活端口的本地进程的 PID。
如果您不相信我,请运行screen /dev/ttyS1
并在运行时cat /proc/tty/driver/serial
在另一个窗口中再次运行。您现在应该看到 ttyS1 RTS 和 DTR 信号也处于活动状态。
另一方面,CTS 和 DSR 信号表明两件事:
- 电缆实际上有以某种方式连接的那些线路(某些串行电缆只有三根线:传入数据、传出数据和接地)
- 如果CTS和DSR信号单独出现,没有RTS和DTR,那么直到那时这表明另一端肯定有东西。某些零调制解调器电缆将每个连接器中的本地 DTR 连接到本地 DSR,将本地 RTS 连接到本地 CTS,作为一端设备处于连接状态的情况的解决方法必须使用硬件握手,另一端的设备不能去做。在这种情况下,一旦端口通电并且发出的 RTS 和 DTR 信号被置位,传入的 CTS 和 DSR 信号总是会出现,即使电缆的另一端根本没有连接。
通常,您还必须在串行连接工作之前掌握其参数。最常见的变量是连接的波特率(速度):在 T5140 的控制台端口上,我首先尝试 9600 bps。其他设备也可能使用 38400 甚至 115200 bps;根据我的经验,这些是最常见的价值观。
其他参数包括数据位数(目前最常见的值是 8)、奇偶校验位(最常见的是“无”)和停止位的数量(最常见的是 1)。
即使所有参数都正确,另一端也可能不会发送任何内容,直到获得一些有效字符作为输入。因此,一旦启动screen
或minicom
,请按 Enter 键一次或两次。
大多数串行控制台连接都遵循“远程回显”原理:当您键入内容时,键入的字符只是从串行端口发送出去,而不将其显示在屏幕上。只有当远端回显字符时才会显示这些字符。这允许输入密码之类的事情,而密码不会在屏幕上可见(因为远程端只是禁用密码输入的回显功能),并告诉您输入的字符已正确接收。
在不供人类使用的串行连接上,可以省略此远程回显功能:如果您正在对此类连接进行故障排除,您可能需要在终端仿真程序中激活“本地回显”功能(“屏幕和minicom
例如)中的“键盘”设置部分)。如果本地和远程回显同时生效,则您键入的任何内容都会出现在屏幕上。