Repka Pi 4 sc16is752 device tree overlay

An_me

New member
28.05.2026
21
1
3
Нужно подключить rs232-rs485 hat к Repka Pi 4 (Repka OS, Optimal ver. 2.2).



Прежде всего, нужно добавить поддержку sc16is752 (SPI -> 2 UART).
На Raspberry Pi 4 получилось завести эту микросхему через SPI1 путем добавления в /boot/firmware/config.txt:
Код:
dtoverlay=spi1-1cs,cs0_spidev=off

dtoverlay=sc16is75x-spi,sc16is752,spi1-0,int_pin=24

После этого появлялись порты /dev/ttySC0 и /dev/ttySC1.

Для Repka Pi 4 пытался различные device tree конфигурацию, и ничего не работает.

Например, одна из последних:

Код:
/dts-v1/;

/plugin/;


/ {

    compatible = "allwinner,sun50i-h6";

    fragment@0 {

        target = <&spi0>;

        __overlay__ {

            status = "okay";

        };

    };


   fragment@1 {

      target = <&spi0>;

      __overlay__ {

         #address-cells = <1>;

         #size-cells = <0>;

         status = "okay";


         sc16is752: sc16is752@0 {

            compatible = "nxp,sc16is752";

            reg = <0>; /* CE0 */

            spi-max-frequency = <4000000>;

            interrupt-parent = <&gpio>;

        interrupts = <357 2>; /* IRQ_TYPE_EDGE_FALLING */

            clocks = <&klok>;


            klok: klok {

               compatible = "fixed-clock";

               #clock-cells = <0>;

               clock-frequency = <14745600>;

            };

         };

      };

   };

};

Менял spi0, spi1, interrupts. Пробовал различные варианты, что смог найти на github, но ничего не работает.
Пытался также декомпилировать overlay из Raspberry Pi, но даже с минимальными правками не работает.
Впервые пишу device tree overlay. Не могу понять что делаю не так.

Подключил плату к Репке не через 40-пиновый разъем, а через провода к боковым выводам.
Подключение Шилд - Repka (вариант подключения 2), номер 40-пинового вывода:

Код:
VCC  - +5

GND  - GND

SCLK - 23 (SPI0-CLK)

MOSI - 19 (SPI0-MOSI)

MISO - 21 (SPI0-MISO)

CS   - 24 (SPI0-CS0)

IRQ  - 31 (GPIO)

EN   - 32 (GPIO)

Шаги по применению overlay:

1) Сохранение/редактирование dts файла в /root/ :
vi sc16is752-n.dts

2) Компиляция файла:
dtc -@ -I dts -O dtb -o sc16is752.dtbo sc16is752-n.dts

3) Копирование dtbo файла в /boot/overlays/
cp sc16is752.dtbo /boot/overlays/

4) Добавление строки sc16is752 в /boot/repkaEnv.txt в строку overlays. Получаем overlays=i2c1 spi0 sc16is752

После перезагрузки ядро не стартует на device tree overlay. Просто зависает.

Код:
## Executing script at 4fc00000

Repka U-Boot started

53 bytes read in 3 ms (16.6 KiB/s)

repkaEnv.txt loaded successfully

41705 bytes read in 7 ms (5.7 MiB/s)

repka-pi.dtb loaded successfully

overlays: i2c1 spi0 sc16is752

223 bytes read in 3 ms (72.3 KiB/s)

i2c1.dtbo loaded successfully

1097 bytes read in 4 ms (267.6 KiB/s)

spi0.dtbo loaded successfully

1036 bytes read in 4 ms (252.9 KiB/s)

sc16is752.dtbo loaded successfully

failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND

26058760 bytes read in 2610 ms (9.5 MiB/s)

ERROR: Did not find a cmdline Flattened Device Tree


Starting kernel ...

Если я правильно понимаю, то

