嵌入式学习日志————I2C通信协议

发布于:2025-08-30 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

本专栏所有内容均是根据“江协科技”的系列视频学习记录所得,如有错误,或者没有写全的地方,望指正!!也欢迎大家去B站观看视频学习!!!

正文

1.简介

  • I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线

  • 两根通信线:SCL(Serial Clock)、SDA(Serial Data)

  • 同步,半双工带数据应答

  • 支持总线挂载多设备(一主多从、多主多从)

同步时序的好处:对时间要求不严格,对硬件电路不怎么依赖,在一些低端单片机,没有硬件资源的情况下,也很容易使用软件来模拟时序。缺点:多一根时钟线

异步时序的好处:可以省一根线,节省资源,缺点:对时间要求严格,对硬件电路的依赖比较严重

MPU6050模块:可以进行姿态测量等(使用I2C通信

OLED模块:显示文字等(使用I2C通信)

AT24C02,存储器模块(使用I2C通信)

DS3231,实时时钟模块(使用I2C通信)

2.硬件电路

  • 所有I2C设备的SCL连在一起,SDA连在一起

  • 设备的SCL和SDA均要配置成开漏输出模式

  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

CPU作为总线的主机:主机的权力很大,包括对SCL线的完全控制(任何时候,都是主机完全掌控SCL线),在空闲状态下,主机可以主动发起对SDA的控制,只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机。

从机可以使姿态传感器、OLED、存储器、时钟模块等,从机的权利比较小,对于SCL时钟线,在任何时刻,从机只能被动的读取,从机不允许控制SCL线,对于SDA数据线,从机不允许主动发起对SDA的控制,只有主机发送读取从机的命令后,或者从机应答的时候,从机才能短暂的获取SDA的控制权。

为了避免总线没有协调好导致电源短路这个问题,I2C的设计是:禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出的电路结构

3.I2C时序基本单元

  • 起始条件:SCL高电平期间,SDA从高电平切换到低电平

  • 终止条件:SCL高电平期间,SDA从低电平切换到高电平

  • 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节

  • 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)

  • 发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

  • 接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

4.I2C时序

(1)指定地址写

对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

(2)当前地址读

对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)——不能指定读的地址,当前地址指针会在每次读或者写操作后自增

(3)指定地址读

对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)

距离返校还有5天!!!


网站公告

今日签到

点亮在社区的每一天
去签到