【IIC协议】

几根线:2根,一根SCL为时钟,一根SDA为数据线
通信速率:标准模式100Kbps,快速模式400 Kbps,高速模式3.4 Mbps(有些从机不支持高速模式)
从机地址:7位或10位。大多是7位,那么一个字节是8位,留一位干什么?最低位bit0 用来表示读写操作。
如何读写:发送地址的时候,最低位为0表示要进行写,最低位为1表示读取。

起始和结束信号:起始信号:SCL为高时SDA由高变低。
结束信号:SCL为高时SDA由低变高。
两个信号都由主机产生。
ACK和NACK: 是应答信号,由从机产生。
何时取数据:在SCL为高的时候取数值,此时SDA为低是数据“0”,为高是数据“1”。
数据传输:主从设备以字节(8位)进行传输
读写时序:如下图
在这里插入图片描述
收发数据:如下图为读写一个字节和多个字节的时序图
在这里插入图片描述
示波器抓取读操作:我的从机地址为0x3A,我要读取从机设备的芯片ID,其中芯片ID存储在从机设备内部寄存器地址0x00中。这个芯片的ID是0xC7。如图,每一个bit数据都严格符合上图读写时序图
在这里插入图片描述
示波器抓取写操作:我的从机的地址是0x3A,要向从机的0x04寄存器写入一个字节数据0x03,下图为抓取到的时序信号,并分析获取二进制的每一位:
在这里插入图片描述
补充:为何会出现极短脉冲和半高电平?
一般链路上IIC信号:
在这里插入图片描述
在ACK位有时候会出现一个小脉冲,不过这个脉冲出现在时钟的低电平,不会对IIC时序判决有影响。

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

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

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

补充部分转自https://blog.csdn.net/Nightya/article/details/105454785?spm=1001.2014.3001.5506

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值