常用通信协议——IIC详解(全网最全)

2023-05-16

一、IIC 简介

I2C(Inter-Integrated Circuit) 是内部整合电路的称呼, 是一种串行通讯总线, 使用多主从架构, 由飞利浦公司在1980年为了让主板、 嵌入式系统或手机用以连接低速周边装置而发展。 I2C的正确读法为"I-squared-C" , 而"I-two-C"则是另一种错误但被广泛使用的读法, 在中国则多以"I方C"称之。 I2C 总线支持任何IC 生产过程(NMOS CMOS、 双极性) 。 两线――串行数据(SDA) 和串行时钟 (SCL) 线在连接到总线的器件间传递信息。 每个器件都有一个唯一的地址识别(无论是微控制器——MCU、 LCD 驱动器、 存储器或键盘接口) , 而且都可以作为一个发送器或接收器(由器件的功能决定) 。
CPU 与被控 IC 之间IC 与 IC 之间进行双向传送, 高速 IIC 总线一般可达 400kbps 以上。
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号结束信号应答
信号

1、开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
2、结束信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
3、应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,
表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接
收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为
受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号, 都可以不要。

IIC 总线时序图
在这里插入图片描述

二、IIC的特征

1、 只要求两条总线线路: 一条串行数据线SDA(因此是半双工的), 一条串行时钟线SCL
2、 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址, 主机可以作为主机发送器或主机接收器;
3、 它是多主机总线, 如果两个或更多主机同时初始化, 数据传输可以通过冲突检测和仲裁防止数据被破坏;
4、 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s, 快速模式下可达400kbit/s, 高速模式下可达3.4Mbit/s;
5、 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制

三、IIC的从地址

IIC从地址有3种类型:分别是7位,8位和10位。产生这么多类型的原因是厂商采用的不同的地址约定。

7位寻址

在7位寻址过程中,从机地址在启动信号后的第一个字节开始传输,该字节的前7位为从机地址,第8位为读写位,其中0表示写,1表示读。
1551840608183172.png
图1:7位寻址。I2C总线规范规定,标准模式I2C,从机地址为7位长,其次是读/写位。

第一个字节的头7 位组成了从机地址, 最低位(LSB) 是第8 位, 它决定了传输的方向。
第一个字节的第8位是“0” , 表示主机会写信息到被选中的从机;

“1” 表示主机会向从机读信息, 当发送了一个地址后, 系统中的每个器件都在起始条件后将
头7 位与它自己的地址比较, 如果一样, 器件会判定它被主机寻址, 至于是从机接收器还是从机发送器, 都由R/W 位决定。

任何I2C设备都必须遵循这个标准,USB2XXX传输的从机地址即为这7bit地址,不包含读写位,读写位会根据不同的函数自动添加进去。

8位地址

一些厂商在提供从机地址的时候说的是包含了读写位的8bit地址,比如他说写地址为0x92,读地址为0x93,如下图所示
图片关键词
图2: 8位寻址

如果是8位寻址的情况,需要将这个地址的前7bit提取出来,然后传入USB2XXX的接口函数即可,比如为0x49。

判断厂商提供的地址是7bit模式地址还是8bit地址模式的地址的方式:7bit地址模式下,地址的取值范围在0x07到0x78之间,若超过了这个范围,那么这个地址可能就是8bit地址。
图片关键词
图3:有效的7bit地址范围

10位寻址

I2C总线的10bit寻址和7bit寻址是兼容的,这样就可以在同一个总线上同时使用7bit地址和10bit地址模式的设备,在进行10bit地址传输时,第一字节是一个特殊的保留地址来指示当前传输的是10bit地址。
图片关键词
图4:10bit地址寻址

在使用USB2XXX传输10bit地址模式的时候,只需要在初始化的时候配置为10bit地址模式(由第一个字节设置),然后再调用读写数据函数的时候传入正确的10bit地址即可。

四、保留地址

I2C规范保留了两组和8个地址,1111XXX和0000XXX。这些地址用于特殊用途。下表已被取自 I2C规范(2000年)。

从机地址+R/W描述
0000 0000呼叫地址
0000 0001起始字节
0000 001XCBUS地址
0000 010X保留供不同的总线格式
0000 011X保留将来用
0000 1XXXHS模式主机码
1111 0XXX10位从机地址
1111 1XXX保留将来用