Код:
root@Repka-Pi:/boot# cat /boot/config-6.12.9.4-repka-pi4 | grep "CONFIG_SERIAL_SC16IS7XX"

CONFIG_SERIAL_SC16IS7XX=m

CONFIG_SERIAL_SC16IS7XX_I2C=m

CONFIG_SERIAL_SC16IS7XX_SPI=m

Показывает, что драйвер в ядре есть, нужно только добавить device tree overlay.

Помогите, пожалуйста, понять, что делаю не так.
 
Последнее редактирование:
failed on fdt_overlay_apply(): FDT_ERR_NOTFOUND
Поиск по "интернетам" говорит, что есть ошибка в дереве (точнее в оверлее). Вероятно, у вас в оверлее есть ссылка на узел, которого в дереве нет

Попробуйте сверить ссылки с наличием соответствующих узлов в декомпилированном dtb от Репки
 
Кстати, я несколько не понял. Если вы удаляете оверлей, то ядро загружается или нет?
 
У Репки 4 доступен только один интерфейс SPI, который в дереве вроде обозначен как spi1

Меня смущает строка
Код:
interrupt-parent = <&gpio>;

Есть подозрение, что тут должно быть <&pio> или <&r_pio> (скорее второе, т.к. вы повесили прерываение на PL5, а банк L находится в подсистеме <&r_pio>).
 
Последнее редактирование:
У Репки 4 доступен только один интерфейс SPI, который в дереве вроде обозначен как spi1

Меня смущает строка
Код:
interrupt-parent = <&gpio>;

Есть подозрение, что тут должно быть <&pio> или <&r_pio> (скорее второе, т.к. вы повесили прерываение на PL5, а банк L находится в подсистеме <&r_pio>).
После ваших замечаний исправил overlay. Ядро стартует. Но под конец драйвер выдаёт ошибку.

Текущий overlay:
Код:
/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h6";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
        };
    };

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

            sc16is752: sc16is752@0 {
                compatible = "nxp,sc16is752";
                reg = <0>; /* CE0 */
                spi-max-frequency = <4000000>;
                interrupt-parent = <&r_pio>;
                interrupts = <357 2>; /* IRQ_TYPE_EDGE_FALLING */
                clocks = <&sc16is752_clk>;

                sc16is752_clk: sc16is752_clk {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <14745600>;
                };
            };
        };
    };
};

Вывод успешной загрузки overlay:

Код:
## Executing script at 4fc00000
Repka U-Boot started
53 bytes read in 2 ms (25.4 KiB/s)
repkaEnv.txt loaded successfully
41705 bytes read in 6 ms (6.6 MiB/s)
repka-pi.dtb loaded successfully
overlays: i2c1 spi0 sc16is752
223 bytes read in 3 ms (72.3 KiB/s)
i2c1.dtbo loaded successfully
1097 bytes read in 3 ms (356.4 KiB/s)
spi0.dtbo loaded successfully
921 bytes read in 3 ms (299.8 KiB/s)
sc16is752.dtbo loaded successfully
26058760 bytes read in 2611 ms (9.5 MiB/s)
## Flattened Device Tree blob at 44000000
   Booting using the fdt blob at 0x44000000
   Loading Device Tree to 0000000049f8d000, end 0000000049ffffff ... OK

Под конец загрузки выдаёт ошибку:

Код:
[    8.150693] systemd[1]: Started Journal Service.
[    8.173051] spi0.0: ttySC0 at I/O 0x0 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.181325] serial serial1: tty port ttySC0 registered
[    8.187091] spi0.0: ttySC1 at I/O 0x1 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.195084] serial serial2: tty port ttySC1 registered
[    8.220506] sc16is7xx spi0.0: probe with driver sc16is7xx failed with error -22
[    8.285503] Adding 1048572k swap on /swapfile.  Priority:-2 extents:20 across:15867904k SS
[    8.293014] systemd-journald[138]: Received client request to flush runtime journal.

