0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_44130326 来源:Linux1024 2026-02-04 17:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发中,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 = 117IRQ_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 = 252IRQ_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开发知识脑图

wKgZO2kal-aAO7S3AAKaEj77BWU563.png

五、开发注意事项

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20802

    浏览量

    339138
  • uart
    +关注

    关注

    22

    文章

    1325

    浏览量

    107198
  • 瑞芯微
    +关注

    关注

    27

    文章

    909

    浏览量

    54752
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板上进行UART引脚复用配置

    IOMUX(引脚功能复用)是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术,它允许单个物理引脚通过软件配置为多种不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方式各异,本文将以【
    的头像 发表于 11-18 16:54 5861次阅读
    ElfBoard技术贴|如何在【<b class='flag-5'>RK</b>3588】ELF 2<b class='flag-5'>开发</b>板上进行<b class='flag-5'>UART</b>引脚复用<b class='flag-5'>配置</b>

    迅为RK3568开发板篇Openharmony配置HDF控制UART-实操-HDF驱动配置UART-修改HCS配置

    对于不同的平台,需要在对应的平台目录修改对应的 hcs 文件,接下来示例为在 rk3568下新增 uart4 uart9
    发表于 02-21 10:53

    迅为RK3568开发板实操-HDF驱动配置UART-修改HCS配置

    deviceMatchAttr 的值表示驱动的私有配置信息 5 serviceName 表示服务名称,服务加载成功之后会在开发板的/dev/目录下生成节点。例如 HDF_PLATFORM_U
    发表于 05-22 11:32

    OpenHarmony平台驱动案例--UART

    控制器编号 deviceMatchAttr = \"rockchip_rk3568_uart_0\"; // 驱动私有数据匹配的关键字,必须和驱动私有数据配置表中
    发表于 08-17 16:57

    【北京迅为】iTOP-RK3568开发板鸿蒙OpenHarmony系统南向驱动开发实操-HDF驱动配置UART

    【北京迅为】iTOP-RK3568开发板鸿蒙OpenHarmony系统南向驱动开发实操-HDF驱动配置
    的头像 发表于 03-25 11:02 2092次阅读
    【北京迅为】iTOP-<b class='flag-5'>RK</b>3568<b class='flag-5'>开发</b>板鸿蒙OpenHarmony系统南向<b class='flag-5'>驱动</b><b class='flag-5'>开发</b>实操-HDF<b class='flag-5'>驱动</b><b class='flag-5'>配置</b><b class='flag-5'>UART</b>

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制UART外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板上使用IOT库的UART接口,进行UART编程开发。例程将创建一个任务,通过
    的头像 发表于 04-22 14:22 1392次阅读
    基于小凌派<b class='flag-5'>RK</b>2206<b class='flag-5'>开发</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>UART</b>外设

    迅为RK3568开发板实操-HDF驱动配置UART

    对于不同的平台,需要在对应的平台目录修改对应的 hcs 文件,接下来示例为在 rk3568下新增 uart4 uart9
    的头像 发表于 06-27 15:58 745次阅读

    一文搞定RK平台Wi-Fi/BT调试!配置问题解决全攻略

    专用芯片,Wi-Fi/BT 的稳定运行直接影响产品体验。本文配置、编译、测试问题排查,手把手带你搞定 RK
    的头像 发表于 02-09 16:57 3385次阅读
    一文搞定<b class='flag-5'>RK</b><b class='flag-5'>平台</b>Wi-Fi/BT调试!<b class='flag-5'>从</b><b class='flag-5'>配置</b><b class='flag-5'>到</b>问题解决全攻略

    一文吃透RK平台OTA升级开发逻辑调试的完整指南

    ,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查,全方位拆解 RK 平台 OTA 升级开发,附关键流程
    的头像 发表于 02-09 16:26 1011次阅读
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>OTA升级<b class='flag-5'>开发</b>:<b class='flag-5'>从</b>逻辑<b class='flag-5'>到</b>调试的完整指南

    RK 平台 USB 摄像头成像调试指南:信号画质的流程优化

    在 RK(瑞芯微)平台开发中,USB 摄像头成像效果不佳是高频问题,其根源多与 USB 信号质量、PHY 寄存器配置及硬件环境相关。本文结合 Rockchip USB SQ Tool 
    的头像 发表于 11-26 07:05 1483次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> USB 摄像头成像调试指南:<b class='flag-5'>从</b>信号<b class='flag-5'>到</b>画质的<b class='flag-5'>全</b><b class='flag-5'>流程</b>优化

    RK3506 MIPI转HDMI显示开发实战:硬件驱动解析

    接芯片,可完美实现信号转换。 本文将从硬件选型、驱动流程、核心机制三个维度,详细拆解RK3506平台MIPI转HDMI的开发全过程,尤其聚焦
    的头像 发表于 01-06 07:09 1398次阅读
    <b class='flag-5'>RK</b>3506 MIPI转HDMI显示<b class='flag-5'>开发</b>实战:<b class='flag-5'>从</b>硬件<b class='flag-5'>到</b><b class='flag-5'>驱动</b><b class='flag-5'>全</b>解析

    EMC摸底测试整改:摸底合规的流程系统方案

    深圳南柯电子|EMC摸底测试整改:摸底合规的流程系统方案
    的头像 发表于 01-07 09:59 801次阅读

    RK 平台 SPI 开发完全指南(驱动 + 配置 + 测试 + 优化)

    Linux 平台 SPI 驱动已形成完善的开发体系,支持 Master/Slave 双模式、多速率适配及灵活配置。本文基于 Rockchip 官方
    的头像 发表于 01-30 22:35 1487次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> SPI <b class='flag-5'>开发</b>完全指南(<b class='flag-5'>驱动</b> + <b class='flag-5'>配置</b> + <b class='flag-5'>测试</b> + 优化)

    瑞芯微RK3506 Flexbus技术开发指南,原理、内核配置测试的完整攻略

    基于触觉智能的RK3506核心板/开发板,介绍FlexBus总线的技术架构、设备树配置驱动实现与测试方法,为嵌入式
    的头像 发表于 03-14 07:24 819次阅读
    瑞芯微<b class='flag-5'>RK</b>3506 Flexbus技术<b class='flag-5'>开发</b>指南,<b class='flag-5'>从</b>原理、内核<b class='flag-5'>配置</b><b class='flag-5'>到</b><b class='flag-5'>测试</b>的完整攻略

    万字长文吃透RK平台音频开发架构实战,调试工具全收录

    基于ALSA/ASoC的音频架构、芯片资源特性、驱动开发流程及调试方法,手把手教你搞定RK平台音频开发
    的头像 发表于 05-27 07:14 200次阅读
    万字长文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>音频<b class='flag-5'>开发</b>!<b class='flag-5'>从</b>架构<b class='flag-5'>到</b>实战,调试工具全收录