Настройка последовательных портов RS485

1714
Schnoof

Я пытаюсь заставить работать карту PCI RS485 на компьютере, на котором установлен Debian Jessie (с использованием systemd). Я адаптировал ядро ​​с помощью патча, предоставленного производителем карты. Кажется, это работает, так как карта обнаружена и все восемь последовательных портов инициализированы.

Ядро должно установить следующие свойства:

.flags = FL_BASE0, .base_baud = 921600, .uart_offset = 0x200, 

Когда я пытался работать с этими портами, я всегда видел скорость передачи 921600. С тех пор я изменил следующее: я удалил ModemManager (потому что он непрерывно проверял последовательные порты, и на этом компьютере модема никогда не будет), Я добавил правила в /etc/udev/rules.d/ для создания символических ссылок и изменения пользователя и группы этих портов RS485. Я адаптировал группы для возможности чтения и записи в эти порты не только как root.

С тех пор я замечаю странное поведение. Скорость в бодах инициализируется с помощью 921600 (я смотрю это с помощью «dmsg»), но всякий раз, когда я читаю это, оно устанавливается на 9600 (с помощью «stty -F / dev / stty11 -a»).

Наконец у меня есть следующие выводы:

me@my-system:$ sudo udevadm info -a -p $(udevadm info -q path -n /dev/ttyS11)  Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device.  looking at device '/devices/pci0000:00/0000:00:1b.2/0000:06:00.0/0000:07:0f.0/tty/ttyS11': KERNEL=="ttyS11" SUBSYSTEM=="tty" DRIVER=="" ATTR=="17" ATTR=="11" ATTR=="0x0" ATTR=="21" ATTR=="0x13000040" ATTR=="0xDF100000" ATTR=="0" ATTR=="0" ATTR=="14745600" ATTR=="64" ATTR=="50" ATTR=="3000" ATTR=="2"  looking at parent device '/devices/pci0000:00/0000:00:1b.2/0000:06:00.0/0000:07:0f.0': KERNELS=="0000:07:0f.0" SUBSYSTEMS=="pci" DRIVERS=="serial" ATTRS=="17" ATTRS=="0x0702" ATTRS=="0" ATTRS=="0x070002" ATTRS=="(null)" ATTRS=="1" ATTRS=="32" ATTRS=="32" ATTRS=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f" ATTRS=="0x90f0" ATTRS=="" ATTRS=="0-3" ATTRS=="0x1402" ATTRS=="0x0010" ATTRS=="-1" ATTRS=="0"  looking at parent device '/devices/pci0000:00/0000:00:1b.2/0000:06:00.0': KERNELS=="0000:06:00.0" SUBSYSTEMS=="pci" DRIVERS=="" ATTRS=="18" ATTRS=="0x0000" ATTRS=="0" ATTRS=="0x060401" ATTRS=="(null)" ATTRS=="1" ATTRS=="32" ATTRS=="32" ATTRS=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f" ATTRS=="0x8892" ATTRS=="1" ATTRS=="0-3" ATTRS=="0x1283" ATTRS=="0x0000" ATTRS=="-1" ATTRS=="1"  looking at parent device '/devices/pci0000:00/0000:00:1b.2': KERNELS=="0000:00:1b.2" SUBSYSTEMS=="pci" DRIVERS=="pcieport" ATTRS=="18" ATTRS=="0x8086" ATTRS=="0" ATTRS=="0x060400" ATTRS=="(null)" ATTRS=="1" ATTRS=="32" ATTRS=="32" ATTRS=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f" ATTRS=="0xa169" ATTRS=="1" ATTRS=="0-3" ATTRS=="0x8086" ATTRS=="0x7270" ATTRS=="-1" ATTRS=="0"  looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS=="" 

Использование setserial:

me@my-system:$ sudo setserial -a /dev/ttyS11 /dev/ttyS11, Line 11, UART: undefined, Port: 0x0000, IRQ: 17 Baud_base: 921600, close_delay: 50, divisor: 0 closing_wait: 3000 Flags: spd_normal skip_test 

И читая текущие настройки:

me@my-system:$ sudo stty -F /dev/ttyS11 -a speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd -cmspar 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 

Внутри / proc / tty / driver / находится один файл "serial":

serinfo:1.0 driver revision: ... 11: uart:XR17D15X mmio:0xDF100000 irq:17 tx:0 rx:0 12: uart:XR17D15X mmio:0xDF100200 irq:17 tx:0 rx:0 13: uart:XR17D15X mmio:0xDF100400 irq:17 tx:0 rx:0 14: uart:XR17D15X mmio:0xDF100600 irq:17 tx:0 rx:0 15: uart:XR17D15X mmio:0xDF100800 irq:17 tx:0 rx:0 16: uart:XR17D15X mmio:0xDF100A00 irq:17 tx:0 rx:0 17: uart:XR17D15X mmio:0xDF100C00 irq:17 tx:0 rx:0 18: uart:XR17D15X mmio:0xDF100E00 irq:17 tx:0 rx:0 

Что здесь не так? Почему скорость передачи данных меняется? Как я могу избежать этого? "UART: не определено" в порядке?

1
Игнорируйте номер скорости передачи, указанный в журнале ядра / dmesg. Сохраните содержимое файлов в `/ proc / tty / driver`. sawdust 6 лет назад 1
@sawdust Я добавил соответствующую информацию из `/ proc / tty / driver`. В этом каталоге содержится только один файл `serial`. Schnoof 6 лет назад 0

1 ответ на вопрос

1
Schnoof

The problem is resolved and it is really stupid. The one who asked me to setup the computer told me that the computer contains an RS485 card, but an RS232 card was ordered and bought. Both cards are merchandised under the same name, using the same manuals and patches. So it was not easy to see. I borrowed the RS486 card of another machine and everything is working fine.

I am very uncomfortable with this but at least it was not my fault.

Похожие вопросы