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

I2C基础

I2C基础

  • 1 基本介绍
  • 2 特点
  • 3 硬件连接
  • 4 通信
    • 4.1 控制器
    • 4.2 协议
  • 5 SPI VS I2C

1 基本介绍

I²C (Inter-Integrated Circuit)。内部集成电路。拥有两根线,一根数据线SDA和一根时钟线SCL。
这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个接到I2C总线上的器件都有唯一的地址。其中,主动发起操作的一方为主机,另外一方为从机。I2C规定通信时的时钟,起始信号,停止信号只能由主机产生。
示意图如下
在这里插入图片描述
连接到相同总线上的IC数量只受总线最大电容400pF的限制,最多可挂112个设备,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。I2C是半双工模式。

2 特点

  • 只使用两条信号线,传输距离短
  • 支持多主机多从机
  • 有应答机制
  • 极低的电流消耗.抗高噪声干扰。
  • 速率比SPI慢。
  • IIC 是多主设备的总线

3 硬件连接

EEPROM一般与I2C连接,下面是常用的一种连接方式。
在这里插入图片描述
SCL、SDA的上拉电阻由这两个引脚的灌电流决定,保证其高低电平都满足要求。
犹豫I2C通信速率比较慢,所以在与CPU连接时,可用GPIO模拟,比较灵活。

4 通信

4.1 控制器

STM32的I2C控制器框图如下:
在这里插入图片描述

4.2 协议

I2C协议包括以下状态:

  • 空闲状态:SDA\SCL均为高电平,总线空闲
  • 开始信号:SCL为高电平,SDA的电平由高跳到低表示开始信号。
  • 终止信号:SCL为高电平,SDA的电平由低跳到高表示终止信号。
  • 应答信号:接收器反馈应答信号,应答信号为低电平,则为有效应答位,表示成功接收。
  • 数据有效性
  • 数据传输

IIC协议规定:

  • 每一支IIC设备都有一个唯一的七位设备地址;
  • 数据帧大小为8位的字节;
  • 数据(帧)中的某些数据位用于控制通信的开始、停止、方向(读写)和应答机制。
  • IIC协议标准规定发起通信的设备称为主设备,主设备发起一次通信后,其它设备均为从设备。
  • 总线上有1个主设备和多个从设备,当一个从设备响应后,其他从设备不能进行通信。
    在这里插入图片描述
    当没有数据传输的时候,两根总线都为高电平;数据传输开始时,需要发送一个起始信号;数据传输结束后,需要发送一个终止信号;每8bit数据传输结束,都需要一个ACK。起止信号都由Master发出,而ACK则可能由Master或者SLAVE来发出。

在这里插入图片描述
在这里插入图片描述
ACK和NACK
数据传输时先传MSB(most significant bit)最高有效位。接收者在每个字节后的第9个时钟周期将SDA保持低电平进行确认数据接收成功;而在第9个时钟周期将SDA保持高电平表示数据传输出错,或者主机不再想接收数据。

主机给从机写数据的过程如下:
在这里插入图片描述
主机从从机读数据过程如下:
在这里插入图片描述

5 SPI VS I2C

  • SPI使用线多,硬件资源占的多
  • SPI全双工,所以传的快,通常能达到甚至超过10 Mbps,而I2C最快3.4 Mbps。
  • SPI适合数据流应用,而IIC更适合“字节设备”的多设备应用。

相关文章:

  • 社区老年人服务系统设计与实现(安卓APP+SSH后台+MYSQL)
  • 《Unity Magica Cloth从入门到详解》之(4)MeshCloth网布
  • uniapp小程序长按识别关注公众号
  • 计算机毕业设计springboot+vue基本微信小程序的乐旋乒乓球课程管理系统 uniapp 小程序
  • dir_day11
  • 漫画 | 打死我也不学编译了!
  • 14天机器学习DAY1-5|线性回归原理小结
  • 飞机电子式模拟空速表的设计与制作
  • 机器学习笔记 - YOLOv7 论文简述与推理
  • webpack5学习笔记
  • CTFHub | 默认口令
  • Mysql中的锁分类:
  • 【JavaWeb】之JSP
  • 目标检测算法——YOLOv5结合ConvNeXt结构
  • 机器学习——多元梯度下降法
  • angular2 简述
  • express如何解决request entity too large问题
  • Java反射-动态类加载和重新加载
  • linux学习笔记
  • python大佬养成计划----difflib模块
  • quasar-framework cnodejs社区
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Theano - 导数
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue:响应原理
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 深度解析利用ES6进行Promise封装总结
  • 2017年360最后一道编程题
  • Android开发者必备:推荐一款助力开发的开源APP
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (12)目标检测_SSD基于pytorch搭建代码
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)hibernate缓存
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .axf 转化 .bin文件 的方法
  • .Net IOC框架入门之一 Unity
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 使用ajax控件后如何调用前端脚本
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net7 环境安装配置
  • .NET命令行(CLI)常用命令
  • /etc/shadow字段详解
  • [012-1].第12节:Mysql的配置文件的使用
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [android] 切换界面的通用处理
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [DM复习]关联规则挖掘(下)