RK平台UART开发!从驱动配置到测试全流程

晟盈英才 2026-02-05 4484人围观

嵌入式开发中,UART(通用异步收发传输器)是实现设备间数据交互的关键接口,广泛应用于调试、传感器通信等场景。瑞芯微Rockchip)平台针对不同操作系统(LinuxRT-Thread)提供了完善的UART开发支持,本文将结合官方开发指南,从功能特点、驱动配置、测试验证三个维度,带大家快速掌握RK平台UART开发技巧,文末还附上知识脑图方便梳理思路~

一、RK UART核心功能特点

无论基于Linux还是RT-Thread系统,RK平台UART均以16550A串口标准为基础,核心功能保持一致,实际支持情况需以具体芯片手册为准:

数据格式灵活:支持5-8位数据位、1/1.5/2位停止位,仅支持奇校验/偶校验(不支持mark/space校验)。

高效传输能力:自带32字节或64字节的收发FIFO,最高支持4M波特率(需配合芯片时钟分频策略),支持中断传输和DMA传输两种模式。

增强功能支持:部分UART模块支持硬件自动流控(RTS+CTS)和串口唤醒系统(需修改trust固件)。

二、Linux系统下UART开发实战

Linux系统中,RK UART分为普通串口控制台两种使用场景,配置流程差异较大,以下以常用的Linux 4.4/4.19内核为例说明。

(一)普通串口配置:三步搞定驱动与参数

普通串口适用于设备间数据通信(如与传感器、模块交互),核心是完成驱动路径确认、配置项开启和DTS参数修改。

1.明确驱动路径

Linux 3.10内核使用独立驱动文件drivers/tty/serial/rk_serial.cLinux 4.4及以上内核采用8250通用串口驱动,核心文件包括:

drivers/tty/serial/8250/8250_core.c(驱动核心)

drivers/tty/serial/8250/8250_dw.cSynopsis DesignWare适配)

drivers/tty/serial/8250/8250_dma.cDMA功能支持)

2. menuconfig开启配置

进入内核配置界面,按以下路径勾选UART相关选项,建议使用RK SDK默认配置:

Device Drivers--->Characterdevices---> Serial drivers---> [*]8250/16550andcompatible serial support(勾选8250驱动) [*] Rockchip serial port support(RK专属选项)

3. DTS参数配置(关键!)

DTS(设备树)用于定义UART硬件资源,以RK3568芯片UART1为例,典型配置如下,仅允许修改标注的可配置参数

wKgZO2kal-WAVkVfAAAfD26eyVM735.png

