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

各种通信(五):IIC协议(二)

一:起始条件
在 I2C(Inter-Integrated Circuit,集成电路间总线)开发中,“Create start condition” 指的是产生起始条件,这是 I2C 通信协议中启动一次数据传输的关键操作。
I2C 总线通过两根线通信:SDA(数据线)和 SCL(时钟线)。起始条件的定义是:当 SCL(时钟线)处于高电平时,SDA(数据线)从高电平切换到低电平(即 SDA 在 SCL 为高期间发生下降沿)。
起始条件的作用是:通知总线上的所有从设备,一次新的 I2C 通信即将开始,从设备会开始监听后续的地址和数据信息。
在实际编程中,通常需要通过硬件 I2C 控制器的寄存器配置,或软件模拟 SDA/SCL 引脚的电平变化来生成这个起始条件。例如,在软件模拟中,步骤大致为:
先将 SDA 和 SCL 都拉到高电平;
保持 SCL 为高,将 SDA 拉低,产生下降沿,完成起始条件。
起始条件是 I2C 通信的第一个关键信号,之后会跟随从设备地址、读写方向位、数据等信息,通信结束时则会产生停止条件(Stop Condition)。

在 I2C 通信协议中,起始条件(Start Condition)和停止条件(Stop Condition)是控制数据传输开始和结束的关键信号,由主设备主动产生,用于同步总线上的所有从设备。两者的定义和作用如下:
1. 起始条件(Start Condition,S)
定义:当 SCL(时钟线)处于高电平时,SDA(数据线)从高电平跳变为低电平(即 SDA 在 SCL 为高期间产生下降沿)。
作用:标志一次 I2C 通信的开始,通知总线上的所有从设备:“即将开始传输数据,请准备接收地址和后续信息”。

二:停止条件(Stop Condition,P)
定义:当 SCL(时钟线)处于高电平时,SDA(数据线)从低电平跳变为高电平(即 SDA 在 SCL 为高期间产生上升沿)。
作用:标志一次 I2C 通信的结束,通知从设备:“当前传输已完成,总线释放”。

总结
起始条件(S):SCL 高电平时,SDA 从高→低(下降沿),启动通信。
停止条件(P):SCL 高电平时,SDA 从低→高(上升沿),结束通信。

三: I2C 多通道设计的典型应用场景。通过将不同功能的设备群分配到独立的 I2C 通道
隔离干扰例如,传感器(如温湿度、加速度计)通常对噪声敏感,而显示屏(如 OLED、LCD)可能因刷新频率较高产生一定干扰。分开通道后,可避免两类设备的信号干扰影响传感器的测量精度。
适配不同速率不同设备的 I2C 速率可能不同:
某些传感器仅支持 100kHz 标准模式,
而高速显示屏可能支持 400kHz 快速模式。
独立通道可分别配置速率,无需妥协于最低速率设备。
避免地址冲突若两个设备(如两个同型号传感器)默认地址相同,且无法通过硬件引脚修改地址,此时用不同通道连接可彻底避免地址冲突(无需复杂的地址映射逻辑)。
并行操作提升效率部分 MCU 的多 I2C 通道支持 DMA 或中断并行处理,例如:
通道 1 正在读取传感器数据时,
通道 2 可同时向显示屏写入数据,
无需等待前一个操作完成,提升系统响应速度。
举例说明硬件连接:
通道 1(I2C1):SDA1 接温湿度传感器(如 SHT30)的 SDA,SCL1 接其 SCL;
通道 2(I2C2):SDA2 接 OLED 显示屏(如 SSD1306)的 SDA,SCL2 接其 SCL。
这样,传感器和显示屏的通信完全独立,代码中通过操作不同通道的控制器(如 I2C1 和 I2C2 寄存器)即可分别控制,互不干扰。

