【RK3568 串口驱动开发】

163 阅读3分钟

一、串口通讯基础

串口(Serial Port),也称为串行通信接口,是一种在一条信号线上按位传输数据的通信方式。与并行通信相比,串口只需较少的数据线,适合长距离通信。常见的串口应用包括:调试信息输出、传感器数据传输、工业控制等。

1.1 基本概念

  • 单工 / 半双工 / 全双工: 单工:数据只能单向传输(如广播) 半双工:双方可收发数据,但不能同时进行(如对讲机) 全双工:双方可同时收发数据(如电话)
  • 异步 / 同步通信: 异步通信:使用起始位和停止位标记数据边界,无需共享时钟 同步通信:依赖共享时钟信号(如 SPI、I2C)
  • 波特率(Baud Rate): 单位时间内传输的符号数,通常与比特率相同(如 9600bps)

1.2 常见串口标准

标准电平范围传输距离典型应用
TTL0-5V/3.3V<1m开发板内部通信
RS232±3V~±15V~15m工业设备、调制解调器
RS485±2V~±6V~1200m工业控制网络

二、物理层接口详解

2.1 TTL 电平

TTL(Transistor-Transistor Logic)是一种使用 5V 或 3.3V 电压表示数字信号的电平标准:

  • 逻辑 0:0V~0.8V
  • 逻辑 1:2V~5V

优点: 电路简单、成本低 缺点: 抗干扰能力差、传输距离短 应用: 开发板内部通信、MCU 与外围设备连接

2.2 RS232 接口

RS232 是一种广泛使用的串行通信标准,采用负逻辑电平:

  • 逻辑 0:+3V~+15V
  • 逻辑 1:-3V~-15V

特点:

  • 使用 DB9 或 DB25 连接器
  • 全双工通信
  • 需要电平转换芯片(如 MAX232)

典型应用:

  • 计算机与调制解调器通信
  • 工业设备编程接口
  • 早期打印机接口

2.3 RS485 接口

RS485 是一种工业级串行通信标准,采用差分信号传输:

  • 逻辑 0:A-B > +200mV
  • 逻辑 1:A-B < -200mV

特点:

  • 支持多节点通信(最多 32 个设备)
  • 抗干扰能力强
  • 传输距离远(最长 1200 米)
  • 需要终端电阻(120Ω)匹配阻抗

应用场景:

  • 工业自动化控制系统
  • 楼宇自动化
  • 安防监控系统

三、RK3568 串口子系统架构

3.1 Linux 内核串口子系统

用户空间
├── 应用程序
│   └── 使用termios API操作串口
│
内核空间
├── tty_core
│   ├── 串口核心层
│   └── tty驱动抽象接口
│
├── 8250/16550驱动框架
│   ├── 串口控制器通用驱动
│   └── 平台设备注册
│
└── RK3568串口平台驱动
    ├── 硬件初始化
    ├── 中断处理
    └── 寄存器操作

在RK3568内核中,串口驱动使用的是8250通用串口驱动,以下是主要文件:

kernel/drivers/tty/serial/8250/8250_core.c //8250串口驱动核心
kernel/drivers/tty/serial/8250/8250_dw.c //Synopsys DesignWare 8250 串口驱动
kernel/drivers/tty/serial/8250/8250_dma.c //8250串口DMA驱动
kernel/drivers/tty/serial/8250/8250_port.c //8250串口端口操作
kernel/drivers/tty/serial/8250/8250_early.c //8250Early serial console驱动

3.2 menuconfig配置

export ARCH=arm64

export CROSS_COMPILE=/home/chenmy/rk356x/RK356X_Android11.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
Device drivers --->
	Character drivers --->
		Serial drivers --->

在这里插入图片描述

3.3 设备树配置

kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi中有串口设备节点的描述: 在这里插入图片描述kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi中启用uart9在这里插入图片描述kernel/arch/arm64/boot/dts/rockchip/rk3568-pinctrl.dtsiuart9的引脚复用描述: 在这里插入图片描述