Edit online

UART 配置

5 Dec 2024
Read time: 2 minute(s)

内核配置

内核配置主要是通过 make km (make kernel_menuconfig) 命令进行 kernel 的功能选择:
Device Drivers
    Character devices
        Serial driver
            <*> 8250/16550 and compatible serial support
            <*>   8250/16550 support for ArtInChip serial ports
            [*]   Support 8250_core.* kernel options (DEPRECATED)
            [*]   Support for variants of the 16550A serial port
            [ ]   Support for Fintek F81216A LPC to 4 UART RS485 API
            [*]   Console on 8250/16550 and compatible serial port
            (8)   Maximum number of 8250/16550 serial ports
            (8)   Number of 8250/16550 serial ports to register at runtime
            [ ]   Extended 8250/16550 serial driver options

系统参数配置

D211 提供最多 8 个 UART 端口。

这些参数主要在文件 target/d211/common/d211.dtsi 中,模块系统参数随 SoC 的设定而定,一般不能进行更改,除非更换了新的 SoC,则需要在专业人士的指导下进行更改。
uart1: serial@18711000 {
     compatible = "artinchip,aic-uart-v1.0";
     reg = <0x0 0x18711000 0x0 0x400>;
     interrupts-extended = <&plic0 77 IRQ_TYPE_LEVEL_HIGH>;
     reg-shift = <2>;
     reg-io-width = <4>;
     clocks = <&cmu CLK_UART1>;
     clock-frequency = <48000000>;
     resets = <&rst RESET_UART1>;
     dmas = <&dma DMA_UART1>, <&dma DMA_UART1>;
     dma-names = "rx", "tx";
 };
  • reg-shift

    UART 控制器兼容 8250 标准, 寄存器寻址使用索引而不是偏移描述,reg-shift 用来进行索引和地址的转换计算,该值不能修改

  • reg-io-width

    为寄存器的位宽,4 表示采用 32 位标准位宽,该值不能修改

  • clock-frequency

    D211 UART 模块的父时钟为 48M, UART 模块时钟的频率通过对其父时钟的进行除频来设置,clock-frequency 即用于设置 UART 的模块时钟, 不同的模块时钟时波特率的误差可能不同,因此可以根据目标波特率进行模块时钟的设置。关于详细设置,可查看 模块时钟

功能参数配置

功能参数主要针对某一个使用方案而定,因此随着方案的不同,参数很可能不同,

这些参数主要在文件 target/d211/xxx/board.dts 中,功能参数的设置必须和硬件原理图相匹配
&uart1 {
    pinctrl-names = "default";
    pinctrl-0 = <&uart1_pins_a>;
    linux,rs485-enabled-at-boot-time;
    aic,rs485-compact-io-mode;
    status = "okay";
};
  • pinctrl-names

    SDK 一般会把要使用的某一功能的端口组预先定义,后期直接使用即可,定义一般放在 target/d211/common/aicxxx-pinctrl.dtsi 文件中,目前 pinctrl-names 均设置为 default 即可。

  • pinctrl-0

    即指示 UART 预先定义的端口组,其中包括用于进行发送/接收选择的 GPIO 端口

  • linux,rs485-enabled-at-boot-time

    该端口配置为 RS485

  • aic,rs485-compact-io-mode

    使用 AIC 独有的精简 IO 模式, 只使用 2 个端口,一个用作发送接收,一个用作发送和接收控制

其中 rs485 功能还有其他一些可选配置项,如 time delay 等,目前 SoC 内部对此类参数做了很好的兼容,除非特殊的 rs485 模组,否则均不需要额外配置参数

调试端口

调试端口的配置除了要使能相应的 UART 端口,还要在 target/aicxxx/common/env.txt 文件中配置波特率等相关参数:

earlycon=smhconsole=ttyS0,115200n8