I2c是飞利浦公司研发的双向二进制串行总线。SDA: Serial Data Line: 串行数据线传输地址、数据、应答信号SCL: Serial Clock Line: 串行时钟线由主设备产生时钟同步数据传输通信原理I2C 是一种主从架构协议通常由一个主设备发起通信从设备响应。信号传输起始SCL 为高电平时SDA 从高→低跳变。表示传输开始。停止SCL 为高电平时SDA 从低→高跳变。表示传输结束。数据有效性SCL 高电平期间SDA 必须保持稳定只有在 SCL 低电平时才允许 SDA 变化。SCL 高电平期间SDA 必须保持稳定‌在SCL线为高电平时SDA线上必须保持稳定状态高或低。这是因为SCL的高电平状态是用来同步数据传输的如果SDA在这时变化会导致数据传输的混乱。如果在SCL为高电平期间SDA发生变化这通常被认为是通信错误或总线冲突可能导致数据损坏或者设备间的通信问题。在 SCL 低电平时才允许 SDA 变化: 当SCL线为低电平时SDA线上才允许进行状态变化。这是因为在SCL的低电平期间主设备通常是微控制器可以改变SDA的状态以发送数据位。这种机制确保了数据的稳定传输和正确的时序控制。确保数据有效性的措施‌使用上拉电阻‌在SDA和SCL线上使用上拉电阻可以确保在空闲状态下这些线是稳定的。例如如果总线空闲时SCL和SDA都应该是高电平那么每个线都应该连接一个上拉电阻到电源通常是Vcc。‌严格的时序控制‌主设备在SCL为低时改变SDA的状态并且在SCL变为高之前保持稳定。这需要主设备精确控制SCL的上升和下降沿。‌错误检测和恢复‌在通信协议中实现错误检测机制例如通过应答位或重试机制以处理可能的总线冲突或数据错误。‌使用高质量的线缆和连接器‌确保使用高质量的线缆和可靠的连接器以减少信号干扰和噪声。寻址和速度地址7位地址(最多128个设备包括部分保留)0x00 - 0x7F范围第八位是读写位0:写1:读。I2C 地址保留是为‌广播呼叫、10 位寻址兼容、CBUS 及未来协议扩展‌预留的特殊功能码‌0x00‌通用呼叫地址General Call用于同时寻址总线上所有支持该功能的从机 。‌0x01‌起始字节START byte用于特定启动序列或 SMBus 交互 。‌0x02–0x07‌CBUS 命令地址及不同总线格式预留 。‌0x08–0x0F‌保留用于‌10 位从机地址的前缀兼容‌高 4 位为 0000 或 1111 时的特殊编码防止与 10 位寻址模式冲突 。‌0x78–0x7F‌保留用于未来扩展或特殊主模式代码部分资料归入高位保留区。‌‌速度标准模式100 kbit/s通用场景默认模式快速模式 400kbit/s常用于传感器、摄像头等中等速率设备快速 模式1Mbit/s较少见需特定硬件支持高速模式3.4Mbit/s需主机发送特殊主代码启动仅单向传输时可达此速率 。‌‌I2C vs SPI vs UART 对比特性I2CSPIUART线数2SDA,SCL4SCK,MOSI,MISO,CS2TX,RX通信方式半双工全双工全双工典型速率100k/400k几 M~几十 MHz几 k~几 M baud多从机通过地址区分无需额外片选需要独立的 CS 引脚不支持点对点应答确认有无无