简单介绍IIC通信协议

文章目录

  • 一,简单介绍
  • 二,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.mfbz.cn/a/595849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ComfyUI 基础教程(十四):ComfyUI中4种实现局部重绘方法

在ComfyUI中有多种方式可以实现局部重绘,简单的方式是使用VAE内补编码器进行局部重绘,也可以用Fooocus inpaint进行局部重绘,还可以用controlNet的inpaint模型进行局部重绘,以及使用Clip seg蒙版插件! 本篇介绍使用VAE內补编码器进行局部重绘的方法。 1、VAE内补编码器 局…

OpenHarmony实战开发-请求自绘制内容绘制帧率

对于基于XComponent进行Native开发的业务,可以请求独立的绘制帧率进行内容开发,如游戏、自绘制UI框架对接等场景。 接口说明 开发步骤 说明: 本范例是通过Drawing在Native侧实现图形的绘制,并将其呈现在NativeWindow上 1.定义Ark…

docker的commit命令使用制作镜像

docker run -it ubuntu 最基础的ubuntu启动后安装vim 的命令 apt-get update apt-get -y install vim docker commit -m"my_test_ubuntu" -a"za" 80977284a998 atljw/myubuntu:1.0 将本地镜像推送到阿里云 首先登录阿里云服务-控制台 记得一定要设定设…

免费领取!最新2024中国行政区划数据(Shp)!审图号:GS(2024)0650号

最新2024中国行政区划数据(Shp) 最近,在天地图官网对外公布了带审图号的行政区划矢量,包含省、市、县。官网提供GeoJSON格式下载。 数据介绍 分为省、市、县三级尺度。通过格式转换,形成shape格式的边界线数据和面数…

springboot版本升级,及解决springsecurity漏洞问题

背景: 项目中要解决 Spring Security RegexRequestMatcher 认证绕过漏洞(CVE-2022-22978) 漏洞问题,并且需要将项目的版本整体升级到boot版本2.1.7,升级改造过程非常的痛苦,一方面对整个框架的代码不是很熟…

关于视频号小店,常见问题解答,开店做店各方面详解

大家好,我是电商笨笨熊 视频号小店作为今年风口,一个新推出的项目,凭借着自身流量加用户群体的优势吸引了不少的电商玩家。 但对于很多玩家来说,视频号小店完全是一个新的项目、新的领域,因此也会存在很多的疑问&…

后缀字串排序

直接sort: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;int main() {string str;cin >> str;int len str.size();vector<string> strings;for(int i 0; i < len; i){strin…

云原生专栏丨基于K8s集群网络策略的应用访问控制技术

在当今云计算时代&#xff0c;Kubernetes已经成为容器编排的事实标准&#xff0c;它为容器化应用提供了强大的自动化部署、扩展和管理能力。在Kubernetes集群中&#xff0c;网络策略(Network Policy)作为对Pod间通信进行控制的关键功能&#xff0c;对保障应用安全和隔离性起到了…

[报错解决]SpringBoot子项目打jar包启动报 XXX--1.0-SNAPSHOT.jar中没有主清单属性

目录 报错信息解决原因原因分析解决方案 报错信息 解决 原因 在使用SpringBoot架构搭建父子工程时&#xff0c;使用IDEA可以正常启动&#xff0c;对子项目打成jar包后使用jar方式启动时&#xff0c;会报错xx.jar中没有主清单属性。 原因分析 原因主要是在使用jar方式启动时…

使用nvm切换nodejs版本

查看可以安装的版本&#xff1a; 使用nvm list显示已安装的nodejs版本&#xff1a; 选择一个版本下载&#xff1a; 切换对应的版本&#xff1a;

3D+仿真分析:高效实现海底石油管道系统设计

Bentley AutoPIPE 助力节省寻找更佳管道路线所需的时间和成本 评估管道完整性以提高石油产量 从墨西哥湾浅水区开采石油通常需要铺设新的海底管道&#xff0c;从而在高压和高温条件下高效、安全地输送原油。 Grupo EspecializadoenObras Marinas (GEOMSA) 是墨西哥湾管道—土体…

MaxKB宝塔Docker安装并配置域名访问

准备 Linux系统 bt面板 默认环境LNMP随便装 服务器环境配置最好是4G&#xff0c; 占用硬盘存储大概1G 对于一些海外AI产品的对接需要使用香港或者海外的服务器 安装 在宝塔面板中打开SSH或者你本地使用SSH工具去链接服务器 运行docker命令 前提是放开服务器的8080端口 doc…

顶管机种类多样 国内产量不断增长

顶管机种类多样 国内产量不断增长 顶管机是一种用于非开挖管道铺设的机械设备&#xff0c;能够通过非开挖施工技术降低对地面活动的影响&#xff0c;具有工作效率高、安全性好、受地质条件限制小、环保性强等优点&#xff0c;在隧道修建、城市管网建设、地下管线敷设等场景中发…

html5动漫风二次元网站博客引导页模板

html5动漫风二次元网站博客引导页模板 效果图部分源码领取源码下期更新预报 效果图 部分源码 <!DOCTYPE html> <!--孤独 --> <html xmlns"http://www.w3.org/1999/xhtml" lang"en"><head><meta charset"utf-8" /&g…

v-for中的key是什么作用

在使用v-for进行列表渲染时&#xff0c;我们通常会给元素或者组件绑定一个key属性。 这个key属性有什么作用呢?我们先来看一下官方的解释&#xff1a; key属性主要用在Vue的虚拟DOM算法&#xff0c;在新Inodes对比时辨识VNodes&#xff1b; 如果不使用key&#xff0c;Vue会使用…

快速了解Oracle 数据库 23ai

Oracle Database 23ai 于2024年5月2日正式发布。快速了解可以看官网主页和官方博客。 官网主页 23ai的3个要点&#xff0c;核心都是数据&#xff1a; 数据的人工智能 主要指数据库内置机器学习和AI向量搜索。这实际是Oracle融合数据库策略的延续&#xff0c;避免了复杂的数据…

Python+Selenium 实现自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 安装selenium 打开命令控制符输入&#xff1a;pip install -U …

软件测试必问的33个面试题

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好。 2.根据你以前的工作经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所…

鸿蒙组件样式复用简介

鸿蒙组件样式复用简介 使用Style进行复用在Component内部复用在Component外部复用使用Extend复用指定类型组件Extend支持参数传递 使用Style进行复用 在页面开发过程中&#xff0c;会遇到多个组件都在使用相同的样式&#xff0c;这时候就要考虑是不是可以将相同的样式的进行复…

【Linux】操作系统

上一篇博客我们从硬件的角度谈了计算机&#xff0c;我们说到了计算机的效率跟操作系统写的好不好有着直接的关系&#xff0c;那么这篇博客我们从软件的角度&#xff0c;就来谈一谈究竟什么是操作系统&#xff0c;为什么要有操作系统&#xff1f; 首先我们来大体的认识一下操作…