7.11.2. 使用指南
7.11.2.1. 内核配置
内核配置主要是参考快速入门 - 编译概述 - Kernel配置,进行 kernel 的功能选择:
Device Drivers
Character devices
Serial driver
<*> 8250/16550 and compatible serial support
<*> 8250/16550 support for ZX 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
7.11.2.2. 系统参数配置
M4 提供最多8个 UART 端口
这些参数主要在文件 m4.dtsi 中,模块系统参数随 SoC 的设定而定,一般不能进行更改,除非更换了新的 SoC,则需要在专业人士的指导下进行更改。
uart1: serial@18711000 {
compatible = "zx,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
M4 UART 模块的父时钟为 48M, UART 模块时钟的频率通过对其父时钟的进行除频来设置,clock-frequency 即用于设置 UART 的模块时钟, 不同的模块时钟时波特率的误差可能不同,因此可以根据目标波特率进行模块时钟的设置。
7.11.2.3. 功能参数配置
功能参数主要针对某一个使用方案而定,因此随着方案的不同,参数很可能不同,
这些参数主要在文件 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 一般会把要使用的某一功能的端口组预先定义,后期直接使用即可,定义一般放在 m4-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 模组,否则均不需要额外配置参数
7.11.2.4. 调试端口
调试端口的配置除了要使能相应的 UART 端口,还要在 target/aicxxx/common/env.txt 文件中配置波特率等相关参数
earlycon=smh
console=ttyS0,115200n8