IIC的ack信号为何会出现半高电平?

IIC的ack信号为何会出现半高电平?

  • IIC接口结构
    • 双线制
    • 速率
    • 从器件数量限制
    • 硬件结构
    • 时序波形
  • ACK响应
    • 一般情况下ACK响应位
    • ACK响应位出现半高电平

IIC(Inter-Integrated Circuit),是由飞利浦公司推出的一种串行通信总线(BUS),数字电路中应用非常广泛,经常用在对数据量以及速率要求不太高的场合,比如说用于传输单板配置、状态信息等。

应用中不太容易出现问题,但是也有例外,比如说本次文中要说的ack信号处出现的半高电平。出现半高电平的原因有很多,总结下来也就两点:1、代码写岔了;2、器件之间配合太挫了(第二点概率比较低,因为大家肯定都是按照IIC协议来设计器件的)

首先从协议入手

IIC接口结构

双线制

IIC有两条信号线(支持多主多从):
SCL(时钟线,由主器件输出(master))
边沿触发,上升沿将数据输入从器件,下降沿驱动从器件输出数据(这并不表示一个时钟周期即会触发读,又会触发写,可以对比时序图来理解),为边沿触发信号;

SDA(数据线,主、从(slave)器件都能输出)
双向数据线,漏极开路(OD,open-drain)/集电极开路(OC,open-collector)结构。

速率

标准模式:100kbit/s
快速模式:400kbit/s
高速模式:3.4Mbit/s

从器件数量限制

总线负载电容不超过400pF,电容会影响信号上升沿,进而影响总线速率,因此IIC对总线下电容总量有限制,从器件越多,总线下电容也越大;如果想要挂很多器件,则可以在总线中间串中继器进行隔离(例如9517)。

硬件结构

IIC的接口是OD/OC结构,因此其本身无法输出高电平。
坏处:
1、不接外部上拉就只能输出低电平,所以设计的时候千万记得把上拉电阻给留上;

好处:
1、外部上拉可以减少IC自身的驱动负担;
2、实现线与(IIC多主机同步时钟和仲裁总线控制权的时候感受就非常明显);
3、改变信号电平(在手册允许的范围内甚至能把信号电平整的比IC供电电压还要高)。
IIC的ack信号为何会出现半高电平?_第1张图片

时序波形

IIC的ack信号为何会出现半高电平?_第2张图片

ACK响应

一般情况下ACK响应位

一般链路上IIC信号长这个样子:
IIC的ack信号为何会出现半高电平?_第3张图片
在ACK位有时候会出现一个小脉冲,不过这个脉冲出现在时钟的低电平,不会对IIC时序判决有影响。

为什么会出现这个脉冲呢?
ACK位一般标志着主机和从机对总线控制权的转换:
1、主机为发送端发送地址位,从机为接收端接收地址位;
2、主机发送写信号,需要往从机写数据;
3、从机接收到信号,响应,在这一个bit位,主机释放总线变为接收端,从机变为发送端获取总线控制权。之后再将控制权交还给主机,用于后面的写操作,这个交换的过程存在时间差,主机拉SDA晚了,就有可能出现上面这种情况(理论上讲,前一次交换也可能出现这种现象;如果是读操作,一般就观察不到这种现象了)。

ACK响应位出现半高电平

那下面这种情况又是为啥呢?
IIC的ack信号为何会出现半高电平?_第4张图片
这种情况说白了就是IIC链路上的器件接口不是纯粹的OD/OC,一般多出在可编程器件上,比如说MCU,CPLD。如果IIC总线上挂了多个器件,在ACK位的时候,有器件管脚没有配置为OD或者OC,导致芯片内部将该管脚拉高,此时链路上其他的器件又需响应想拉低总线,如果两边链路上都存在串阻,则通过电阻分压会出现中间电平;如果没有串阻,或者串阻过小,则可能烧坏器件(灌电流)。总之非常危险,这个半高电平可能出现在任何位置,只不过ACK位容易被忽视,更容易出问题。

你可能感兴趣的:(01,低速)