ttySC* файлы не появились:

Код:
root@Repka-Pi:~# ls -l /dev/ttySC*
ls: невозможно получить доступ к '/dev/ttySC*': Нет такого файла или каталога

Модуль ядра драйвера sc16is7xx был ранее включен в загрузку:

Код:
root@Repka-Pi:~# lsmod | grep "sc16"
sc16is7xx_spi          12288  0
sc16is7xx              24576  1 sc16is7xx_spi
 
[ 8.220506] sc16is7xx spi0.0: probe with driver sc16is7xx failed with error -22
А CS дёргается?

Возможно, чип-селект не работает, т.к. он не прописан в дереве.

Если опираться на https://github.com/torvalds/linux/blob/master/arch/mips/boot/dts/ingenic/cu1000-neo.dts
и на попытки наковырять оверлей для spi-дисплея (https://repka-pi.ru/forum/threads/111/), то в дереве должна быть строчка с cs-gpios:

C:
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            cs-gpios = <&pio 7 3 GPIO_ACTIVE_LOW>;
            
            ...

В обсуждении дисплея ТС прописывал ещё параметры для драйвера pinctrl, но я бы попробовал запустить сначала без него.
 
А CS дёргается?

Возможно, чип-селект не работает, т.к. он не прописан в дереве.

Если опираться на https://github.com/torvalds/linux/blob/master/arch/mips/boot/dts/ingenic/cu1000-neo.dts
и на попытки наковырять оверлей для spi-дисплея (https://repka-pi.ru/forum/threads/111/), то в дереве должна быть строчка с cs-gpios:

C:
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            cs-gpios = <&pio 7 3 GPIO_ACTIVE_LOW>;
         
            ...

В обсуждении дисплея ТС прописывал ещё параметры для драйвера pinctrl, но я бы попробовал запустить сначала без него.
Попробовал с cs-gpios и pinctrl (вместе и раздельно). Ошибка та же.

Текущий overlay:
Код:
/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h6";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
        };
    };

    fragment@1 {
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
            cs-gpios = <&pio 7 3 0>;
        pinctrl-names = "default", "default";
        pinctrl-1 = <&spi1_cs1>;

            sc16is752: sc16is752@0 {
                compatible = "nxp,sc16is752";
                reg = <0>; /* CE0 */
                spi-max-frequency = <4000000>;
                interrupt-parent = <&pio>;
                interrupts = <357 2>; /* IRQ_TYPE_EDGE_FALLING */
                clocks = <&sc16is752_clk>;

                sc16is752_clk: sc16is752_clk {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <14745600>;
                };
            };
        };
    };
};

Не совсем понимаю, что нужно прописывать в cs-gpios. Физически CS подключен к 24 пину.
Вот тут подписан как SPI0-CS0:

GPIO_ACTIVE_LOW не принимает dtc. Решил поставить 0.

И тут не уверен, что правильно:
interrupts = <357 2>;
Указал пин, который в SYSFS gpio.

Посмотрел осциллографом на CS. Вроде постоянно в низком уровне. Во время загрузки ни разу не было высокого уровня.
 
Последнее редактирование:
  • Like
Реакции: fe-ti
Не совсем понимаю, что нужно прописывать
Ну, если честно, я тоже). Но 24 пин на гребёнке --- это PH3 => подсистема pio, банк 7, пин 3

Решил поставить 0.
Тут говорят, что "GPIO_ACTIVE_HIGH is 0". Есть подозрения, что нам нужен 1, т.к. в доках на модуль в диаграмме чип-селект вроде как активен в нуле

