我有这款 2 端口 PCI 串行卡安装在较旧的 Linux 机器上(它处于离线状态,因此更新很少)。该卡的文档表明机器上安装的内核版本受支持,当我将一个端口连接到另一个端口时,我可以看到该卡正在工作。
当我尝试读取来自串行网络接口服务器(具体来说是 Perle IOLAN)的数据流时,问题就出现了。我得到的只是0x80
而0x00
不是 ASCII 文本。我已验证两端的主要设置是否相同(波特率、8 位/字符、1 个停止位、无奇偶校验、无流量控制),并且还尝试了各种波特率。当我将 Windows 计算机连接到它进行测试时,也发生了同样的事情(Windows 计算机也可以很好地从 IOLAN 读取数据)。
之前的串口卡(我认为是这个,但如果不是,它也接近)工作正常,但它也有一个不同的 UART(这张新卡中的 16550 与 16950)。
下面是我从其中一个端口获取的输出stty
:
speed 115200 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = ; erase = <undef>; kill = s; eof = <undef>; eol = a;
eol2 = <undef>; swtch = r; start = ^Q; stop = ^S; susp = <undef>;
rprnt = <undef>; werase = <undef>; lnext = ; flush = l; min = 0; time = 1;
-parenb -parodd cs8 -hupcl -cstopb cread clocal crtscts
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl -echoke
来自setserial
:
/dev/ttyS2, Line 2, UART: 16950/954, Port: 0x1078, IRQ: 74
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq
我可以说我的主要设置是正确的,并且与另一台正在运行的 Linux 机器相比,我没有发现任何不合适的地方。那么为什么这张卡不能像它应该的那样与其他机器通信呢?
编辑:根据@sawdust,我的内核版本是 2.6.18,根据uname
:
Linux serverName 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux
该卡似乎在启动时也能被识别,尽管可能不是完全正确:
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
0000:00:03.3: ttyS1 at I/O 0x4470 (irq = 177) is a 16550A
ttyS2: detected caps 00000700 should be 00000100
0000:07:00.0: ttyS2 at I/O 0x1078 (irq = 74) is a 16C950/954
ttyS3: detected caps 00000700 should be 00000100
0000:07:00.0: ttyS3 at I/O 0x1070 (irq = 74) is a 16C950/954
ttyS2: detected caps 00000700 should be 00000100
(ttyS0 和 ttyS1 在主板上有接头,但没有物理 DB-9 端口。)
/proc/tty/dirvers/
包含一个名为 的文件serial
。
答案1
此卡的信号时钟运行速度比应有的速度快 8 倍。这意味着如果您期望波特率为 9600,您可以将卡设置为 1200 并使其正常工作。不幸的是,对于某些更高的波特率,这可能不是一个选项。最好的解决方案可能是忘记这张卡,然后购买有用的东西。