四:在 I2C 通信协议中,I2C Channel(I2C 通道) 和 I2C Address(I2C 地址) 是两个核心概念,分别从硬件接口和设备标识两个层面解决了多设备通信的问题。以下是详细解释:
1、I2C Channel(I2C 通道)
定义
I2C 通道是硬件层面的独立通信接口,由微控制器(MCU)、处理器(SOC)或专用 I2C 控制器提供。每个通道对应一组独立的 SDA(数据线)和 SCL(时钟线)引脚,以及独立的控制器逻辑(如寄存器、时序发生器、中断 / DMA 模块等)。
核心作用
物理隔离:不同通道的 SDA/SCL 引脚完全独立,可连接互不相关的设备群,避免信号混叠。
并行通信:多个通道可同时工作(如一个通道读取传感器,另一个通道写入显示屏),提升系统效率。
灵活适配:不同通道可独立配置通信速率(100kHz/400kHz/1MHz)、时序参数,适配不同设备的需求。
举例
STM32F103 芯片通常有 2 个 I2C 通道(I2C1、I2C2),分别对应不同的 GPIO 引脚(如 I2C1 用 PB6/PB7,I2C2 用 PB10/PB11)。
若系统中既有低速传感器(需 100kHz),又有高速 EEPROM(需 400kHz),可将它们分别连接到两个通道,各自配置速率。
2、I2C Address(I2C 地址)
定义
I2C 地址是软件层面的设备标识,每个 I2C 从设备(如传感器、存储器)都有一个唯一的地址(7 位或 10 位,最常用 7 位),用于在同一通道中区分不同设备。主设备通过发送地址来指定通信对象。
核心作用
设备区分:同一 I2C 通道的多设备通过地址唯一标识(如通道 1 上连接的温湿度传感器地址为 0x48,加速度计地址为 0x68)。
通信定向:主设备发送数据前,先发送目标设备的地址,只有地址匹配的从设备才会响应,其他设备忽略。
地址特点
默认地址:多数设备有硬件固定的默认地址(如 SSD1306 显示屏默认地址 0x3C 或 0x3D,由引脚电平决定)。
可配置地址:部分设备支持通过硬件引脚(拉高 / 拉低)或软件寄存器修改地址,避免同一通道内的地址冲突。
读写位:7 位地址的第 8 位是读写方向位(0 表示写,1 表示读),因此实际发送的地址帧是 “7 位地址 + 1 位方向”(共 8 位)。
举例
通道 1 上连接了两个设备:A(地址 0x40)和 B(地址 0x41)。
主设备要与 A 通信时,先发送 0x80(0x40 << 1 | 0,写操作),A 会响应,B 忽略;
主设备要读取 B 的数据时,发送 0x83(0x41 << 1 | 1,读操作),B 响应,A 忽略。

3、I2C Channel 与 I2C Address 的关系
两者是层级互补的关系,共同解决多设备通信问题:
先选通道,再选地址:主设备需先确定使用哪个通道(物理接口),再通过地址在该通道内选择具体设备。例:I2C1 通道 -> 地址 0x48 的设备。
解决冲突的不同维度:
若两个设备地址相同且无法修改,可通过不同通道连接(物理隔离);
若地址不同,可共用同一通道(通过地址区分)。
资源分配逻辑:
通道是 “物理总线”,数量由硬件决定(如 MCU 通常有 2-5 个通道);
地址是 “逻辑标识”,同一通道最多支持 127 个设备(7 位地址,排除广播地址)。
4.实际应用场景
场景 1:简单系统(如单个传感器)用 1 个通道,通过地址直接通信。
场景 2:多设备但地址不同多个设备(如传感器 A、B、C,地址均不同)共用 1 个通道,主设备通过地址分别访问。
场景 3:地址冲突或速率差异
两个同型号传感器(默认地址相同):分别接通道 1 和通道 2;
低速传感器(100kHz)和高速显示屏(400kHz):分通道连接,各自配置速率。
总结
I2C 通道:硬件层面的独立通信接口,负责物理连接和并行通信,解决 “不同设备群的隔离与速率适配”。
I2C 地址:软件层面的设备标识,负责同一通道内的设备区分,解决 “同一总线内的通信定向”。
两者结合,使 I2C 总线既能支持多设备共享,又能灵活应对复杂系统的通信需求。