C:
/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h6";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
        };
       /* target = <&pio>;
        __overlay__ {
            spi1_cs0: spi1_cs0 {
                pins = "PH3";
                function = "gpio_out";
                output-high;
            };
        }; */
    };

    fragment@1 {
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
          
            /*pinctrl-names = "default", "default";
             pinctrl-1 = <&spi1_cs0>; */
            cs-gpios = <&pio 7 3 1>; // было <0>, <&pio 7 3 0>;


            sc16is752: sc16is752@0 {
                compatible = "nxp,sc16is752";
                reg = <0>; /* CE0 */
                spi-max-frequency = <4000000>;
                interrupt-parent = <&pio>;
                interrupts = <357 2>; /* IRQ_TYPE_EDGE_FALLING */
                clocks = <&sc16is752_clk>;

                sc16is752_clk: sc16is752_clk {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <14745600>;
                };
            };
        };
    };
};
 
Ну, если честно, я тоже). Но 24 пин на гребёнке --- это PH3 => подсистема pio, банк 7, пин 3


Тут говорят, что "GPIO_ACTIVE_HIGH is 0". Есть подозрения, что нам нужен 1, т.к. в доках на модуль в диаграмме чип-селект вроде как активен в нуле

C:
/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h6";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
        };
       /* target = <&pio>;
        __overlay__ {
            spi1_cs0: spi1_cs0 {
                pins = "PH3";
                function = "gpio_out";
                output-high;
            };
        }; */
    };

    fragment@1 {
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
        
            /*pinctrl-names = "default", "default";
             pinctrl-1 = <&spi1_cs0>; */
            cs-gpios = <&pio 7 3 1>; // было <0>, <&pio 7 3 0>;


            sc16is752: sc16is752@0 {
                compatible = "nxp,sc16is752";
                reg = <0>; /* CE0 */
                spi-max-frequency = <4000000>;
                interrupt-parent = <&pio>;
                interrupts = <357 2>; /* IRQ_TYPE_EDGE_FALLING */
                clocks = <&sc16is752_clk>;

                sc16is752_clk: sc16is752_clk {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <14745600>;
                };
            };
        };
    };
};
Всё равно
Код:
[    7.999372] spi0.0: ttySC0 at I/O 0x0 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.007532] serial serial1: tty port ttySC0 registered
[    8.014189] spi0.0: ttySC1 at I/O 0x1 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.025066] serial serial2: tty port ttySC1 registered
[    8.057836] sc16is7xx spi0.0: probe with driver sc16is7xx failed with error -22

На осциллографе уже картинка лучше: 5 пакетов передались по SPI. CS уже дергался (прикрепил).
 

Вложения

  • DS1Z_QuickPrint1.png
    DS1Z_QuickPrint1.png
    44 КБ · Просмотры: 3
Последнее редактирование:
Всё равно
Код:
[    7.999372] spi0.0: ttySC0 at I/O 0x0 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.007532] serial serial1: tty port ttySC0 registered
[    8.014189] spi0.0: ttySC1 at I/O 0x1 (irq = 0, base_baud = 921600) is a SC16IS752
[    8.025066] serial serial2: tty port ttySC1 registered
[    8.057836] sc16is7xx spi0.0: probe with driver sc16is7xx failed with error -22

На осциллографе уже картинка лучше: 5 пакетов передались по SPI. CS уже дергался (прикрепил).
В общем, пока не понятно где проблема. Есть подозрение на схемотехнику. Канал 1 - MISO - словно имеет высокую ёмкость. Хотя подключено напрямую, и на схемотехнике шилда на этой линии нет конденсаторов. Канал 3 - MOSI, канал 4 - CS.
 

Вложения

  • DS1Z_QuickPrint2.png
    DS1Z_QuickPrint2.png
    46,4 КБ · Просмотры: 2
В общем, пока не понятно где проблема. Есть подозрение на схемотехнику. Канал 1 - MISO - словно имеет высокую ёмкость. Хотя подключено напрямую, и на схемотехнике шилда на этой линии нет конденсаторов. Канал 3 - MOSI, канал 4 - CS.
Ну, можно клок поменьше сделать. Сейчас максимальная частота spi прописана как 4МГц...
О, кстати, только сейчас заметил, что clock-frequency = <14745600>; --- как будто почти 15 МГц.
Предлагаю выставить её меньше на пару порядков, возможно станет лучше, но я не уверен.

