关于I2C协议的理解

关于I2C协议的理解
1、介绍

  I2C是一种双向、二线制、同步、半双工串行总线。

  I2C总线数据传输速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s。

2、时序理解在这里插入图片描述

  空闲:SCL和SDA都为高电平。

  起始条件:SCL为高电平时,SDA由高电平到低电平。

  停止条件:SCL为高电平时,SDA由低电平到高电平。

  数据位:只有在SCL为低电平时才能改变SDA,在SCL为高电平时需要保证SDA的稳定。

  地址位:一般前4位是器件本身固定的,5-7位可以选择,最后一位是读写位,0写1读。

  字节格式:发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,首先传输的是最高位。

  应答信号:一个字节数据传输完毕时,Master在第9个脉冲前把SDA拉高然后释放总线,Slave在接收到数据后,把SDA拉低以发出ACK信号,Master读取到SDA线上被拉低,则说明数据传输成功。

  注意:并非每一次字节传输完成后都会有ACK信号,以下三种除外。

  • 当Slave无法响应Master发送的地址时,在第9个SCL周期内没有拉低SDA,即没有ACK信号,此时主机会发送一个Stop信号来结束此次传输或者发送Start信号重新开始传输。
  • 如果Slave在传输过程中不能接收更多的数据时,它也不会发出ACK标志,这样Master在接收不到ACK标志的时候,会发出一个Stop信号来结束此次传输或者发送Start信号重新开始传输。
  • 主机接收器在接收到最后一个字节后,不会发出ACK信号,从机释放SDA线,以允许主机发送Stop信号来结束传输。
5、关于从机接收的问题

  如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态,当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。

6、注意

  ① 起始信号和终止信号都是由主机发出的,在此时从机仅处于空闲状态。当起始信号产生后,总线就处被占用的状态,在终止信号产生后,总线又回到了空闲状态。

  ② 主机完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要重新发送起始信号,它既作为前一次数据传输的结束,又作为后一次传输的开始。

  ③ 在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为在总线上的任一器件将SCL锁定在低电平即可。

  ④当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送“Stop”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值