I2C协议

I2C(Inter-Integrated Circuit)协议是一种串行通信协议,它允许多个设备通过两条线(数据线SDA和时钟线SCL)进行通信,是一种通用的总线协议。它是由Philips(飞利浦)公司,现NXP(恩智浦)半导体开发的一种简单的双向两线制总线协议标准。有些电子器件他们有着不同的功能,有时需要快速的进行数据的交互,为了使用最简单的方式使这些芯片互联互通,于是I2C诞生了

I2C 总线,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

5种速率 I2C协议可以工作在以下5种速率模式下,不同的器件可能支持不同的速率。 标准模式(Standard):100kbps 快速模式(Fast):400kbps 快速模式+(Fast-Plus):1Mbps 高速模式(High-speed):3.4Mbps 超快模式(Ultra-Fast):5Mbps(单向传输) 其中超快模式是单向数据传输,通常用于LED、LCD等不需要应答的器件,和正常的I2C操作时序类似,但是只进行写数据,不需要考虑ACK应答信号

写时序(主机写入数据到从设备):

  1. 起始信号:主机通过在SCL为高时将SDA从高电平拉到低电平来发送起始信号。

  2. 发送从设备地址:主机发送从设备的7位或10位地址,以及一个读/写位(0表示写操作)。

  3. 等待应答:发送完地址后,主机等待从设备发送一个应答(ACK)信号。应答信号是一个低电平。

  4. 数据发送:主机按顺序发送数据字节,每发送一个字节后,等待从设备应答。

  5. 每个字节后的应答:从设备对每个接收到的字节发送一个应答信号。

  6. 发送结束信号:传输完所有数据后,主机通过在SCL为高时将SDA从低电平拉到高电平来发送停止信号。

  7. 通信结束:从设备在接收到停止信号后完成数据写入。

读时序(主机从从设备读取数据):

  1. 起始信号:与写时序相同,主机发送起始信号。

  2. 发送从设备地址:主机发送从设备的地址和读/写位(1表示读操作)。

  3. 等待应答:主机等待从设备发送应答信号。

  4. 数据接收:从设备开始发送数据,主机在每个SCL时钟周期内读取数据。

  5. 发送非应答:在接收到最后一个字节后,主机发送非应答(NACK)信号,表示数据读取结束。

  6. 发送停止信号:主机发送停止信号,从设备完成数据发送。

  7. 通信结束:通信在发送停止信号后结束。

4种信号

I2C协议最基础的几种信号:起始、停止、应答和非应答信号。 起始信号 I2C协议规定,SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。 停止信号 I2C协议规定,SCL处于高电平,SDA由低到高变化,这种信号是停止信号。

应答信号**** I2C最大的一个特点就是有完善的应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“我收到了”。 应答信号出现在1个字节传输完成之后,即第9个SCL时钟周期内,此时主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把SDA拉低,表示应答响应。

非应答信号 当第9个SCL时钟周期时,SDA保持高电平,表示非应答信号。

主机写-从机收,传输方向不变

 主机对从机发送数据时,主机对从机发送一个开始字节,然后即可一直发送数据。以示例来讲解,其第一帧数据为要操作的寄存器地址,所以为:“[1-Byte]开始字节(写) + [1-Byte]寄存器地址 + [1-Byte]寄存器数据”。

主机读-从机发,传输方向改变

  主机对向从机读取数据时,方式同发送数据有所不同,要多一次通信过程。   主机需要先向从机发送一次信号,告诉从机”我要读取数据“,然后重开一次通信,等待从机主动返回数据。以示例来讲解,发送 “[1-Byte]开始字节(写) + [1-Byte]要读取的寄存器的地址”,之后结束通信,或者重开始,来进入到第二次通信中,先发送 [1-Byte]开始字节(读),然后等待读取从机发送过来的 [1-Byte]数据 即可。

I2C协议,就像是一个电子设备们玩的"传话游戏":

  1. 两根线的游戏:在这个游戏中,所有的设备都通过两根线来传递信息,一根叫做SCL(时钟线),它像游戏里的节拍器,告诉设备什么时候可以传递信息;另一根叫做SDA(数据线),就是用来传递信息的。

  2. 开始游戏:游戏开始时,一个设备(主设备)会通过拉低SDA线来发出开始信号,这就像是一个信号,告诉大家“我要开始传递信息了”。

  3. 叫名字:主设备会通过SDA线发送一个特定的信息(设备地址),这就像是在叫另一个设备(从设备)的名字,告诉它“轮到你了”。

  4. 写信还是读信:在叫了从设备的名字之后,主设备还会告诉从设备是想写信(发送数据给从设备)还是读信(从从设备那里接收数据)。

  5. 传递信息:如果是写信,主设备就会通过SDA线发送信息;如果是读信,从设备就会通过SDA线发送信息给主设备。

  6. 一问一答:在传递信息的过程中,主设备会时不时地发送一个ACK(确认信号),就像是在说“我收到了”,这样就能确保信息传递的准确性。

  7. 结束游戏:当信息传递完毕后,主设备会再次操作SDA线,发出停止信号,这就像是宣布“游戏结束”。

  8. 轮流来:在I2C游戏中,可以有多个主设备,它们轮流来发起游戏,但是一次只能有一个主设备在玩游戏。

  9. 速度有限制:这个传话游戏的速度不是非常快,但是它足够简单,适合短距离内多个设备之间的通信。

  10. 简单易用:I2C协议就像是一个简单的传话游戏规则,设备们只要按照这个规则来,就可以轻松地互相传递信息了。

总之,I2C协议就是一种让电子设备们通过两根线进行信息传递的方法,它简单、灵活,非常适合在各种电子设备和微控制器之间进行通信。


 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值