Upd: Если уменьшение частоты не поможет, то тогда можно попробовать поковырять конфиг у pinctrl. Может он чего-то не видит из того, что ему надо.
 
Последнее редактирование:
  • Like
Реакции: An_me
Ну, можно клок поменьше сделать. Сейчас максимальная частота spi прописана как 4МГц...
О, кстати, только сейчас заметил, что clock-frequency = <14745600>; --- как будто почти 15 МГц.
Предлагаю выставить её меньше на пару порядков, возможно станет лучше, но я не уверен.

Upd: Если уменьшение частоты не поможет, то тогда можно попробовать поковырять конфиг у pinctrl. Может он чего-то не видит из того, что ему надо.
Вчера менял только spi-max-frequency. Результатов не было. clock-frequency 14.74 МГц - частота кварца, подключенного к sc16is752. Везде, где смотрел overlay, было это число. Сейчас еще попробую подключить к малине, и посмотреть, какое взаимодействие идёт при старте ядра (будет ли большая разница) с осциллографа.

Ниже прикрепил рабочий overlay с raspberry pi 4 (может что-то упускаю).

Update. Пока осциллограммы слишком разные на rasp pi 4 и repka 4. Неправильные настройки SPI?
Ниже прикрепил: 4.png - Rasp 4, 3.png - Repka. Одинаково подключил: 1 канал - SCLK, 2 - MOSI, 3 - MISO, 4 - CS.
 

Вложения

  • sc16is75x-spi.txt
    7,4 КБ · Просмотры: 3
  • DS1Z_QuickPrint4.png
    DS1Z_QuickPrint4.png
    45,7 КБ · Просмотры: 5
  • DS1Z_QuickPrint3.png
    DS1Z_QuickPrint3.png
    44,1 КБ · Просмотры: 5
Последнее редактирование:
Неправильные настройки SPI?
Возможно. У spi сигнал SCLK должен активнее (и регулярнее) всех шевелиться, а на второй картинке там что-то совсем глухо

Кстати, а какая у вас распиновка в repka-config выставлена?

Upd: если судить по драйверу, то clock-frequency действитльно влияет только на определяемую скорость uart
 
Последнее редактирование:
Кстати, а какая у вас распиновка в repka-config выставлена?
1781075696180.png
Вторая. Т.к. еще I2C для внешнего RTC используется

Update 1. Решил сравнить модули малины и репки.
Bash:
root@Repka-Pi:~# lsmod | grep "sc16is"
sc16is7xx_spi          12288  0
sc16is7xx              24576  1 sc16is7xx_spi

rasp@raspberrypi:~$ lsmod | grep "sc16"
sc16is7xx_spi          12288  0
regmap_spi             12288  1 sc16is7xx_spi
sc16is7xx              28672  1 sc16is7xx_spi
Может ли быть что в малине как-то еще добавлена зависимость модуля sc16is7xx_spi к модулю regmap_spi ?

Update 2. Еще сравнение модулей
Bash:
root@Repka-Pi:~# modinfo sc16is7xx_spi
filename:       /lib/modules/6.12.9.4-repka-pi4/kernel/drivers/tty/serial/sc16is7xx_spi.ko
import_ns:      SERIAL_NXP_SC16IS7XX
description:    SC16IS7xx SPI interface driver
license:        GPL
alias:          spi:sc16is762
alias:          spi:sc16is760
alias:          spi:sc16is752
alias:          spi:sc16is750
alias:          spi:sc16is741
alias:          spi:sc16is740
alias:          spi:sc16is74x
depends:        sc16is7xx
intree:         Y
name:           sc16is7xx_spi
vermagic:       6.12.9.4-repka-pi4 SMP mod_unload aarch64

