Аппаратный RTS RS485 на SC16IS752 не работает, когда он включен в наложении дерева устройств

cpне имеет опции --files-from(по крайней мере, GNU cpне имеет ), но rsyncимеет:

rsync --files-from abc.txt -av / Folder/

/используется, если ваш файл test.txtсодержит файлы с абсолютными путями. В противном случае это должен быть корень источника.

Если ваши файлы завершаются нулем -, а не символом новой строки -, вы должны включить опцию --from0.

2
13.09.2019, 18:51
1 ответ

На случай, если кто-то найдет этот вопрос, как это сделал я, пытаясь заставить SC16IS752 работать с I2C на RPi, краткий ответ:

  • Драйвер sc16is7xx.cне содержит кода, вызывающего uart_get_rs485_mode(), как описано вserial_core.cи присутствует в нескольких других последовательных драйверах;
  • свойство дерева устройств rs485-rts-active-lowбыло добавлено только в ядра RPi 5.3 и более поздних версий (см. этот коммит).

Чтобы решить первую проблему, я внес несколько небольших изменений в драйвер sc16is7xx.c, см. этот коммит .Функция uart_get_rs485_mode()берет соответствующие свойства из дерева устройств и записывает struct serial_rs485, то же самое, что используется для TIOCSRS485ioctl. Изменения не подвергались регрессионному тестированию, но в настоящее время они надежно работают на моем макетном интерфейсе SC16IS752.

Этот коммит основан на ядре 5.4, поэтому поддерживает свойство rs485-rts-active-lowи поэтому хорошо работает с моими линейными драйверами MAX3072.

Вот часть моего файла оверлея:

fragment@1 {
    target = <&i2c_arm>;
    __overlay__ {
        #address-cells = <1>;
        #size-cells = <0>;
        status = "okay";

        sc16is752: sc16is752@48 {
            compatible = "nxp,sc16is752";
            reg = <0x48>; /* i2c address */
            clocks = <&sc16is752_clk>;
            interrupt-parent = <&gpio>;
            interrupts = <18 2>; /* IRQ_TYPE_EDGE_FALLING */
            gpio-controller;
            #gpio-cells = <2>;
            i2c-max-frequency = <400000>;
            linux,rs485-enabled-at-boot-time;
            rs485-rts-active-low;
        };
    };
};

А вот изображение прицела, показывающее, как он работает:

I2C and RS485 signalling

Для ссылок :D8=SCL, D9=SDA, D10=_IRQ, D11=TXD, D12=_RTS, D13=RXD, Analog1=one RS485 line,Analog2=RXD(аналогично D13 ). Ответ на команду поступает от удаленного устройства ModBus. Обратите внимание, что _RTSимеет высокий уровень (3,3 В )во время передачи, так как имеет место двойное отрицание.

0
02.11.2020, 12:03

Теги

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