IIC通信入门,搞懂这篇就够了

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

I2C是一种两线式串行总线,用于微控制器和外围设备之间的通信。它采用一主多从的总线结构,通过两根线进行数据传输。I2C通信协议包括起始信号、停止信号、应答信号和数据有效性。

🔎

延伸解读

硬件I2C与软件模拟的取舍

文章指出,硬件I2C利用芯片专用外设和引脚,效率高且代码简单,只需传参即可,但调试时只能依赖示波器观察波形。软件模拟则通过任意GPIO口手动控制电平,流程清晰,便于定位bug,且能加深对协议的理解。若芯片无I2C控制器或接口不足,软件模拟是可行替代。选择时需权衡开发效率与调试便利性。

从设备地址的读写位设计

I2C从设备地址通常为7位,最低位用于表示读/写操作。文章举例:设备地址0x50,读数据时发送0x50,写数据时发送0x51。这意味着实际地址需左移一位再或上读写位。理解这一点有助于正确配置通信,避免因地址错误导致从设备无响应。

ACK与NACK的时序含义

每发送一个字节后,发送端在第9个时钟周期释放SDA线,接收端拉低SDA表示有效应答(ACK),保持高电平表示无效应答(NACK)。主设备读取数据时,接收完最后一个字节后通常发送NACK,再发停止信号。ACK/NACK机制确保数据传输的可靠性,调试时可据此判断从设备是否正常响应。

数据有效性规则与起止信号

I2C规定,SCL高电平期间SDA必须保持稳定,仅当SCL为低电平时才允许改变SDA。起始信号是SCL高时SDA由高变低,停止信号是SCL高时SDA由低变高。因此,SDA在SCL高电平期间的跳变被识别为控制命令。编写软件模拟代码时,必须严格遵守此时序,否则通信会失败。

❓

Q&A

I2C通信的基本结构是什么?

I2C是一种两线式串行总线,采用一主多从的结构,一个主设备可以控制多个从设备。

I2C通信中如何发送数据?

主设备通过发送起始信号、设备地址、数据和停止信号与从设备进行通信。

I2C通信协议中有哪些重要信号?

I2C通信协议包括起始信号、停止信号、应答信号和数据有效性。

如何实现I2C通信?

I2C通信可以通过硬件I2C控制器或软件模拟实现,后者使用GPIO手动控制信号。

I2C通信中的应答信号有什么作用?

应答信号用于确认数据接收,ACK表示有效应答,NACK表示无效应答。

I2C通信的空闲状态是什么样的?

在空闲状态下,时钟线(SCL)和数据线(SDA)接上拉电阻,默认高电平,表示总线空闲。

🏷️

标签

➡️

继续阅读