rasp@raspberrypi:~$ modinfo sc16is7xx_spi
filename:       /lib/modules/6.12.75+rpt-rpi-v8/kernel/drivers/tty/serial/sc16is7xx_spi.ko.xz
import_ns:      SERIAL_NXP_SC16IS7XX
description:    SC16IS7xx SPI interface driver
license:        GPL
srcversion:     3D46BAEE57FCE783B3E2E8F
alias:          spi:sc16is762
alias:          spi:sc16is760
alias:          spi:sc16is752
alias:          spi:sc16is750
alias:          spi:sc16is741
alias:          spi:sc16is740
alias:          spi:sc16is74x
depends:        sc16is7xx,regmap-spi
intree:         Y
name:           sc16is7xx_spi
vermagic:       6.12.75+rpt-rpi-v8 SMP preempt mod_unload modversions aarch64
rasp@raspberrypi:~$ modinfo regmap-spi
filename:       /lib/modules/6.12.75+rpt-rpi-v8/kernel/drivers/base/regmap/regmap-spi.ko.xz
license:        GPL
description:    regmap SPI Module
srcversion:     6014D07874D4559D5C0C729
depends:     
intree:         Y
name:           regmap_spi
vermagic:       6.12.75+rpt-rpi-v8 SMP preempt mod_unload modversions aarch64

Update 3. Я не знаю, в этом ли проблема, но модуль sc16is7xx загружается, после того, как ядро пытается подключится к ttySC*.

