简单介绍IIC通信协议

server/2024/12/22 18:29:50/

文章目录

  • 一,简单介绍
  • 二,IIC物理层
  • 三,IIC通信时序
    • 1.起始位与停止位
    • 2.IIC读写地址位信号
    • 3.IIC应答信号
    • 4.IIC数据位收发信号
  • 四,总线速率
  • 五,主机发送数据流程
  • 六,主机接收数据流程
  • 七,IIC的时钟延展(clock strectching)

一,简单介绍

​ IIC Bus是飞利浦公司推出的,在电子控制领域的通信协议典型的电压准位是3.3v和5v。**IIC 是串行,同步的半双工协议。**IIC的电路简单,连接线少,控制简单,通信速率高。

二,IIC物理层

  • IIC总线是一种主从结构(master/slave)的总线协议,一条总线上的每一个设备都可以作为主设备或从设备使用,但是一般一条总线上只有一个主设备,主设备通常是CPU,从设备通常是各种传感器,一般来讲,从设备只能被动的接收主设备的通信请求,也就是说,通信的开始往往是主设备主机发起的
  • IIC具有SCL时钟线和SDA数据线两条线来传输数据。
  • IIC寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
  • 具有三种传输模式,标准模式传输速率100kbit/s,快速模式400kbit/s,高速模式3.4Mbit/s,但是大部分的IIC设备目前不支持高速模式。
  • 连接到相同总线的IIC设备的数量收到总线最大电容400pF的限制。

IIC寻址:

# 7bit寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
# 10bit寻址:10bit寻址是和7bit寻址相兼容的这样就可以在一条线上兼容使用了,10bit地址传输时,总共占两个字节,前5bit用来选择寻址模式,剩下三位中,两位是地址高位ADDRESS9,和ADDRESS8,最后一位依旧是读写位置,剩下的第二个字节就是剩下的地址,即ADDRESS7~ADDRESS0。

三,IIC通信时序

1.起始位与停止位

​ 首先,一般情况下,IIC的SDA和SCL线是被上拉电阻拉高的,也就是说,默认情况下的SDA线和SCL线是高电平的。

  • 起始位s位:SCL时钟线保持高电平,SDA出现一个下降沿。
  • 停止位p位:SCL时钟线保持高电平,SDA出现一个上升沿。

在这里插入图片描述

2.IIC读写地址位信号

​ 在发出start起始位信号后,第二个时序应该立刻给出从机的目标物理地址(7bit或10bit地址),而站在主设备的角度来讲有读/写从设备两个功能。

  • 8bit时,高7位表示从机的地址,最低的一位表示读写方向。
  • 0为写操作,1为读操作。

3.IIC应答信号

​ 应答信号分为两种,一种是希望继续进行通信的ACK信号,一种是NACK的结束信号。主机在发送start信号和地址,读写信号后,主机将释放对SDA的限制权,SDA电平被上拉电阻拉高,由接收方(从机)控制。

  • ACK应答信号:希望继续通信,SCL低电平时,从机将把SDA改为低电平
  • NACK应答信号:不希望继续通信,SCL低电平时,从机将把SDA保持高电平

4.IIC数据位收发信号

​ IIC的数据收发时,每个字节必须是8个字节。同时是采用MSB字节序收发的。**高电平是1,低电平是0。**SCL高电平期间,SDA必须保持稳定,高低电平的跳变,必须在SCL低电平期间进行跳变,(因为SCL高电平期间,SDA的变化代表的是信号的起始位和终止位)。数据收发时,每个字节收发结束后必须跟一个ACKX信号或者NACK信号。

在这里插入图片描述

所以读取数据位时,应该在SCL为高电平时进行读取,因为这时候SDA线上的电平是保持稳定的。

四,总线速率

I2C 总线是一种同步、半双工、采用电平信号收发的串行总线,其速率支持:

  • 标准模式(Standard-mode):速率高达 100kbit/s。
  • 快速模式(Fast-mode):速率高达 400kbit/s。
  • 快速模式+(Fast-mode Plus):速率高达 1Mbit/s。
  • 高速模式(High-speed mode):速率高达 3.4Mbit/s
  • 超快速模式(Ultra Fast-mode):速率高达 5Mbit/s (单向传输时支持)

五,主机发送数据流程

  1. 主机检测到总线是空闲的,发送s信号(即起始位)。开始通信。(r/w=0)
  2. 紧接着主机发送目标从机的地址以及读写位。
  3. 对应的从机返回ACK信号。(SDA低电平0)
  4. 主机发送8bit一字节的数据。
  5. 从机接收数据后返还ACK应答信号。
  6. 主机收到ACK数据后继续发送下一个数据字节。
  7. 主机发送完最后一个字节并收到ACK信号后,发送P停止位信号,结束本次通信并且释放总线。
  8. 从机收到P信号后退出通信。

