IIC协议简介—学习笔记

IIC协议简介—学习笔记

一、IIC协议总体概述

IIC总线,是飞利浦推出的一种串行总线,是具备多主机系统所需的包括总线仲裁、高低速兼容的高性能串行总线。
IIC总线的硬件,是由一根数据线SDA,一根时钟线SCL构成。不同的器件,都是并联接在这两条线上。通过不同的硬件地址来识别通信对象。
IIC协议简介—学习笔记_第1张图片

IIC总线通过上拉电阻接到电源VCC,电阻大小要根据设备实际测量。总线空闲时候,SDA和SCL都是高电平。当其中一个设备拉低总线,整条线就全是低电平,器件与器件之间是“与”逻辑关系。
IIC协议简介—学习笔记_第2张图片

IIC总线可能会有多个主机进行互相控制多个从机,多个主机通信就会出现伸裁的情况。
单片机主要是单主机通信,多主机仲裁的问题本文不再概述。
IIC协议,是在同一根SDA线上进行双向通信,属于半双工类。IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。

二、IIC协议规则

IIC协议的数据有效性

规定,必须是在SCL的低电平期间,才能改变SDA的电平状态。SCL 高电平期间SDA线必须是稳定的,否则会错误的识别成起始信号或者停止信号。
IIC协议简介—学习笔记_第3张图片

IIC协议的起始信号、停止信号

SCL高电平期间,SDA下降沿是起始信号,之后就是总线忙碌,比如发送设备唯一地址。
SCL 高电平期间,SDA上升沿是终止信号。之后是总线的空闲。
起始信号和终止信号,都是主机发送。
IIC协议简介—学习笔记_第4张图片

IIC协议的通信格式

IIC协议,起始信号之后,可以连续传输多个字节。然后以停止信号结束这一帧数据的传输。
第一字节是7位硬件地址+传输方向控制位。地址是根据硬件配置的,比如AT24C02的地址是4位固定+3位接地,可以挂8个相同的AT24C02芯片。只有地址匹配的设备,才会处理总线上的数据。
IIC协议简介—学习笔记_第5张图片

IIC协议的字节格式

IIC协议,每个字节必须是8+ACK位。字节是先传输高位后传输低位。标准IIC协议是每位4微秒以上。但是有些器件是兼容各种速度的。
应答信号是接收端接收数据后,把SDA拉低。告诉发送端已经接收完毕。
非应答信号是接收端未能拉低,或者单片机读取数据的最后一个字节不需要应答。
IIC协议简介—学习笔记_第6张图片

三、IIC协议的数据读写三种方式

IIC协议单向发送数据

比如显示设备,一般情况下只需要写入数据,传输过程如下:
在这里插入图片描述

  1. 首先是起始信号S
  2. 然后是发送7位从机地址+传输方向位,0写
  3. SCL拉高,判断ACK,再拉低SCL
  4. 发送第1个字节,一般情况下都是指令,或者寄存器地址
  5. SCL拉高,判断ACK,再拉低SCL
  6. 发送第2个字节,一般情况下都是数据
  7. SCL拉高,判断ACK,再拉低SCL
  8. 可以继续传输数据,或者停止

IIC协议发送地址后立即读取数据

比如传感器设备,一般情况下只需要读出数据,传输过程如下:
在这里插入图片描述

  1. 首先是起始信号S
  2. 然后是发送7位从机地址+传输方向位,1读
  3. SCL 拉高,判断ACK,再拉低SCL
  4. 读取第1个字节,一般情况下都是指令,或者寄存器地址
  5. 发送应答ACK
  6. 读取第2个字节,一般情况下都是数据
  7. 发送应答ACK,或者不应答NACK
  8. 可以继续传输数据,或者停止

IIC协议先制定寄存器地址,再读取该寄存器的数据

比如存储芯片,一般情况下要先制定存储地址,再读取数据。传输过程如下:
在这里插入图片描述

  1. 首先是起始信号S
  2. 然后是发送7位从机地址+传输方向位,0写
  3. SCL 拉高,判断ACK,再拉低SCL
  4. 写数据,一般是写某个寄存器地址或者指令
  5. SCL拉高,判断ACK,再拉低SCL
  6. 再次起始信号S
  7. 然后是发送7位从机地址+传输方向位,1读
  8. SCL拉高,判断ACK,再拉低SCL
  9. 写数据,一般是写某个寄存器地址或者指令
  10. 读取字节,一般情况下都是数据
  11. 发送应答ACK,或者不应答NACK
  12. 可以继续传输数据,或者停止。

四、IIC协议的其他内容

  1. 多主机通信
  2. 多主机的仲裁和时钟发生
  3. 应答失败的数据重发
  4. 快速模式、Hs模式
  5. 10位寻址.广播呼叫地址、CBUS地址
    IIC协议简介—学习笔记_第7张图片

你可能感兴趣的:(单片机,stm32)