1. 课程导论:I2C与SPI总线概述、DMA技术简介、高性能通信的意义与挑战

1.1 I2C总线概述

I2C(Inter-Integrated Circuit)总线由Philips(现NXP)开发,是一种同步、多主从、串行通信总线。它仅需两根线——串行数据线(SDA)和串行时钟线(SCL),即可实现设备间的数据交换。

核心特征: 两线制、多主设备仲裁、7位/10位寻址、标准模式100 kbps / 快速模式400 kbps / 高速模式3.4 Mbps。
I2C 总线拓扑结构 主设备 从设备1 从设备2 SDA(数据线) SCL(时钟线) R R 所有设备通过开漏输出连接到 SDA 和 SCL,外部上拉电阻保证总线电平
I2C 总线主要模式对比
模式时钟频率最大传输速率典型应用
标准模式(Sm)100 kHz100 kbps低速传感器、EEPROM
快速模式(Fm)400 kHz400 kbps音频编解码器、触摸控制器
高速模式(Hs)3.4 MHz3.4 Mbps图像传感器、高速ADC
超快速模式(UFm)5 MHz5 Mbps单工数据传输(仅写)

1.2 SPI总线概述

SPI(Serial Peripheral Interface)由Motorola开发,是一种同步、全双工、主从式串行通信总线。它使用四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(从设备选择)。

SPI vs I2C 关键差异: SPI 是全双工、无仲裁、无设备地址(通过片选线选择从设备)、速度通常更高(可达数十MHz),但需要更多引脚。
SPI 总线连接拓扑 SPI 主设备 SCLK 发生器 移位寄存器 从设备1 SS1 从设备2 SS2 SCLK MOSI MISO SS1/SS2 每个从设备独占一条片选线(SS),主设备通过拉低对应片选线选择通信对象 全双工模式下,主从设备同时发送和接收数据

1.3 DMA技术简介

DMA(Direct Memory Access,直接存储器访问)是一种允许外设与存储器之间直接传输数据的技术,无需CPU逐字节干预。DMA控制器接管总线控制权,在后台完成数据搬运,CPU可同时执行其他任务。

DMA 传输三要素: 源地址、目的地址、传输长度。DMA控制器自动完成地址递增、计数递减和传输完成中断。
DMA 传输架构(无CPU干预) CPU 任务调度 DMA 控制器 数据搬运 存储器 SRAM / Flash 外设 I2C / SPI / UART 请求 DMA 传输期间,CPU 可以继续执行指令,仅在传输完成时收到中断通知 适用于大数据块传输,如音频流、图像帧、传感器数据批量采集

1.4 高性能通信的意义与挑战

在嵌入式系统中,将I2C/SPI外设驱动与DMA传输结合,能够显著提升数据吞吐量、降低CPU占用率、减少系统延迟。这种组合方案在物联网终端、工业控制、可穿戴设备等领域具有重要价值。

传统轮询/中断方式 vs DMA方式对比
对比维度轮询方式中断方式DMA方式
CPU占用率高(持续等待)中(每次中断需保存/恢复上下文)低(仅初始化与完成中断)
数据传输速率受限于CPU指令周期受限于中断响应时间接近总线理论带宽
实时性差(CPU被占用)较好优秀(后台传输)
代码复杂度低中中高(需配置DMA描述符)
适用场景低速、单次小数据中速、事件驱动高速、大数据块、流式数据
主要挑战:
  • DMA描述符管理: 需要合理设计描述符链表,避免缓冲区溢出或数据丢失。
  • 缓存一致性问题: 在带Cache的MCU上,DMA与CPU共享内存时需处理Cache刷新/无效化。
  • 外设时序匹配: I2C/SPI的时钟频率、数据格式、中断优先级需与DMA通道配置精确匹配。
  • 多设备并发: 多个外设同时请求DMA传输时,需仲裁优先级和通道分配。
高性能通信面临的四大挑战 描述符管理 链表/环形缓冲区 缓存一致性 Cache 刷新策略 时序匹配 时钟/中断对齐 多设备并发 通道仲裁 本课程后续章节将逐一深入剖析这些挑战的解决方案 包括:描述符设计模式、Cache操作API、时序配置方法、DMA多通道调度

1.5 课程学习路径

本课程从基础概念出发,逐步深入到驱动实现与性能优化。以下是课程知识结构概览:

  • 基础篇(第1-5章): I2C/SPI协议详解、DMA控制器原理、外设驱动框架。
  • 进阶篇(第6-15章): 轮询/中断/DMA三种模式驱动实现、描述符管理、缓存一致性处理。
  • 实战篇(第16-25章): 多设备并发调度、性能基准测试、常见问题排查与优化。
  • 高级篇(第26-30章): 多核DMA、低功耗设计、RTOS集成、综合项目实战。
学习建议: 建议读者具备C语言基础、MCU编程经验(如STM32、ESP32、NXP i.MX RT系列),并准备一块支持DMA的开发板用于实验验证。