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