UART 配置
内核配置
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 端口。
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 的模块时钟, 不同的模块时钟时波特率的误差可能不同,因此可以根据目标波特率进行模块时钟的设置。关于详细设置,可查看 模块时钟
功能参数配置
功能参数主要针对某一个使用方案而定,因此随着方案的不同,参数很可能不同,
&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