五、IIC的连接

1、IIC可以接多个主设备,多个从设备(外围 设备)。如下图,存在多个主机、多个从机。
在这里插入图片描述
2、当多主机会产生总线裁决问题。当多个主机同时想占用总线时,企图启动总线传输数据,就叫做总线竞争。I2C通过总线仲裁,以决定哪台主机控制总线
3、上拉电阻一般在4.7k~10k之间,默认拉高。

六、IIC总线最多可以挂多少个设备

由IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址, 所以理论上可以挂127个从器件

但是IIC协议没有规定总线上device最大数目,但是规定了总线电容不能超过400pF
管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。实际设计中经验值大概是不超过8个器件。

规定电容大小的原因:
IIC的OD(漏极开路)要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。

传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以RC乘积必须更小。

原文链接:https://blog.csdn.net/qq_38769551/article/details/105108062

注:
广播地址:广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用[TCP/IP 协议](https://baike.baidu.com/item/TCP%2FIP 协议/2116790)的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.0.0.0 )网段,其直播广播地址为10.255.255.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.255.255.255 的分组(封包)时,它将被分发给该网段上的所有计算机。

七、IIC实现的方式

IIC实现的方式主要有两种,硬件IIC和软件模拟IIC

软件IIC是程序员使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序。一般较硬件IIC稳定,但是程序较为繁琐,但不难。

硬件IIC程序员只要调用IIC的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出。但是有些单片机的硬件IIC不太稳定,调试问题较多。

硬件IIC、软件模拟IIC的区别

模拟IIC硬件IIC
用法流程更清楚一些用法比较复杂
速度速度快、效率高、可以使用DMA
适用管脚任何管脚固定管脚
稳定性稳定不太稳定

下一章、实现硬件IIC和软件模拟IIC,实验中…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用通信协议——IIC详解(全网最全) 的相关文章

随机推荐

  • 第二章 STM32核心板介绍

    目录 一 学习目标 二 STM32芯片介绍 三 核心电路板 xff08 原理图 xff09 四 通讯 下载模块接口电路 五 电源转换电路 六 JTAG SWD调试接口电路 七 独立按键电路 八 OLED显示屏接口电路 九 晶振电路 十 LE
  • 第五/六章 立创EDA软件介绍/STM32核心板原理图设计

    目录 一 立创EDA软件介绍 二 学习目标 三 原理图设计流程 四 STM32核心板原理图 五 完成原理图的设计 六 常见问题及解决办法 一 立创EDA软件介绍 百度百科 xff1a PCB printed circuit board 即印
  • MediaCodec 编码解码踩坑记录

    概述 在MediaCodec的生命周期内存在三种状态 xff1a Stopped Executing or Released xff0c 其中 Stopped状态包含三种子状态 xff1a Uninitialized Configured
  • 第七章 STM32核心板PCB设计(布局布线+注意的疑难问题)

    目录 一 本章简介 二 学习目标 三 PCB设计流程 四 PCB规则设置 五 布局规则 六 布线注意事项 第一步 xff1a 创建 第二步 xff1a 布局 第三步 xff1a 布线 第四步 xff1a DRC检查 回答几个问题 xff1a
  • YoungTalk-STM32入门100步-总篇

    这个系列的笔记是为了学习单片机STM32而做的 xff01 来记录自己的学习路程 xff0c 解答一些自己的疑惑 xff01 xff08 本系列的所有内容都是以杜洋老师的视频为主线的 xff0c 再加上自己做的一些笔记 xff0c 网上找的
  • Python多线程编程(详细:适合小白入门)

    目录 前言 一 进程 1 多任务 2 进程 3 多进程完成多任务 3 1进程的创建步骤 3 2通过进程类创建进程对象 3 3创建进程和启动的代码 4 进程执行带有参数的任务 5 获取进程编号 6 进程的注意点 6 1主进程会等待所有的子进程
  • 关于深度学习中三维矩阵的理解(RGB图像的输入)

    usr bin env python coding utf 8 34 34 34 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • (目标检测)①数据集的建立(拍摄收集、数据集标注)

    目录 一 拍摄收集 xff08 一 xff09 视频拍摄 xff08 二 xff09 将MP4文件截取出图片 二 数据集标注 1 打开图片所在的文件夹 2 修改输出文件夹 3 图片标注 这一系列的博客将会帮助我自己 xff08 和大家 xf
  • myCobot pro 机械臂(4)正向运动学——改进DH表示法(开发环境:python)

    我只能说 xff0c 写这篇博客太艰难了 一定要沉住耐心 这个型号的机械臂与官方给的手册里面的参数是有出入的 感谢 台大机器人学课程 机器人学之运动学笔记 3 机械臂DH表示法 43 正向运动学 xff08 Forward Kinemati
  • myCobot pro 机械臂(5)Robotics Toolbox for MATLA(开发环境:matlab)

    感谢 机器人工程师进阶之路 xff1a matlab robotics toolbox安装方法 目录 一 matlab robotics toolbox安装方法 二 改进DH法对myCobot进行仿真 一 matlab robotics t
  • myCobot pro 机械臂(6)逆向运动学

    机械臂逆运动学求解常用的方法有几何法 解析法 数值法 从求解的方式和计算的效率上来看 xff0c 几何法和解析法会考虑机械臂结构不同而造成的差异 xff0c 因此对于不同结构的机械臂会有特定的求解方式 通常来说 xff0c 这两种方法具有速
  • STM32开发基础知识入门

    C语言基础 位操作 对基本类型变量可以在位级别进行操作 1 不改变其他位的值的状况下 xff0c 对某几个位进行设值 先对需要设置的位用 amp 操作符进行清零操作 xff0c 然后用 操作符设值 2 移位操作提高代码的可读性 3 取反操作
  • 蜂鸣器实验

    蜂鸣器介绍 这里采用的是有源蜂鸣器 xff0c 有源蜂鸣器自带了振荡电路 xff0c 一通电就会发声 xff1b 无源蜂鸣器则没有自带震荡电路 xff0c 必须外部提供 2 5Khz 左右的方波驱动 xff0c 才能发声 STM32的单个
  • CodeBlocks 20.03版的若干已知问题及其解决方法

    CodeBlocks 20 03在Win10上运行时会出现一些问题 xff0c 我通过搜索网络找到了解决办法 xff0c 下面分享给大家 一 改变编辑器的字体后引发 wxWidgets debug alert A debugging che
  • sumo的简单使用

    sumo简单教程 安装配置环境变量文件配置运行python文件生成真实路网python调用 如果你也对交通仿真感兴趣 xff0c 且是一个小白 xff0c 但是有python基础 xff0c 我想我可以帮到你 安装 首先安装为我们入门的第一
  • Kube-Prometheus Stack监控mysql

    准备环境 mysql 环境可以搭建2个或者一个来进行监控 我这个是搭建了2个一个使用容器启动 xff0c 一个二进制安装如图所示 配置mysql exporter进行采集数据 apiVersion apps v1 span class to
  • Promise

    一 定义 xff1a 所谓Promise xff0c 简单说就是一个容器 xff0c 里面保存着某个未来才会结束的事件 xff08 通常是一个异步操作 xff09 的结果 从语法上说 xff0c Promise 是一个对象 xff0c 从它
  • 全国大学生智能汽车竞赛硬件篇(二)—电磁信号采集部分

    对于智能车硬件的整体框架主要由5部分组成 xff1a 电磁信号采集与处理部分 电机驱动部分 电源管理部分 主控部分 其他部分 xff08 停车模块等 xff09 1 电磁信号采集部分 这一部分对于电磁组别至关重要 xff0c 对与摄像头组别
  • 嵌入式笔试(1)—海康威视试题

    单选 xff08 15题 xff09 第一题 栈简介 栈由操作系统 xff08 编译器 xff09 自动分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 其操作方式类似于数据结构中的栈 堆简介 堆由开发人员分配和释放 xf
  • 常用通信协议——IIC详解(全网最全)

    一 IIC 简介 I2C xff08 Inter Integrated Circuit xff09 是内部整合电路的称呼 xff0c 是一种串行通讯总线 xff0c 使用多主从架构 xff0c 由飞利浦公司在1980年为了让主板 嵌入式系统