IIC协议简介—学习笔记

IIC协议简介—学习笔记

一、IIC协议总体概述

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

IIC总线通过上拉电阻接到电源VCC,电阻大小要根据设备实际测量。总线空闲时候,SDA和SCL都是高电平。当其中一个设备拉低总线,整条线就全是低电平,器件与器件之间是“与”逻辑关系。

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

二、IIC协议规则

IIC协议的数据有效性

规定,必须是在SCL的低电平期间,才能改变SDA的电平状态。SCL 高电平期间SDA线必须是稳定的,否则会错误的识别成起始信号或者停止信号。
在这里插入图片描述

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

SCL高电平期间,SDA下降沿是起始信号,之后就是总线忙碌,比如发送设备唯一地址。
SCL 高电平期间,SDA上升沿是终止信号。之后是总线的空闲。
起始信号和终止信号,都是主机发送。
在这里插入图片描述

IIC协议的通信格式

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

IIC协议的字节格式

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

三、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地址
    在这里插入图片描述

版权声明:本文为CSDN博主「越吃越胖的黄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chaofanzz/article/details/122556625

生成海报
点赞 0

越吃越胖的黄

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

Lin总线通信在STM32作为主机代码以及从机程序

距离上次做资料准备已经过去六天了。最近在学车,上周末就没有开电脑。这周开始进行了Lin通信的代码整理,目前是可以正常通信的了,采用的是增强型校验方式。后期再进一步跟进研究。。。更新一博,留

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配