① 一文搞懂I2C通信
I2C通信,全称为集成电路总线(Inter-Integrated Circuit),是一种广泛应用于主板、嵌入式系统和手机与周边设备组件之间的串行通信总线。其设计源于飞利浦公司在1980年代初,旨在简化微控制器与传感器、显示器、IoT设备、EEPROM等之间的数据交换。I2C协议的简单性使其成为了众多电子设备之间通信的首选方案。
I2C通信的主要特点包括标准模式(100Kbps)、快速模式(400Kbps)、高速模式(3.4Mbps)和超快速模式(5Mbps)。硬件层面,I2C仅需SDA(串行数据线)和SCL(串行时钟线)两个引脚,并要求这些引脚配备上拉电阻,以确保总线的稳定性和数据的有效传输。
上拉电阻的计算公式基于逻辑低电压(VLO)、逻辑低电流(IOL)、信号的最大上升时间(TR)和总线电容(CB)。以5V电源为例,每条上拉电阻阻值至少应为1.53kΩ;而对于3.3V电源,每个电阻阻值至少为967Ω。为简化计算,常见选择值为4.7kΩ。在调试过程中,当测量SDA或SCL信号的逻辑LOW电压高于0.4V时,可判断灌电流可能过高,尽管这不意味着设备立即停止工作,但操作超出规格的设备时需谨慎,以避免通信故障、缩短设备使用寿命甚至永久损坏。
I2C通信的数据传输协议包括开始条件、地址位、读写位、应答位、数据位和停止条件。开始条件由主设备在通信开始时发送,用于唤醒所有从机。地址位用于识别特定从机,主设备发送地址后,从机通过比较地址位来确定是否参与通信。读写位指示数据传输方向,应答位由接收设备在数据传输后返回,以确认数据接收成功。数据传输后,接收设备返回一个ACK位,表示成功接收数据。最后,停止条件由主设备发出,用于结束数据传输。
I2C通信的实现涉及硬件连接和软件驱动。硬件连接包括SDA和SCL线的正确配置,以及上拉电阻的正确选择。软件驱动则需遵循特定的通信协议,包括数据传输格式和设备识别规则。在实际应用中,I2C总线允许主设备连接多个从机,每个从机使用7位或10位地址进行识别。多个主设备可以连接到同一总线上,但需通过检测SDA线电平来避免冲突。
在I2C的实际应用中,DS18B20温度传感器是一个典型的例子,它使用I2C总线与微控制器通信,实现温度数据的读取和处理。华大半导体HC32L136和ESP32等微控制器都支持I2C接口,可以轻松地驱动DS18B20等传感器。