Skip to main content

UART通讯

1. 添加新的uart口

以x1600e_halley6_nand_factory_defconfig编译配置为例,查看kernel中关于uart的配置

bhu@bhu-PC:~/work/build$ grep -nr "kernel" configs/x1600e_halley6_nand_factory_defconfig     //先查看kernel的配置
6:APP_kernel_dir=../kernel/kernel-x2000
7:APP_kernel_config=x1600_halley6_module_base_linux_sfc_nand_defconfig //kernel配置文件

配置文件位于kernel/kernel-x2000/arch/mips/configs目录下

bhu@bhu-PC:~/work/kernel/kernel-x2000/arch/mips/configs$ grep -nr ".dts"  ./x1600_halley6_module_base_linux_sfc_nand_defconfig

70:CONFIG_DT_X1600_MODULE_BASE_DTS_FILE="x1600_halley6_module_base.dts" //关于uart配置

x1600_halley6_module_base.dts位于kernel/kernel-x2000/arch/mips/boot/dts/ingenic目录下,可以对需要用到的串口进行添加修改

#include <dt-bindings/input/input.h>
#include "x1600.dtsi"
#include <dt-bindings/interrupt-controller/irq.h>
#include <generated/autoconf.h>

/ {
compatible = "ingenic,x1600_halley6_module_base", "ingenic,x1600";
};

&uart0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart0_pb>;
};

&uart1 {
status = "disable";
pinctrl-names = "default";
pinctrl-0 = <&uart1_pb>;
};

&uart2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart2_pb>;
};

&uart3 {
status = "disable";
pinctrl-names = "default";
pinctrl-0 = <&uart3_pb>;
};

参考串⼝引脚定义在kernel/kernel-x2000/arch/mips/boot/dts/ingenic目录下的x1600-pinctrl.dtsi文件

#include <dt-bindings/pinctrl/ingenic-pinctrl.h>

&pinctrl {

uart0_pin: uart0-pin {
uart0_pb: uart0-pb {
ingenic,pinmux = <&gpb 7 10>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION0>;
};
};
uart1_pin: uart1-pin {
uart1_pb: uart1-pb {
ingenic,pinmux = <&gpb 2 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION1>;
};
};

uart2_pin: uart2-pin {
uart2_pa: uart2-pa {
ingenic,pinmux = <&gpa 30 31>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION2>;
};
uart2_pb: uart2-pb {
ingenic,pinmux = <&gpb 0 1>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION1>;
};
};

uart3_pin: uart3-pin {
uart3_pb: uart3-pb {
ingenic,pinmux = <&gpb 4 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION0>;
};
uart3_pd: uart3-pd {
ingenic,pinmux = <&gpd 4 5>;
ingenic,pinmux-funcsel = <PINCTL_FUNCTION2>;
};
};

2. uart测试

设备节点

# ls /dev/ttyS*

/dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3

启动信息

[    0.450670] 10030000.serial: ttyS0 at MMIO 0x10030000 (irq = 55, base_baud = 9375000) is a uart0
[ 0.451338] 10031000.serial: ttyS1 at MMIO 0x10031000 (irq = 54, base_baud = 9375000) is a uart1
[ 0.451977] 10032000.serial: ttyS2 at MMIO 0x10032000 (irq = 53, base_baud = 9375000) is a uart2
[ 0.452404] console [ttyS2] enabled
[ 0.452404] console [ttyS2] enabled
[ 0.452780] bootconsole [early0] disabled
[ 0.452780] bootconsole [early0] disabled
[ 0.453481] 10033000.serial: ttyS3 at MMIO 0x10033000 (irq = 52, base_baud = 9375000) is a uart3

测试

#  echo "this is serial test string" > /dev/ttyS2

this is serial test string