&uart1 { compatible ="rockchip,rk3568-uart","snps,dw-apb-uart"; reg = <0x00xfe6500000x00x100>;//硬件地址(不可修改) interrupts = 
    
     117
    IRQ_TYPE_LEVEL_HIGH>;//中断号(不可修改) clocks = <&cru SCLK_UART1>, <&cru PCLK_UART1>;//时钟(不可修改) clock-names ="baudclk","apb_pclk";//时钟名称(不可修改) reg-shift= <2>;//寄存器移位(不可修改) reg-io-width = <4>;//寄存器宽度(不可修改)  // 可配置参数1:DMA使能/关闭 dma-names ="tx","rx";//"tx"/"rx"开启,"!tx"/"!rx"关闭 // 可配置参数2:引脚复用(含流控引脚) pinctrl-names ="default"; pinctrl-0= <&uart1m0_xfer &uart1m0_ctsn &uart1m0_rtsn>;//开启流控引脚 // 可配置参数3:模块使能/关闭 status ="okay";//"okay"开启,"disabled"关闭 // 可配置参数4:串口唤醒(需配合trust固件) wakeup-source;};

示例需求:开启RK3568 UART1,启用DMA和硬件流控。

DTS修改后:如上配置,确保dma-names"tx"/"rx"pinctrl-0包含流控引脚,status设为"okay"

4.波特率配置与设备注册

波特率计算UART波特率=工作时钟源/内部分频系数/ 16,驱动会自动根据配置的波特率获取时钟,常用波特率(1152009216001.5M3M4M)均稳定支持。

设备注册验证:系统启动后,若日志出现fe650000.serial: ttyS1 at MMIO 0xfe650000 (irq = 67, base_baud = 1500000) is a 16550A,说明设备注册成功,对应节点为/dev/ttyS1(可通过DTSaliases修改编号)。

(二)控制台配置:作为系统调试接口

控制台串口用于输出系统日志、执行调试命令,基于fiq_debugger实现,以UART2为例:

1.驱动路径

Linux 3.10arch/arm/mach-rockchip/rk_fiq_debugger.c

Linux 4.4及以上:drivers/soc/rockchip/rk_fiq_debugger.c

核心驱动文件:drivers/staging/android/fiq_debugger/fiq_debugger.c

2.配置流程

1.menuconfig开启

Device Drivers --->[*]Staging drivers ---> [*]Android ---> [*]Rockchip FIQ Debugger

1.DTS配置:需禁用对应普通串口,配置bootargsfiq-debugger节点:

chosen: chosen { bootargs ="earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0";// 指向控制台设备};fiq-debugger { compatible ="rockchip,fiq-debugger"; rockchip,serial-id = <2>;// 使用UART2 rockchip,wake-irq = <0>; rockchip,irq-mode-enable = <1>;// 1=IRQ模式,0=FIQ模式 rockchip,baudrate = <1500000>;// 仅支持115200或1.5M interrupts = 
    
     252
    IRQ_TYPE_LEVEL_LOW>; pinctrl-names ="default"; pinctrl-0= <&uart2m0_xfer>; status ="okay";};&uart2 { status ="disabled";// 禁用普通串口模式};

1.parameter.txt配置Linux 3.10/4.4需添加):

CMDLINE:console=ttyFIQ0 androidboot.console=ttyFIQ0

(三)Linux UART测试:用官方工具验证

瑞芯微提供测试程序ts_uart.uart及测试文件send_0x55/send_00_ff(可联系FAE获取),测试步骤如下:

1.准备工作:通过ADB推送文件到开发板并赋予权限:

adb root && adb remountadb push ts_uart.uart /dataadb push send_0x55 /data && adb push send_00_ff /dataadb shell"su -c chmod +x /data/ts_uart.uart"

1.测试发送:向/dev/ttyS1发送send_0x55文件,波特率1.5M,关闭流控:

adbshell"/data/ts_uart.uart s /data/send_0x55 1500000 0 0 0 /dev/ttyS1"

通过USBUART模块连接PC,用串口工具(如SecureCRT)接收数据,验证发送是否正常。

1.测试自发自收:无需外部硬件,验证串口内部收发一致性:

adbshell"/data/ts_uart.uart m /data/send_00_ff 1500000 0 0 0 /dev/ttyS1"

若日志显示send:1172, receive:1172 total:1172,说明收发一致,测试通过。

1.测试流控:验证RTS/CTS硬件流控:

拉高CTS引脚电平,执行发送命令,数据应阻塞;

释放CTS为低电平,阻塞数据应继续发送;

测量RTS引脚电平,确认能正常高低切换。

三、RT-Thread系统下UART开发实战

RT-Thread作为轻量级实时操作系统,RK UART配置更简洁,核心是开启驱动、配置设备节点和测试验证。

(一)代码路径与配置

1.核心代码路径

串口框架:components/drivers/serial/serial.c/serial.h

适配层:bsp/rockchip-pisces/drivers/drv_uart.c/drv_uart.h

测试程序:bsp/rockchip-common/tests/termios_test.c

1.开启UART配置:进入RT-Thread配置界面,勾选需要的UART设备:

RT-Thread bsp drivers ---> RT-Thread rockchip common drivers ---> [*]Enable UART [*]Enable UART0 [*]Enable UART2 // 根据需求勾选其他UART(如UART1、UART3)

配置完成后,系统会生成/dev/uart0//dev/uart2等设备节点,通过list_device命令可查看:

msh>list_devicedevice type refcount------ -------------------- ----------uart2 CharacterDevice 0uart0 CharacterDevice 0

(二)串口测试与控制台配置

1.开启测试程序

RT-Thread bsp testcase---> [*] Enable BSP Common TEST [*] Enable BSP Common UART TESTRT-Thread Components---> Device virtual filesystem---> [*]Usingdevice virtual filesystem [*]Usingdevfsfordevice objects POSIX layerandC standard library---> [*] Enable termios feature

1.测试命令

接收数据:termtest r /dev/uart4 115200(从uart4接收,波特率115200

发送数据:termtest s /dev/uart4 115200(向uart4发送)

收发双向测试:termtest t /dev/uart4 115200

1.控制台配置:将UART2设为控制台,输出rt_kprintf日志:

RT-ThreadKernel--->KernelDeviceObject---> [*]Usingconsoleforrt_kprintf (128) the buffer sizeforconsolelog printf (uart2) the device nameforconsole (1500000) the baud rateforconsole

(三)波特率支持

RT-Thread下,1.5M及以下波特率可稳定支持,1.5M以上需结合芯片时钟树实际测试,确保数据传输稳定性。

四、RK UART开发知识脑图

五、开发注意事项

1.硬件差异:不同RK芯片UART功能可能裁剪(如部分不支持DMA或流控),需优先参考对应芯片手册。

2.资源冲突:控制台模式与普通串口模式互斥,启用fiq_debugger后需禁用对应普通串口节点。

3.DMA使用场景:仅当数据量极大时,DMA才能明显减轻CPU负载,普通场景建议用中断模式(启动更快、资源消耗少)。

掌握以上内容,即可轻松应对RK平台UART在不同系统下的开发需求,无论是调试接口还是设备通信,都能高效实现~

不容错过
Powered By Z-BlogPHP