当前位置: 首页 > news >正文

I2C协议详解

文章目录

  • 概念
    • 工作模式
  • 原理
    • 工作原理
    • 工作流程
    • IIC协议的关键特点
    • IIC通信过程
  • 优点与缺点
    • 优点
    • 缺点

概念

IIC(Inter-Integrated Circuit)协议,也常被称为TWI(Two-Wire Interface)协议,是一种用于短距离通信的串行总线,主要设计用于连接微控制器和其外围设备。IIC协议使用两根线:串行数据线(SDA)和串行时钟线(SCL)。这种通信方式允许多个设备共享同一总线,并且可以以主设备或从设备模式进行通信。

工作模式

主设备模式: 设备可以发送数据到其它设备,或者从其它设备接收数据。
从设备模式: 设备只能被主设备读取或写入数据。这种工作方式的优点在于,它可以简化系统设计,减少设备间的连接线,提高系统的可靠性。
I2C的另一种工作模式是多主设备模式。在这种模式下,总线上可以有多个主设备。这种模式可以提供更灵活的设备控制方式,但其实现相对复杂。如果两个主设备同时尝试控制总线,会发生冲突,必须通过仲裁机制解决。

在I2C总线上,每个设备都有一个唯一的地址,主设备通过这个地址来识别和访问从设备。这个地址通常是7位或10位,可以通过编程来设置。I2C总线使用两线进行通信,一线用于数据(SDA),另一线用于时钟(SCL)。

原理

I2C(Inter-Integrated Circuit)是一种串行通信协议,因其简单易用而广泛应用于微控制器和各种外围设备之间的通信。I2C通信只需两条线路:数据线SDA和时钟线SCL。其中,SDA用于在设备之间传输数据,而SCL则提供时钟信号,控制数据传输的速度。

工作原理

I2C的工作原理很简单。在I2C通信中,主设备控制时钟线SCL,而数据线SDA用于在主设备和从设备之间双向传输数据。主设备通过SDA发送数据给从设备,同时使用SCL产生时钟信号,从设备根据时钟信号读取SDA上的数据。反过来,从设备也可以在主设备的控制下,通过SDA发送数据给主设备。

工作流程

在这里插入图片描述
在这里插入图片描述
以下是I2C通信的一般工作流程:

  • 主设备产生开始信号: 主设备通过将SDA从高电平拉低到低电平,同时保持SCL处于高电平,来产生开始信号。这个信号会被所有从设备检测到,从而知道I2C通信即将开始。
  • 主设备发送地址: 主设备发送一个7位的地址(有些设备可能是10位地址),这个地址用于指示要通信的从设备。地址后面还跟着一个位,用于指示主设备是要读取从设备的数据,还是要向从设备写入数据。
  • 从设备响应: 如果从设备检测到自己的地址,它就会在SDA上产生一个低电平的应答信号,以告诉主设备它已经准备好了。
  • 数据传输: 主设备和从设备开始互相传输数据。每传输完8位数据,接收方就需要产生一个应答信号。
  • 主设备产生停止信号: 数据传输完成后,主设备会产生一个停止信号,以结束I2C通信。停止信号是通过将SDA从低电平拉高到高电平,同时保持SCL处于高电平来产生的。

IIC协议的关键特点

  • 两线制通信: 如上所述,IIC协议使用SDA和SCL两根线进行通信。
  • 多主多从: 总线上可以有多个主设备和多个从设备。主设备负责生成时钟信号并开始通信,从设备响应主设备的请求。
  • 地址寻址: 每个从设备都有一个唯一的地址。当主设备想要与特定的从设备通信时,它会发送这个地址。
  • 数据传输速率: IIC协议定义了不同的速度标准,包括标准模式(最高100 kbps)、快速模式(最高400 kbps)、快速模式加(最高1
    Mbps)和高速模式(最高3.4 Mbps)。
  • 应答机制: 在数据传输过程中,接收方需要发送一个应答(ACK)信号来确认数据已成功接收。如果接收方没有发送ACK,发送方将停止传输。
  • 仲裁和冲突检测: 如果两个主设备尝试同时控制总线,IIC协议通过仲裁机制来决定哪个设备继续控制总线。此外,协议还包含冲突检测机制,以确保数据的完整性。
  • 支持不同类型的传输: IIC协议支持不同类型的数据传输,如字节传输、字传输和块传输。
  • 可扩展性: 理论上,IIC总线可以连接很多设备,但实际上受到总线电容和信号衰减的限制。

