1. 课程导论:全志T113平台概述、UART串口通信基础、DMA技术简介、课程目标与学习路径

1.1 全志T113平台概述

全志T113系列是一款面向嵌入式工业控制、智能家居及物联网网关的高集成度应用处理器。其核心架构基于双核ARM Cortex-A7 CPU,主频最高可达1.2GHz,并内置一颗200MHz的RISC-V协处理器,用于低功耗实时任务管理。T113在多媒体解码、显示输出及外设接口方面具有显著优势,尤其适合需要多路UART高速通信的场景。

平台关键特性: 双核Cortex-A7 + RISC-V协处理器、支持Linux 5.4/6.1 LTS内核、内置DMA控制器(支持8通道)、最多8路UART接口(其中4路支持DMA模式)。
全志T113平台核心架构图 全志T113 核心架构框图 ARM Cortex-A7 双核 @ 1.2GHz L1 I/D: 32KB / 32KB RISC-V 协处理器 单核 @ 200MHz 低功耗实时任务 内存子系统 DDR3/DDR3L 最高 2GB AXI / AHB 高速总线矩阵 UART x8 4路支持DMA DMA 控制器 8通道 SPI / I2C 多路复用 EMAC / USB 网络与连接 说明:UART与DMA控制器通过AHB总线直接连接,实现数据从外设到内存的零CPU搬运。

1.2 UART串口通信基础

UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通信协议,通过TX(发送)和RX(接收)两根信号线实现全双工通信。在嵌入式Linux系统中,UART通常作为控制台、传感器数据采集、外设模块通信(如GPS、蓝牙)的主要接口。

UART串口通信关键参数
参数 典型值 说明
波特率(Baud Rate) 115200 / 921600 / 1Mbps 决定通信速率,波特率越高,单位时间传输数据量越大
数据位(Data Bits) 8 每帧传输的数据位数,通常为8位
停止位(Stop Bits) 1 / 2 帧结束标志,用于同步
校验位(Parity) None / Even / Odd 可选错误检测机制
流控制(Flow Control) None / RTS/CTS 硬件流控制,防止数据溢出
开发提示: 在全志T113上,UART的时钟源来自PLL_PERI(0)或OSC24M,可通过CCU时钟控制寄存器进行分频配置。驱动开发时需重点关注时钟使能与波特率发生器寄存器的正确配置。
UART异步串行数据帧格式 UART 异步串行数据帧格式(8N1) 起始位 0 D0 D1 D2 D3 D4 D5 D6 D7 停止位 1 数据传输方向(LSB First) 说明:一帧数据包含1位起始位(低电平)、8位数据位(LSB先发)、1位停止位(高电平),无校验位。

1.3 DMA技术简介

DMA(Direct Memory Access)是一种允许外设与内存之间直接传输数据的技术,无需CPU逐字节干预。在UART高速通信场景下,DMA能够显著降低CPU负载,提升系统吞吐量。全志T113集成的DMA控制器支持内存到外设、外设到内存、内存到内存三种传输模式,并支持链式描述符(Linked List Descriptor)实现连续传输。

中断模式 vs DMA模式 性能对比
对比维度 中断模式(PIO) DMA模式 提升幅度
CPU占用率(@1Mbps) ~85% ~5% 降低80%+
最大稳定波特率 921600 bps 3Mbps+ 提升3倍+
每字节中断次数 1次/字节 1次/批量(如1024字节) 降低99.9%
数据拷贝次数 CPU逐字节搬运 DMA硬件直接搬运 零CPU拷贝
常见误区: DMA并非“无延迟”传输。DMA传输需要初始化描述符、启动传输、等待完成中断,整个过程存在微秒级延迟。对于小数据量(<64字节),中断模式可能反而更高效。实际开发中应根据数据包大小动态选择传输模式。
DMA传输流程图 DMA 传输流程(UART接收场景) UART 接收FIFO 数据到达触发DMA请求 DMA 控制器 读取描述符,启动传输 系统内存(Buffer) 数据直接写入内存 CPU(Cortex-A7) 接收DMA完成中断 中断通知 配置描述符 关键流程:UART FIFO达到阈值 → 硬件触发DMA请求 → DMA控制器从描述符链表读取配置 → 启动总线传输 → 数据直接写入内存Buffer → 传输完成后触发中断通知CPU处理。

1.4 课程目标与学习路径

本课程旨在帮助嵌入式Linux驱动开发者系统掌握全志T113平台下UART串口DMA模式的驱动开发与性能调优方法。课程从基础原理出发,逐步深入到实际代码编写、设备树配置、DMA引擎API使用以及性能测试工具的应用。

课程核心目标

  • 理解硬件架构: 掌握T113 UART与DMA控制器的寄存器级工作原理。
  • 掌握驱动框架: 熟悉Linux串口子系统(serial core)与DMA引擎(dmaengine)的接口规范。
  • 实现DMA驱动: 从零编写支持DMA模式的UART驱动,包括设备树绑定、中断处理、DMA描述符管理。
  • 性能测试与优化: 使用串口环回测试、吞吐量基准测试工具(如pps-tools、perf)评估驱动性能。

学习路径规划

阶段 章节范围 核心产出
基础篇 第1-5章 搭建开发环境,理解T113 UART与DMA寄存器手册
驱动开发篇 第6-18章 完成DMA模式UART驱动的编写、编译与加载
测试与优化篇 第19-26章 性能基准测试、CPU负载分析、DMA延迟优化
实战与总结篇 第27-30章 多路UART并发DMA传输、常见问题排查、课程总结
学习建议: 建议学员提前准备一块全志T113开发板(如芒果派-MQ-R或香橙派Zero 2),并搭建好Ubuntu 22.04交叉编译环境。课程中所有代码均基于Linux 5.4.125内核,与T113官方BSP保持一致。
课程学习路径图 课程学习路径图 基础篇 第1-5章 环境搭建+原理 驱动开发篇 第6-18章 DMA驱动编码 测试优化篇 第19-26章 性能基准+调优 实战总结篇 第27-30章 多路并发+总结 学习路径说明 建议按顺序学习,每完成一个阶段后动手实践对应章节的代码示例。 驱动开发篇和测试优化篇可交替进行,通过测试反馈驱动代码优化。