五.在 I2C 通信协议中,ACK(Acknowledge,确认) 和 NACK(Not Acknowledge,非确认) 是主设备与从设备之间用于校验数据传输是否成功的应答信号,由接收方(根据通信方向,可能是从设备或主设备)产生。
1. ACK(确认信号)
定义:当接收方(从设备或主设备)成功接收到一个字节的数据后,在规定的时钟周期内将 SDA 线拉低,表示 “数据已正确接收”。
产生时机:
主设备向从设备发送数据(如地址、指令、数据字节)时,从设备在每个字节的第 8 位数据传输完成后,会产生 ACK 信号(拉低 SDA),告知主设备 “已收到该字节”。
主设备从从设备读取数据时,主设备在每个字节接收完成后,可产生 ACK 信号,告知从设备 “继续发送下一个字节”。
作用:确认数据传输有效,允许通信继续进行。
2. NACK(非确认信号)
定义:当接收方未成功接收数据,或不需要继续接收数据时,在规定的时钟周期内让 SDA 线保持高电平(通常由上拉电阻维持),表示 “数据未接收或无需继续传输”。
产生时机:
从设备未正确接收主设备发送的地址或数据(如地址不匹配、数据错误)时,从设备会产生 NACK 信号,主设备通常会终止当前通信或重试。
主设备从从设备读取数据时,若已接收完所有需要的数据,主设备会产生 NACK 信号,告知从设备 “停止发送”,随后主设备会产生停止条件(Stop Condition)结束通信。
作用:标识传输异常或终止通信,避免无效数据继续传输。
3. 时序规则
ACK/NACK 信号的产生严格遵循 I2C 时序:
每个字节(8 位)传输完成后,会有一个额外的时钟周期(第 9 个时钟)用于传输 ACK/NACK 信号。
此时,发送方释放 SDA 线(让其由上拉电阻拉至高电平),接收方通过拉低 SDA(ACK)或保持高电平(NACK)来应答。
时钟信号(SCL)由主设备控制,第 9 个时钟的高电平期间,SDA 的状态(低 = ACK,高 = NACK)被确认。
总结
ACK:接收方告知发送方 “数据已正确接收,可继续”(SDA 低电平)。
NACK:接收方告知发送方 “数据未接收或无需继续”(SDA 高电平)。
这两个信号是 I2C 协议中保证数据传输可靠性的关键机制,确保主从设备之间的通信同步和错误检测。

http://www.dtcms.com/a/533878.html

相关文章:

  • 做gif网站用模板怎么做网站
  • 【Java面试笔记:多线程】44、深入Java线程池:BlockingQueue实现全景解析与实战指南
  • 网站建设怎么找到客户做传销网站违法的吗
  • 船山网站建设排版漂亮的网站
  • 网站域名有什么用中国优化网
  • 【Research】MagicFuzzer: Scalable deadlock detection for large-scale applications
  • 【SpringBoot从初学者到专家的成长23】使用SpringBoot构建高效的Web应用-拥抱你的第一个SpringBoot项目
  • 郑州网络推广代理顾问seo公司 引擎
  • 网站首页图怎么做郑州中航软件开发有限公司
  • 做网站如何添加表单高端网约车收入怎么样
  • 具身智能π0.5(pi0.5)模型介绍
  • 阿里巴巴网站怎么做才能排第一第三次网站建设的通报
  • 智能网站建设维护ui界面设计案例分析
  • 数据结构与算法:倍增算法和ST表
  • 龙港做网页网站制作aws ec2安装wordpress
  • 做标书网站微慕WordPress开发
  • 郑州网站公司排名做网站难吗?
  • 织梦cms建设企业网站哪个cms方便快速建站
  • 下载软件的网站推荐wordpress邮件验证评论
  • 小江高端网站建设深圳网站制作公司人才招聘
  • 如何修改一个网站的后台登陆系统论坛网站建设开源工具
  • Onenet_ESP32移植手册
  • 平面设计素材网站大全成都app拉新工作室加盟
  • 卡盟网站制作教程苏州专业网站建设的公司
  • 做网站找哪家公司好网站排名易下拉刷词
  • conda 命令使用进阶指南 minconda
  • 南充市住房建设局网站网站商城系统建设
  • 定制企业网站多少钱外贸是什么意思
  • 镇江网站关键字优化如何开发网站比较好的公司
  • Ubuntu安装开源堡垒机JumpServer