IIC通信过程

  • 启动条件: 主设备通过设置SDA为高电平,然后在SCL为高电平时将其拉低来产生启动条件。
  • 地址和读/写位: 主设备发送7位从设备地址,后面跟随一个读/写位(0表示写操作,1表示读操作)。
  • 应答位: 从设备通过拉低SDA来发送ACK(如果准备好接收或发送数据)或NACK(如果无法响应请求)。
  • 数据传输: 数据以8位字节传输,每个字节后面跟随一个ACK或NACK位。
  • 停止条件: 主设备通过在SCL为高电平时将SDA从低电平拉高来产生停止条件,表示通信结束。
  • 时钟同步: SCL线上的时钟信号用于同步数据传输,确保数据在SDA线上稳定后发生变化

优点与缺点

优点

  • 硬件资源节约: IIC协议只需要两条线(SDA数据线和SCL时钟线)来完成通信,大大减少了所需引脚数量,从而节省了硬件资源。
  • 支持多主多从设备: IIC协议允许多个主设备和多个从设备在同一总线上通信,增强了系统的灵活性和可扩展性。
  • 简单的时序控制: IIC协议的时序逻辑相对简单,易于软件实现和硬件设计,降低了开发难度。
  • 易于实现和调试: 由于其协议规范明确,通信过程直观,因此在实际应用中容易实现和故障排查。
  • 广泛应用: IIC协议因其上述优势,被广泛应用于各种微控制器、传感器、显示器等设备之间的通信。

缺点

  • 传输速率有限: 标准模式下IIC的最大传输速率为100kbps,高速模式下可达400kbps,但对于某些高速数据传输应用而言,这样的速率可能不够。
  • 总线长度和负载限制: IIC总线上的设备数量和总线的物理长度受限,过长的总线或过多的挂载设备会导致信号衰减和干扰问题,影响通信稳定性。
  • 缺乏错误检测和纠正机制: 虽然有ACK/NACK机制来确认数据传输,但在噪声环境下,IIC协议缺乏有效的错误检测和纠正机制,可能影响数据的完整性。
  • 半双工通信: IIC协议是半双工的,意味着数据线在某一时刻只能进行发送或接收,不能同时进行,这限制了数据交换的效率。
  • 不支持多点广播: IIC协议不支持多点或多播通信,每一个数据包都必须明确指定一个单独的从设备地址,这在需要广播消息到多个设备的场景下不太适用。

相关文章:

  • 日志输出-第四章-接口级(单体应用)前后端数据加解密 Filter 实现
  • 设计模式 17 组合模式 Composite Pattern
  • 网页设计步骤总结
  • C++ Qt:QString与数字之间的相互转换
  • es和mongdb对比
  • Ai速递5.29
  • 0.25W 1.5KVDC~3KVDC 隔离超小型单输出 DC/DC 电源模块——TKE-W25系列
  • 重磅发布,2024精选《制造业商业智能BI最佳实践合集 》
  • 电量计量芯片HLW8110的前端电路设计与误差分析校正.pdf 下载
  • 一个程序员的牢狱生涯(44)询问
  • MOS管开关电路简单笔记
  • MySQL建库
  • stable Diffusion缺失模型补充地址
  • Android 版本与 API level 以及 NDK 版本对应
  • 原神抽卡点名程序教程(直接下载用)
  • [译] React v16.8: 含有Hooks的版本
  • export和import的用法总结
  • Golang-长连接-状态推送
  • Linux Process Manage
  • Mocha测试初探
  • Nacos系列:Nacos的Java SDK使用
  • Python 基础起步 (十) 什么叫函数?
  • rc-form之最单纯情况
  • 从零开始在ubuntu上搭建node开发环境
  • 大型网站性能监测、分析与优化常见问题QA
  • 番外篇1:在Windows环境下安装JDK
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 记录一下第一次使用npm
  • 每天10道Java面试题,跟我走,offer有!
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序01:wepy框架整合iview webapp UI
  • 写给高年级小学生看的《Bash 指南》
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​【已解决】npm install​卡主不动的情况
  • # .NET Framework中使用命名管道进行进程间通信
  • #define,static,const,三种常量的区别
  • #if和#ifdef区别
  • #Z2294. 打印树的直径
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (7)摄像机和云台
  • (JS基础)String 类型
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)ssm高校实验室 毕业设计 800008
  • (排序详解之 堆排序)
  • (转)Mysql的优化设置
  • (转)shell调试方法
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Framework .NET Core与 .NET 的区别
  • @Autowired自动装配
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 蓝桥杯Web真题 ]-布局切换
  • [10] CUDA程序性能的提升 与 流