1. 课程导论:I2C与SPI总线概述、DMA技术简介、高性能通信的意义与挑战
1.1 I2C总线概述
I2C(Inter-Integrated Circuit)总线由Philips(现NXP)开发,是一种同步、多主从、串行通信总线。它仅需两根线——串行数据线(SDA)和串行时钟线(SCL),即可实现设备间的数据交换。
核心特征: 两线制、多主设备仲裁、7位/10位寻址、标准模式100 kbps / 快速模式400 kbps / 高速模式3.4 Mbps。
| 模式 | 时钟频率 | 最大传输速率 | 典型应用 |
|---|---|---|---|
| 标准模式(Sm) | 100 kHz | 100 kbps | 低速传感器、EEPROM |
| 快速模式(Fm) | 400 kHz | 400 kbps | 音频编解码器、触摸控制器 |
| 高速模式(Hs) | 3.4 MHz | 3.4 Mbps | 图像传感器、高速ADC |
| 超快速模式(UFm) | 5 MHz | 5 Mbps | 单工数据传输(仅写) |
1.2 SPI总线概述
SPI(Serial Peripheral Interface)由Motorola开发,是一种同步、全双工、主从式串行通信总线。它使用四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(从设备选择)。
SPI vs I2C 关键差异: SPI 是全双工、无仲裁、无设备地址(通过片选线选择从设备)、速度通常更高(可达数十MHz),但需要更多引脚。
1.3 DMA技术简介
DMA(Direct Memory Access,直接存储器访问)是一种允许外设与存储器之间直接传输数据的技术,无需CPU逐字节干预。DMA控制器接管总线控制权,在后台完成数据搬运,CPU可同时执行其他任务。
DMA 传输三要素: 源地址、目的地址、传输长度。DMA控制器自动完成地址递增、计数递减和传输完成中断。
1.4 高性能通信的意义与挑战
在嵌入式系统中,将I2C/SPI外设驱动与DMA传输结合,能够显著提升数据吞吐量、降低CPU占用率、减少系统延迟。这种组合方案在物联网终端、工业控制、可穿戴设备等领域具有重要价值。
| 对比维度 | 轮询方式 | 中断方式 | DMA方式 |
|---|---|---|---|
| CPU占用率 | 高(持续等待) | 中(每次中断需保存/恢复上下文) | 低(仅初始化与完成中断) |
| 数据传输速率 | 受限于CPU指令周期 | 受限于中断响应时间 | 接近总线理论带宽 |
| 实时性 | 差(CPU被占用) | 较好 | 优秀(后台传输) |
| 代码复杂度 | 低 | 中 | 中高(需配置DMA描述符) |
| 适用场景 | 低速、单次小数据 | 中速、事件驱动 | 高速、大数据块、流式数据 |
主要挑战:
- DMA描述符管理: 需要合理设计描述符链表,避免缓冲区溢出或数据丢失。
- 缓存一致性问题: 在带Cache的MCU上,DMA与CPU共享内存时需处理Cache刷新/无效化。
- 外设时序匹配: I2C/SPI的时钟频率、数据格式、中断优先级需与DMA通道配置精确匹配。
- 多设备并发: 多个外设同时请求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的开发板用于实验验证。