Bash:
июн 10 09:22:22 Repka-Pi kernel: spi0.0: ttySC0 at I/O 0x0 (irq = 0, base_baud >
июн 10 09:22:22 Repka-Pi kernel: serial serial1: tty port ttySC0 registered
июн 10 09:22:22 Repka-Pi kernel: spi0.0: ttySC1 at I/O 0x1 (irq = 0, base_baud >
июн 10 09:22:22 Repka-Pi systemd[1]: Activating swap /swapfile...
июн 10 09:22:22 Repka-Pi kernel: serial serial2: tty port ttySC1 registered
июн 10 09:22:22 Repka-Pi systemd[1]: Mounting FUSE Control File System...
июн 10 09:22:22 Repka-Pi systemd[1]: Mounting Kernel Configuration File System.>
июн 10 09:22:22 Repka-Pi systemd[1]: Starting Flush Journal to Persistent Stora>
июн 10 09:22:22 Repka-Pi kernel: sc16is7xx spi0.0: probe with driver sc16is7xx >
июн 10 09:22:22 Repka-Pi kernel: Adding 1048572k swap on /swapfile.  Priority:->
июн 10 09:22:22 Repka-Pi systemd-modules-load[154]: Inserted module 'sc16is7xx_>

Update 4. Сравнил исходники sc16is7xx_spi репки и малины. Не уверен что это играет роль.
Bash:
 diff sc16is7xx_rasp/sc16is7xx_spi.c sc16is7xx_repka/sc16is7xx_spi.c
90c90
< MODULE_IMPORT_NS("SERIAL_NXP_SC16IS7XX");
---
> MODULE_IMPORT_NS(SERIAL_NXP_SC16IS7XX);

А вот разница в sc16is7xx.с уже немалая. Не патчить же ядро теперь чтобы проверить?
 

Вложения

  • sc16is7xx-patch.c.txt
    2,8 КБ · Просмотры: 3
Последнее редактирование:
А вот разница в sc16is7xx.с уже немалая
Тут может влиять различие версий ядра, но возможно есть ещё что-то.

Кстати, а если прописать status="okay"; в узле sc16is752: sc16is752@0 {...}. Ничего не поменяется?

P.S.
Я начал снова ковырять интернеты и нашёл нечто на форуме https://forums.developer.nvidia.com/t/sc16is7xx-serial-expander-support-device-tree/155020/8
Но там подключение через i2c. Если сравнивать с ним, то нас не прописано gpio-controller; и #gpio-cells = <0x0>;, но я не знаю что делают эти строки.


Upd: Прикрепил схему платки. Скажите, у вас же стоит резистор R12 (тот который напротив надписи EN)?
 

Вложения

  • RS485_RS232_HAT_SchDoc.pdf
    922 КБ · Просмотры: 2
Последнее редактирование:
Тут может влиять различие версий ядра, но возможно есть ещё что-то.
Да, тоже так думал.
Кстати, а если прописать status="okay"; в узле sc16is752: sc16is752@0 {...}. Ничего не поменяется?
Нет изменений.
P.S.
Я начал снова ковырять интернеты и нашёл нечто на форуме https://forums.developer.nvidia.com/t/sc16is7xx-serial-expander-support-device-tree/155020/8
Но там подключение через i2c. Если сравнивать с ним, то нас не прописано gpio-controller; и #gpio-cells = <0x0>;, но я не знаю что делают эти строки.
Раньше ставил. Влияния не было никакого. Сейчас попробовал - тоже.
Upd: Прикрепил схему платки. Скажите, у вас же стоит резистор R12 (тот который напротив надписи EN)?
Резистор R12 стоит.

Пока думаю, что SPI неверно настроен. Но нет идей как отладить или настроить.
 
Последнее редактирование:
Да, тоже так думал.

Нет изменений.

Раньше ставил. Влияния не было никакого. Сейчас попробовал - тоже.

Резистор R12 стоит.

Пока думаю, что SPI неверно настроен. Но нет идей как отладить или настроить.
Хоть у меня и нет 4 репки и данного модуля, но попытаюсь кое чем помочь,
По даташит
PINOUT_232.jpg

По pinout Рepka Pi 4 на сей момент однозначно затачивать под SPI0, так как SPI1 пока на горизонте не видно.

Ещё лучше оверлей рабочий искать если он допустим есть на одноплатнике который с таким же камнем (Allwinner H6), тоесть завести оверлей от Оранж Рi получится гораздо ловчее. В поисковике браузера или поисковой строке тематических ресурсов: "rs485 rs232 hat orange pi overlay"
 
  • Like
Реакции: An_me
Хоть у меня и нет 4 репки и данного модуля, но попытаюсь кое чем помочь,
По даташит
Посмотреть вложение 94

По pinout Рepka Pi 4 на сей момент однозначно затачивать под SPI0, так как SPI1 пока на горизонте не видно.
Я уже запутался, SPI0 или SPI1 на плате?
Ещё лучше оверлей рабочий искать если он допустим есть на одноплатнике который с таким же камнем (Allwinner H6), тоесть завести оверлей от Оранж Рi получится гораздо ловчее. В поисковике браузера или поисковой строке тематических ресурсов: "rs485 rs232 hat orange pi overlay"
На самом деле, не намного лучше прогугливается так)
 
После некоторых правок overlay, уже не вижу ошибок в логе dmesg / journalctr -b, но ttySC* файлов так же нету.

Этот кусок не уверен что к целевому spi:
Bash:
[    3.244345] /soc/spi@5011000/sc16is752@0: Fixed dependency cycle(s) with /soc/spi@5011000/sc16is752@0/sc16is752_clk
[    3.261526] spi spi0.0: chipselect 0 already in use
[    3.266424] spi_master spi0: spi_device register error /soc/spi@5011000/spidev@0
[    3.273862] spi_master spi0: Failed to create SPI device for /soc/spi@5011000/spidev@0

Вот что нету ошибок с sc16is752 (но отвалился блютуз):

Bash:
[    8.336128] systemd[1]: Started Journal Service.
[    8.341622] spi0.0: ttySC0 at I/O 0x0 (irq = 187, base_baud = 921600) is a SC16IS752
[    8.351742] serial serial1: tty port ttySC0 registered
[    8.358909] spi0.0: ttySC1 at I/O 0x1 (irq = 187, base_baud = 921600) is a SC16IS752
[    8.359312] serial serial2: tty port ttySC1 registered
[    8.442607] systemd-journald[140]: Received client request to flush runtime journal.
[   13.949197] Bluetooth: hci0: command 0xfc18 tx timeout
[   13.954466] Bluetooth: hci0: BCM: failed to write update baudrate (-110)
[   13.961235] Bluetooth: hci0: Failed to set baudrate
[   15.997184] Bluetooth: hci0: command 0xfc18 tx timeout
[   16.002438] Bluetooth: hci0: BCM: Reset failed (-110)

На осциллографе картинка всё еще плохая - какой-то бредовый сигнал - SCLK почти отсутствует, MISO/MOSI тоже.
Вроде ошибок нету в логе:
Bash:
root@Repka-Pi:~# journalctl -b | grep "spi"
июн 16 09:04:40 Repka-Pi kernel: /soc/spi@5011000/sc16is752@0: Fixed dependency cycle(s) with /soc/spi@5011000/sc16is752@0/sc16is752_clk
июн 16 09:04:40 Repka-Pi kernel: spi spi0.0: chipselect 0 already in use
июн 16 09:04:40 Repka-Pi kernel: spi_master spi0: spi_device register error /soc/spi@5011000/spidev@0
июн 16 09:04:40 Repka-Pi kernel: spi_master spi0: Failed to create SPI device for /soc/spi@5011000/spidev@0
июн 16 09:04:41 Repka-Pi kernel: spi0.0: ttySC0 at I/O 0x0 (irq = 187, base_baud = 921600) is a SC16IS752
июн 16 09:04:41 Repka-Pi kernel: spi0.0: ttySC1 at I/O 0x1 (irq = 187, base_baud = 921600) is a SC16IS752
июн 16 09:04:41 Repka-Pi systemd-modules-load[157]: Inserted module 'sc16is7xx_spi'
июн 16 09:05:09 Repka-Pi /usr/libexec/gdm-x-session[801]: dbus-daemon[801]: Activating service name='org.a11y.atspi.Registry' requested by ':1.1' (uid=122 pid=809 comm="/usr/bin/gnome-shell ")
июн 16 09:05:09 Repka-Pi /usr/libexec/gdm-x-session[801]: dbus-daemon[801]: Successfully activated service 'org.a11y.atspi.Registry'
июн 16 09:05:09 Repka-Pi /usr/libexec/gdm-x-session[846]: SpiRegistry daemon is running with well-known name - org.a11y.atspi.Registry
июн 16 09:05:10 Repka-Pi spice-vdagent[961]: vdagent virtio channel /dev/virtio-ports/com.redhat.spice.0 does not exist, exiting

Текущий overlay:

C-подобный:
/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun50i-h6";
    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
        };
    };

    fragment@1 {
        target = <&spi1>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
         
            /*pinctrl-names = "default", "default";
            pinctrl-1 = <&spi1_cs0>; */
            cs-gpios = <&pio 7 3 1>; // было <0>, <&pio 7 3 0>;


            sc16is752: sc16is752@0 {
            status = "okay";
                compatible = "nxp,sc16is752";
                reg = <0>; /* CE0 */
                spi-max-frequency = <4000000>;
                interrupt-parent = <&pio>;
                interrupts = <6 8 8>; /* IRQ_TYPE_EDGE_FALLING */
        interrupt-names = "irq";
                clocks = <&sc16is752_clk>;
        gpio-controller;
        #gpio-cells = <2>;
        #cell-cells = <1>;

                sc16is752_clk: sc16is752_clk {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <14745600>;
                };
            };
        };
    };
};
Странно, что ошибок нету, как и файлов ttySC* в /dev/.

Update. Eсли заменить CS0 на CS1 (cs-gpios = <&pio 7 2 1>;), то результаты точно такие.
 
Последнее редактирование: