接口技术 -- IIC

1 概念

IIC(Inter-Integrated Circuit)内部集成电路;多主机总线,非全双工
Pin:
   SDA:串行数据线
   SCL:串行时钟线
concept:
   同步:SCL时钟线进行高低电平控制逐位仲裁
   仲裁:多主机尝试控制总线,但只允许其中一个控制总线且报文不被破坏的过程。
图1.1 IIC总线
模式:标准(100Kbit/s) 快速模式(400Kbit/s) 高速模式(3.4Mbit/s)
最大电容:400pF

2 传输过程

主机A->丛机B
   A寻址B -> A(发送器)发数据B(接收器) -> A终止
从机B->主机A
   A寻址B -> A(接收器)收数据B(发送器) -> A终止

总结:A(start) -> A(address)B[→] ->A(data)B[⇆] -> A(ack)B[⇆] -> A(stop)

3 数据规范

   按位传输

3.1 数据有效

图2 数据规范
SDA数据需要在SCL高电平时保持稳定(读数据时,SCL电平为高)
SDA数据切换需要SCL电平变为低电平

3.2 起始停止条件(由主机控制)

图3 起始停止条件
起始:SCL高电平下,SDA由高切低 -> 忙状态
停止:SCL高电平下,SDA由低切高 -> 空闲状态

3.3 位规范

图4 数据传输规范
   SDA每发送一字节,需跟一个响应位(每发一字节数据,需发送9位),MSB传输。
图5 主从机响应
上图为主从机响应示意图,由主机产生

  • SDA在SCL高电平,器件保持低电平
  • 从机不能响应(从机正在处理其它事件),从机SDA保持高电平(主机发送停止信号终止或重复起始信号开始新传输)
  • 从机响应传输一段时间,不能再接收数据,主机必须终止传输(从机在第一个字节后没有响应)
  • 主机接收时,必须在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束,且从机释放数据线,允许主机停止或重复

3.4 同步与仲裁(此概念重要)

3.4.1 同步

图6 同步

  • 时钟同步通过I2C接口到SCL;SCL变为低电平->每个器件开始计数它们的低电平周期->此时器件会使SCL保持低电平状态。
  • 只要器件有一者仍处于低电平,SCL会一直保持下去,其它低电平周期短的器件进入高电平等待状态。
  • 所有器件释放低电平后,时钟线释放变高电平,之后器件时钟与SCL线状态无差别。
  • 器件开始计数高电平周期,首先完成高电平周期的器件会再次将SCL拉低。
  • 总结:SCL低电平由低电平周期长的器件决定;SCL高电平周期由高电平周期短器件决定
  • 此模式除用于仲裁,还可作为握手使能接收器处理字节级或位级的快速数据传输。器件可以快速接收数据字节,但需要更多时间保存字节或准备下一字节,从机以握手过程在接收响应一个字节后使SCL保持低电平,迫使主机进入等待状态,直到下一字节传输。在位级中,器件通过延长每个时钟的低电平周期减慢总线时钟,从而,任何主机的速度都可以适配这个器件的内部操作速率。

3.4.2 仲裁

图7 两主机之间仲裁

  • SCL线为低电平时,仲裁在SDA发生
    仲裁可以很多位:比较地址位(寻址相同,比较数据位、响应位)
  • 丢失仲裁的主机可以产生时钟脉冲直至丢失仲裁的该字节末尾
  • 主机结合从机功能时,丢失仲裁,可能成为赢得仲裁主机在寻址的器件,此时主机必须切换到从机模式
  • I2C总线控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何优先权
  • 仲裁不可进行情况:重复起始条件和数据位;停止条件和数据位;重复起始条件和停止条件

4 协议时序规范(编程所需重点)

   本章不考虑10位寻址,只考虑7位寻址

4.1 写时序

图8 写时序
→ 主机发送start信号:SCL(1) SDA(1->0)
→ 7bit设备地址
→ 1bit确定是读/写(1/0):0
→ 1bit响应(从->主) :SDA(0)
(→ 写设备内部寄存器地址→ 响应)
注:这里发送command,相当于判别是读寄存器还是写寄存器,该值完全由slave决定
→ 8bit数据(主->从)+1bit响应(从->主) //n次
→ 主机发送stop信号:SCL(1) SDA(0->1)

4.2 读时序

图9 读时序
→ 主机发送start信号:SCL(1) SDA(1->0)
→ 7bit设备地址
→ 1bit确定是读/写(1/0):1(写)
→ 1bit响应(从->主) :SDA(0)
(→ 读设备内部寄存器地址 → 响应)
→ 7bit设备地址+1bit 确定读写:读 + 1bit ACK
→ 8bit数据(主->从)+1bit响应(主->从) //n次
→ 主机发送stop信号:SCL(1) SDA(0->1)

5 其它

Q1:SDA如何实现双向传输?
内部电路必然存在双引脚(发送/接收)
Q2:主设备(从)发送数据时,从设备(主)发送引脚,不影响数据发送?
内部存在三极管
图10 内部电路
表1 真值表

ABSDA
001(上拉电阻决定)
010
100
110

   下面解释上拉电阻作用(I2C由于开漏输出与上拉电阻简化了协议设计):

  • I2C设备挂载时,应实现“线与”特性,这是实现仲裁与时钟同步的关键。
  • 由于内部构成原因,一个输出级为漏极/集电极开路(开漏输出),只能输出低电平和高阻态(电阻很大,近似开路),也因此导致总线只受低电平影响(设备只能输出低电平使用总线),从而完成“线与”功能。
  • 而如何实现总线高电平,这需要上拉电阻,当总线空闲时,所有设备输出高阻态,无法将总线拉高,这就需要上拉电阻进行拉高,使总线呈现高电平。
    例如:ACK信号为低电平,这是由于内部电路决定(主设备不驱动三极管,从设备也不驱动时,三极管截止,SDA由上拉电阻拉成高电平,从设备接收数据后,发响应信号,驱动三极管,使SDA变为低电平)

上拉电阻对I2C协议的影响:

  • 上拉电阻大小不是随便用的!涉及到通信速率与功耗的取舍。协议层对电平的变化时间有严格的要求和限制,而电平的变化受总线电气特性的影响。
  • 对总线而言,上拉电阻越大,信号上升时间越长,通信速率越低,反之亦然。但阻值过小,总线低电平时电阻的大电流会增加电路功耗。
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值