I2C总线详细介绍


I2C 总线介绍

I2C(Inter-Integrated Circuit,集成电路总线) 是一种串行通信协议,广泛应用于嵌入式系统和电子设备中,用于在微控制器与外围设备(如传感器、EEPROM、显示屏等)之间进行低速数据通信。I2C 总线因其简单、高效和灵活的特点,成为许多设备的标配通信接口。


1. I2C 的原理

(1) 双线通信

I2C 总线由两根信号线组成:

  • SCL(Serial Clock Line,时钟线):由主设备(Master)产生时钟信号,用于同步数据传输。
  • SDA(Serial Data Line,数据线):用于主设备与从设备(Slave)之间的双向数据传输。

(2) 主从结构

  • 主设备(Master):控制总线的时钟和启动/停止数据传输。
  • 从设备(Slave):响应主设备的请求。

(3) 多设备通信

I2C 总线支持多个主设备和从设备连接到同一条总线,通过地址区分不同的从设备。

(4) 硬件连接

  • I2C 总线通过上拉电阻(通常为 4.7 kΩ)连接到电源,确保空闲状态下 SDA 和 SCL 线为高电平。
  • 所有设备的 SDA 和 SCL 线分别连接到同一条总线。

2. I2C 的特性

(1) 双向通信

  • 数据线 SDA 支持双向数据传输,主设备和从设备都可以发送和接收数据。

(2) 多主设备

  • I2C 总线支持多个主设备同时工作,但需要总线仲裁机制避免冲突。

(3) 速度支持

  • 标准模式:<= 100 kbps。
  • 快速模式:<= 400 kbps。
  • 高速模式:<= 3.4 Mbps。
  • 超快速模式:<= 5 Mbps(部分设备支持)。

(4) 硬件简单

  • 只需两根信号线,降低了电路设计的复杂性。

(5) 地址区分

  • 每个从设备都有唯一的 7 位或 10 位地址,主设备通过地址选择从设备。

3. I2C 的协议

(1) 起始条件(Start Condition)

  • 主设备通过拉低 SDA 线,然后在 SCL 线拉低时发送起始信号。

(2) 地址传输

  • 主设备发送 7 位或 10 位从设备地址,后面跟随读/写标志位(R/W):
    • 0:写操作。
    • 1:读操作。

(3) 数据传输

  • 在 SCL 的高电平期间,SDA 上的数据必须保持稳定。
  • 每个字节(8 位)传输后,接收方需要发送一个应答位(ACK)或非应答位(NACK)。

(4) 应答信号(ACK/NACK)

  • ACK(应答):接收方在第 9 个时钟周期拉低 SDA 线,表示成功接收数据。
  • NACK(非应答):接收方在第 9 个时钟周期保持 SDA 线高电平,表示接收失败或不需要更多数据。

(5) 停止条件(Stop Condition)

  • 主设备在拉高 SCL 线后,再拉高 SDA 线,发送停止信号。

4. 配置与使用

(1) 配置 I2C 外设

在 STM32 微控制器中,I2C 外设的配置通常基于 HAL 库。

使能 I2C 外设时钟
__HAL_RCC_I2C1_CLK_ENABLE();  // 使能 I2C1 外设时钟
配置 GPIO 为 I2C 功能
GPIO_InitTypeDef GPIO_InitStruct = {
   0};

GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9;  // I2C1 的 SCL 和 SDA 引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;         // 开漏输出
GPIO_InitStruct
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降薪码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值