3. S32K3 I2C 模块介绍
S32K3 系列 MCU 集成了符合 I²C 总线规范 v2.1 的 I2C 模块,支持标准模式(100 kbit/s)、快速模式(400 kbit/s)和快速模式+(1 Mbit/s)。该模块具备高度可配置性,支持多主机通信、10 位地址格式以及系统管理总线(SMBus)的部分特性,是连接 EEPROM、传感器、RTC 等外设的理想选择。
3.1 I2C 外设框图
下图展示了 S32K3 I2C 模块的内部架构及其与系统总线的连接关系。该框图清晰地划分了总线接口、时钟同步、地址识别、数据移位以及中断/DMA 控制等关键单元。
3.2 功能特性
S32K3 I2C 模块提供了丰富的硬件特性,能够满足从简单传感器读取到复杂多主机通信的各种应用场景。下表总结了其主要功能特性:
| 特性类别 | 具体描述 | 适用场景 |
|---|---|---|
| 通信速率 | 标准模式 (100 kbit/s)、快速模式 (400 kbit/s)、快速模式+ (1 Mbit/s) | EEPROM 读写、传感器配置 |
| 地址格式 | 支持 7 位和 10 位地址格式,可配置为主机或从机模式 | 多设备总线、扩展地址空间 |
| 多主机支持 | 内置仲裁逻辑和时钟同步,支持多主机同时操作 | 复杂系统、冗余设计 |
| 通用调用 | 支持通用调用地址 (0x00) 进行广播通信 | 系统初始化、同步 |
| SMBus 兼容 | 支持 SMBus 的部分时序和协议要求 | 电源管理、智能电池 |
| 可编程滤波 | 可配置的数字毛刺滤波器,抑制 SCL/SDA 线上的噪声 | 高噪声环境、工业现场 |
| 超时检测 | 内置总线超时计数器,防止总线锁死 | 故障安全、系统恢复 |
| 中断与 DMA | 支持多种中断事件和 DMA 请求,实现无 CPU 干预的数据传输 | 高吞吐量、低延迟应用 |
3.3 时钟源
I2C 模块的时钟源直接影响总线速率和时序精度。S32K3 的 I2C 模块通常挂载在 IPG Bus (Internal Peripheral Bus) 上,其时钟源来自系统时钟树中的 SPLL2_PHI1 或 FIRC,经过分频后得到模块时钟 I2C_CLK。
总线速率由 IBFD (I2C Bus Frequency Divider) 寄存器中的分频值 MULT 和 ICR 字段共同决定。计算公式如下:
// I2C 总线速率计算公式
// SCL 频率 = I2C_CLK / (2 × (MULT + 1) × (ICR + 1))
// 示例:假设 I2C_CLK = 40 MHz,目标速率 400 kHz
// 选择 MULT = 0,则 ICR = (40e6 / (2 × 1 × 400e3)) - 1 = 49
// 实际速率 = 40e6 / (2 × 1 × 50) = 400 kHz
下表列出了常见的时钟配置组合:
| I2C_CLK (MHz) | 目标速率 (kHz) | MULT | ICR | 实际速率 (kHz) | 占空比 |
|---|---|---|---|---|---|
| 40 | 100 | 0 | 199 | 100.0 | 50% |
| 40 | 400 | 0 | 49 | 400.0 | 50% |
| 40 | 1000 | 0 | 19 | 1000.0 | 50% |
| 80 | 400 | 1 | 49 | 400.0 | 50% |
3.4 中断与 DMA 支持
S32K3 I2C 模块支持多种中断事件,并能够与 DMA 控制器协同工作,实现高效的数据传输。合理利用中断和 DMA 可以显著降低 CPU 负载,提升系统实时性。
3.4.1 中断事件
I2C 模块的中断由 IBIC (I2C Bus Interrupt Configuration) 寄存器控制使能,中断标志位位于 IBSR (I2C Bus Status Register) 中。主要中断事件如下:
- TCF (Transfer Complete Flag):字节传输完成中断,每完成一个字节的发送或接收后触发。
- IAAS (Addressed As Slave):从机地址匹配中断,当模块作为从机且接收到匹配的地址时触发。
- IBB (Bus Busy):总线忙状态变化中断,当总线从空闲变为忙或从忙变为空闲时触发。
- IBAL (Arbitration Lost):仲裁丢失中断,多主机环境下仲裁失败时触发。
- IICIF (I2C Interrupt Flag):综合中断标志,当上述任一中断事件发生时置位。
3.4.2 DMA 支持
I2C 模块支持通过 DMA 进行数据传输,无需 CPU 逐字节干预。DMA 传输的配置要点如下:
| 配置项 | 寄存器/位 | 说明 |
|---|---|---|
| DMA 使能 | IBCR[DMAEN] | 置 1 使能 DMA 请求,当数据寄存器 IBDR 准备好时触发 DMA 传输 |
| DMA 通道 | DMA 控制器配置 | 需在 DMA 控制器中配置源地址、目的地址、传输大小和触发源 |
| 传输方向 | IBCR[TX/RX] | 主机模式下,TX=1 为发送,TX=0 为接收 |
| 传输完成 | DMA 完成中断 | DMA 传输完成后产生中断,通知 CPU 进行后续处理(如发送停止条件) |
3.4.3 中断与 DMA 的选择策略
下图展示了在不同应用场景下,中断与 DMA 的选择决策流程:
- 中断模式:适用于单字节或少量数据的随机访问,实现简单,延迟低。
- DMA 模式:适用于批量数据传输(如 EEPROM 页写入、连续读取),CPU 负载极低。
- 混合使用:实际项目中常采用 DMA 传输数据 + 中断处理起始/停止条件的方式,兼顾效率与灵活性。