Я установил эту 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 ответ1

1

Сигнальные часы для этой карты работают в 8 раз быстрее, чем должны. Это означает, что если вы ожидаете скорость передачи 9600 бод, вы можете установить карту на 1200 и обеспечить ее правильную работу. К сожалению, для некоторых более высоких скоростей передачи это не может быть вариантом. Лучшее решение, вероятно, - забыть об этой карте и купить то, что работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .