1

Я пытаюсь заставить работать карту 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{irq}=="17"
    ATTR{line}=="11"
    ATTR{port}=="0x0"
    ATTR{type}=="21"
    ATTR{flags}=="0x13000040"
    ATTR{iomem_base}=="0xDF100000"
    ATTR{custom_divisor}=="0"
    ATTR{iomem_reg_shift}=="0"
    ATTR{uartclk}=="14745600"
    ATTR{xmit_fifo_size}=="64"
    ATTR{close_delay}=="50"
    ATTR{closing_wait}=="3000"
    ATTR{io_type}=="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{irq}=="17"
    ATTRS{subsystem_vendor}=="0x0702"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x070002"
    ATTRS{driver_override}=="(null)"
    ATTRS{enabled}=="1"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{device}=="0x90f0"
    ATTRS{msi_bus}==""
    ATTRS{local_cpulist}=="0-3"
    ATTRS{vendor}=="0x1402"
    ATTRS{subsystem_device}=="0x0010"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="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{irq}=="18"
    ATTRS{subsystem_vendor}=="0x0000"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060401"
    ATTRS{driver_override}=="(null)"
    ATTRS{enabled}=="1"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{device}=="0x8892"
    ATTRS{msi_bus}=="1"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{vendor}=="0x1283"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1b.2':
    KERNELS=="0000:00:1b.2"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{irq}=="18"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{driver_override}=="(null)"
    ATTRS{enabled}=="1"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{device}=="0xa169"
    ATTRS{msi_bus}=="1"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{vendor}=="0x8086"
    ATTRS{subsystem_device}=="0x7270"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="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 ответ1

1

Проблема решена, и это действительно глупо. Тот, кто попросил меня настроить компьютер, сказал мне, что компьютер содержит карту RS485, но карта RS232 была заказана и куплена. Обе карты продаются под одним и тем же именем с использованием одних и тех же руководств и патчей. Так что это было нелегко увидеть. Я позаимствовал карту RS486 другой машины, и все работает нормально.

Мне это очень неудобно, но, по крайней мере, это была не моя вина.

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