tangbinbin Posted March 23, 2020 Posted March 23, 2020 Hi, I want to expand my NanoPi-NEO2 more uart ports through I2C, so I make a choice to use a sc16is750 module( just like sparkfun sc16is750 ). Below is all of my system information: pi@nanopineo2:~$ uname -a Linux nanopineo2 5.4.20-sunxi64 #20.02.1 SMP Mon Feb 17 02:37:37 CET 2020 aarch64 aarch64 aarch64 GNU/Linux First step ,I edit a device tree overlay for the sc16is750 named sc16is750-i2c.dts as below: pi@nanopineo2:/boot/overlay-user$ sudo nano sc16is750-i2c.dts /dts-v1/; /plugin/; / { compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5"; fragment@0 { /* This fragment is required only if using interrupts */ target = <&pio>; __overlay__ { sc16is750_pin_irq: sc16is750_pin_irq { pins = "PA17"; function = "irq"; bias-pull-up; }; }; }; fragment@1 { target = <&i2c1>; __overlay__ { #address-cells = <1>; #size-cells = <0>; sc16is750: sc16is750@4d { compatible = "nxp,sc16is750"; reg = <0x4d>; status = "okay"; clocks = <&sc16is750_clk>; gpio-controller; #gpio-cells = <3>; /* Below are optional properties for supporting interrupts */ interrupt-controller; #interrupt-cells = <3>; interrupt-parent = <&pio>; interrupts = <0 17 2>; /* PG11 IRQ_TYPE_EDGE_FALLING */ pinctrl-names = "default"; pinctrl-0 = <&sc16is750_pin_irq>; sc16is750_clk: sc16is750_clk { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <14745600>; }; }; }; }; __overrides__ { int_pin = <&sc16is750>,"interrupts:0"; addr = <&sc16is750>,"reg:0"; }; }; Second step, I add the sc16is750-i2c.dts to my /boot/overlay-usr as below: pi@nanopineo2:/boot/overlay-user$ sudo armbian-add-overlay sc16is750-i2c.dts Compiling the overlay Copying the compiled overlay file to /boot/overlay-user/ Reboot is required to apply the changes Afterthen, I checked sc16is750-i2c.dtbo as below: pi@nanopineo2:/boot/overlay-user$ fdtdump sc16is750-i2c.dtbo **** fdtdump is a low-level debugging tool, not meant for general use. **** If you want to decompile a dtb, you probably want **** dtc -I dtb -O dts <filename> /dts-v1/; // magic: 0xd00dfeed // totalsize: 0x5f8 (1528) // off_dt_struct: 0x38 // off_dt_strings: 0x4d0 // off_mem_rsvmap: 0x28 // version: 17 // last_comp_version: 16 // boot_cpuid_phys: 0x0 // size_dt_strings: 0x128 // size_dt_struct: 0x498 / { compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5"; fragment@0 { target = <0xffffffff>; __overlay__ { sc16is750_pin_irq { pins = "PA17"; function = "irq"; bias-pull-up; phandle = <0x00000002>; }; }; }; fragment@1 { target = <0xffffffff>; __overlay__ { #address-cells = <0x00000001>; #size-cells = <0x00000000>; sc16is750@4d { compatible = "nxp,sc16is750"; reg = <0x0000004d>; status = "okay"; clocks = <0x00000001>; gpio-controller; #gpio-cells = <0x00000003>; interrupt-controller; #interrupt-cells = <0x00000003>; interrupt-parent = <0xffffffff>; interrupts = <0x00000000 0x00000011 0x00000002>; pinctrl-names = "default"; pinctrl-0 = <0x00000002>; phandle = <0x00000003>; sc16is750_clk { compatible = "fixed-clock"; #clock-cells = <0x00000000>; clock-frequency = <0x00e10000>; phandle = <0x00000001>; }; }; }; }; __symbols__ { sc16is750_pin_irq = "/fragment@0/__overlay__/sc16is750_pin_irq"; sc16is750 = "/fragment@1/__overlay__/sc16is750@4d"; sc16is750_clk = "/fragment@1/__overlay__/sc16is750@4d/sc16is750_clk"; }; __fixups__ { pio = "/fragment@0:target:0", "/fragment@1/__overlay__/sc16is750@4d:interrupt-parent:0"; i2c1 = "/fragment@1:target:0"; }; __local_fixups__ { fragment@1 { __overlay__ { sc16is750@4d { clocks = <0x00000000>; pinctrl-0 = <0x00000000>; }; }; }; }; }; After reboot, I check the tty devices: pi@nanopineo2:~$ dmesg | grep tty [ 2.056137] printk: console [ttyS0] disabled [ 2.076722] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 26, base_baud = 1500000) is a U6_16550A [ 2.076773] printk: console [ttyS0] enabled [ 2.098045] 1c28400.serial: ttyS1 at MMIO 0x1c28400 (irq = 27, base_baud = 1500000) is a U6_16550A [ 2.119044] 1c28800.serial: ttyS2 at MMIO 0x1c28800 (irq = 28, base_baud = 1500000) is a U6_16550A [ 2.142198] 1c28c00.serial: ttyS3 at MMIO 0x1c28c00 (irq = 29, base_baud = 1500000) is a U6_16550A[ 5.873610] serial serial0: tty port ttySC0 registered Also, I have check the i2c: pi@nanopineo2:~$ sudo i2cdetect -y 1 [sudo] password for pi: 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- my sc16is750 address:0x4d Finally, I check the tty devices: pi@nanopineo2:~$ ls -l /dev/ttyS* crw------- 1 pi tty 4, 64 Mar 23 03:21 /dev/ttyS0 crw-rw---- 1 root dialout 4, 65 Mar 23 03:16 /dev/ttyS1 crw-rw---- 1 root dialout 4, 66 Mar 23 03:16 /dev/ttyS2 crw-rw---- 1 root dialout 4, 67 Mar 23 03:16 /dev/ttyS3 pi@nanopineo2:~$ cat /proc/tty/drivers /dev/tty /dev/tty 5 0 system:/dev/tty /dev/console /dev/console 5 1 system:console /dev/ptmx /dev/ptmx 5 2 system /dev/vc/0 /dev/vc/0 4 0 system:vtmasterunknown /dev/ttySC 242 0-7 serial g_serial /dev/ttyGS 245 0-3 serial serial /dev/ttyS 4 64-67 serial pty_slave /dev/pts 136 0-1048575 pty:slave pty_master /dev/ptm 128 0-1048575 pty:master unknown /dev/tty 4 1-63 console So, My question is why I cannot find the /dev/ttySC0? Anyone can give me some advice to resolve the problem. Thanks. 1
Recommended Posts