6. UART 使用

6.1. 简介

AIO-3562JQ支持 UART、RS232、RS485 接口

  • UARTx1

  • RS485x2

  • RS232x2

其中 UART 为 uart7,开发板的 RS232 接口由主控的 uart8 和 uart9 扩展出来,而 RS485 由 uart5 和 uart6 扩展出来。

AIO-3562JQ开发板的串口接口图如下:

_images/uart_interface.jpg

6.2. DTS 配置

文件路径kernel/arch/arm64/boot/dts/rockchip/rk3562-firefly-aio-3562jq.dtsi

/* RS485 */
&uart5 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart5m1_xfer>;
};

&uart6 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart6m0_xfer>;
};

&uart7 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart7m0_xfer>;
};

/* RS232 */
&uart8 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart8m0_xfer>;
};

&uart9 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart9m1_xfer>;
};

硬件接口对应软件上的节点分别为:

485A1/B1:   /dev/ttyS5
485A2/B2:   /dev/ttyS6
TX7/RX7:    /dev/ttyS7
232TX1/RX1:  /dev/ttyS8
232TX2/RX2:  /dev/ttyS9

6.3. 收发控制

RS485 需要额外控制收发,拓展 gpio 芯片 PCA9555 的最后一个引脚控制 485A1/B1 的收发,倒数第二引脚控制 485A2/B2 的收发。

首先查找 PCA9555 GPIO 的编号,执行如下命令可以看到编号范围是 496-511。该范围可能会因为修改内核而变化,以实际情况为准。

root@firefly#: cat /sys/kernel/debug/gpio | grep 2-0021
gpiochip5: GPIOs 496-511, parent: i2c/2-0021, 2-0021, can sleep:

那么最后一个引脚的编号为 511,倒数第二个为 510。

使用 /sys/class/gpio 子系统操作引脚:

# 申请使用 511 号引脚
echo 511 > /sys/class/gpio/export

# 设置方向为输出
echo out > /sys/class/gpio/gpio511/direction

# 写入 1 表示引脚输出高电平,控制 RS485 进入发送模式
echo 1 > /sys/class/gpio/gpio511/value

# 写入 0 表示引脚输出低电平,控制 RS485 进入接收模式
echo 0 > /sys/class/gpio/gpio511/value

# 另一个引脚也是同理,更换编号即可

上述操作可以通过代码读写文件完成。