I2C总线原理及总线信号的实现

本文详细介绍了I2C总线的工作原理,包括其电路规范、通信过程、寻址方式、起始和停止信号、字节传送与应答机制。I2C总线是一种由Philips公司开发的串行、同步、半双工总线,适用于低速、近距离的芯片间通信。每个连接设备拥有唯一7位地址,并能作为主机或从机。通信过程中,主机发起并结束,从机响应。I2C时序包括发送和接收数据的完整流程,确保数据的准确传输。
摘要由CSDN通过智能技术生成

目录

1. I2C总线简介

1.1 I2C电路规范

1.2 I2C总线的通信过程

1.3 I2C的寻址方式

1.4 起始信号与停止信号

1.5  字节传送与应答

1.6 主机向从机发数据

1.7 从机向主机发数据

1.8 发送应答与接收应答

 1.9 同步信号

2. 典型I2C时序

2.1 发送一帧数据(主机向从机发数据)

2.2 接收一帧数据(从机向主机发数据)

2.3  先发送再接收数据帧(复合格式)


1. I2C总线简介

I2C总线(Inter IC BUS)是由Philips公司开发的一种串行,同步、半双工总线;
通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度;

I2C总线是一种多主机总线,连接IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,I2C也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;I2C总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;主要用于近距离(抗干扰能力稍弱),低速的芯片之间的通信(传输视频,带宽要求比较高的场合也是不行的);I2C总线有两根双向的信号线,时钟线SCL(Serial Clock)用于通信双方时钟的同步、(I2C可以发送任意多个字节,因为收发双方用的是同一个时间基准数据线SDA(Serial Data)用于收发数据,IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用;

1.1 I2C电路规范

所有I2C设备的SCL连在一起,SDA连在一起
设备的SCL和SDA均要配置成开漏输出模式
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右
开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题

1.2 I2C总线的通信过程

一: 主机发送起始信号启用总线

二:主机发送一个字节数据指明从机地址和后续字节的传送方向;

往总线上发一个字节数据:高7位地址,低一位为0主机向从机发数据;为1从机向主机发数据;

三:被寻址的从机发送应答信号回应主机;

应答:告诉主机“我存在,我听见了”

四:发送器发送一个字节数据

最低位为0发送器为主机,接收器为从机;

最低位为1发送器为从机,接收器为主机;

发送过程中不允许改变通信方向;

五:接收器发送应答信号回应发送器

0为应答1为非应答

. . . 循环步骤4和5

n:通信完成后主机发送停止信号释放总线

1.3 I2C的寻址方式

I2C总线上传的数据是广义的,既包括地址,又包括真正的数据

主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,‘0’表示主机发送数据,‘1’表示主机接收数据;总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址比较,如果相同,则认为自己被主机寻址,然后再根据最低位将自己定为发送器或者接收器;

1.4 起始信号与停止信号

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

起始信号和停止信号都是由主机后发出的,起始信号产生总线处于占用状态,停止信号产生后总线处于空闲状态;

1.5  字节传送与应答

I2C总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位(串口先低后高),发送器发送完一个学节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位

1.6 主机向从机发数据

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

注:I2C它的时钟相位和时钟极性是固定的,SCL低电平发送器发数据,SCL高电平时接收器读取数据;空闲时SCL,SDA为高电平;

1.7 从机向主机发数据

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

1.8 发送应答与接收应答

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

 1.9 同步信号

I2C总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定;

2. 典型I2C时序

2.1 发送一帧数据(主机向从机发数据)

第一步:主机发送起始信号启用总线;第二步:主机向总线发送1个字节的数据,高7位为从机地址,最低为后续字节的传输方向,这里为主机向从机发数据,所以最低位为0;第三步:从机应答;第四步:发送一个字节数据;第五步:从机应答;. . .直到遇到下面两种情况主机发送停止信号,停止通信;

两种情况:

1. 从机应答完,主机不想发了,主机直接发送停止信号,停止本次通信;

2. 从机不应答,主机也不会自找没趣,直接发送停止信号,停止本次通信;

2.2 接收一帧数据(从机向主机发数据)

 第一步:主机发送起始信号启用总线;第二步:主机向总线发送1个字节的数据,高7位为从机地址,最低为后续字节的传输方向,这里为从机向主机发数据,所以最低位为1;第三步:主机应答;第四步:发送一个字节数据;第五步:主机应答;不断重复直到主机不应答,主机发送停止信号,停止本次通信;(1为非应答,0为应答)

2.3  先发送再接收数据帧(复合格式)

要想改变数据的传输方向,只要再重新开始一次通信就可以改变方向了;

注意: 主机发起第二次通信的时候在它之前没有发送停止信号,如果第一次通信发停止信号,总线有可能会被其它主机占用,抢走使用权;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

记忆&碎片

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

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

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

打赏作者

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

抵扣说明:

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

余额充值