在这里插入图片描述

六,主机接收数据流程

  1. 主机发送s信号(即起始位)。开始通信。(r/w=1)
  2. 紧接着发送要从哪一个从机接收地址,和读写位。
  3. 从机返回应答信号后向主机发送数据。
  4. 主机收到数据后向从机发送ACK信号。
  5. 从机接收到应答信号后继续发送数据。反复循环。
  6. 当主机发现接收数据后,向从机发送NACK信号,从机收到非应答信号后停止发送。
  7. 主机发送非应答信号后,发送P停止信号,主机和从机停止通信。

在这里插入图片描述

七,IIC的时钟延展(clock strectching)

​ 首先,什么是时钟延展呢?一般情况下来说,IIC的时钟是由主机cpu提供的,但是有的时候从设备的速率跟不上主设备的速率。例如,一个从机温湿度传感器的速率比较慢,没采集到温度的时候怎么办呢?总不能发空数据回去给主机吧,这个时候支持时钟延展的设备会“等待”,即从机主动拉低时钟信号,等采样结束后,从机再给主机一个ACK信号告诉主机可以继续通信。


http://www.ppmy.cn/server/35646.html

相关文章

open 函数到底做了什么

使用设备之前我们通常都需要调用 open 函数,这个函数一般用于设备专有数据的初始化,申请相关资源及进行设备的初始化等工作,对于简单的设备而言,open 函数可以不做具体的工作,你在应用层通过系统调用 open 打开设备…

Python深度学习基于Tensorflow(3)Tensorflow 构建模型

文章目录 数据导入和数据可视化数据集制作以及预处理模型结构低阶 API 构建模型中阶 API 构建模型高阶 API 构建模型保存和导入模型 这里以实际项目CIFAR-10为例,分别使用低阶,中阶,高阶 API 搭建模型。 这里以CIFAR-10为数据集,C…

*求问?:为何会超时(TLE)?

D - Grid and Magnet (atcoder.jp) 错误代码&#xff1a; //2024年5月5日14:53:43 #include <bits/stdc.h> #define move mmove //防止与头文件中重复 using namespace std; int h,w; string s[1000]; const int move[4][2]{{1,0},{-1,0},{0,1},{0,-1}}; bool used[100…

【C++】 认识多态 + 多态的构成条件详细讲解

前言 C 目录 1. 多态的概念2 多态的定义及实现2 .1 虚函数&#xff1a;2 .2 虚函数的重写&#xff1a;2 .2.1 虚函数重写的两个例外&#xff1a; 2 .3 多态的两个条件&#xff08;重点&#xff09;2 .4 析构函数为啥写成虚函数 3 新增的两个关键字3.1 final的使用&#xff1a;3…

LSTM实战笔记(部署到C++上)——更新中

前几天由于自己的个人原因停止了学习 接下里继续更新一些自己项目中所用到的神经网络等 ——————————————————————————————————————————— LSTM代码介绍 建立LSTM模型时需要设置一些参数&#xff0c;包括输入数据的形状、LSTM层的…

【Web漏洞指南】XSS漏洞详细指南

【Web漏洞指南】XSS漏洞详细指南 概述XSS的三种类型执行任意 JS 代码的方式在原始HTML中注入绕过手法在 HTML标记内注入绕过手法在JavaScript代码中注入绕过手法其他绕过手法XSS常见有效载荷检索Cookies窃取页面内容键盘记录器查找内部IP地址端口扫描器自动填充密码捕获窃取 Po…

数据结构与算法:二叉树

文章目录 1 概述1.1 树1.2 二叉树 和 树 的区别 2 二叉树2.1 性质2.2 存储结构2.3 遍历2.3.1 先序遍历&#xff1a;DLR2.3.2 中序遍历&#xff1a;LDR2.3.3 后序遍历&#xff1a;LRD 3 扩展3.1 常考题 1 概述 1.1 树 树结构&#xff1a;是一种非常重要的 非线性结构&#xff…

Terraform创建模块

模块就是包含一组Terraform代码的文件夹&#xff0c;可以通过模块直接使用别人编写好的Terraform代码来创建资源。 Terraform模块是编写高质量Terraform代码&#xff0c;提升代码复用性的重要手段&#xff0c;可以说&#xff0c;一个成熟的生产环境应该是由数个可信成熟的模块组…