1.IIC概述

1基于对话的形式完成,不需要同时进行发送和接收所以删掉了一根数据线,变成半双工2为了安全起见添加了应答机制3可以接多个模块,且互不干扰4异步时序,要求严格,发送过程中不能暂停,所以需要同步时序+一条时钟线。

模式支持一主多从,和多主多从。仲裁器可以仲裁,也需要时钟线

2.IIC引脚说明

IIC总线只需要两根引脚就可以实现通信,一根是数据线(SDA),另一根是时钟线(SCL),所有通过IIC接口通信的外围器件都挂载在IIC总线上,通过这种机制就可以实现多机通信。

可以看到,外围器件的时钟线和数据线都是挂载在IIC总线(由主控芯片提供),并且在空闲状态下所有器件的时钟线(SCL)和数据线(SDA)都被总线的上拉电阻拉高,这样就可以把SDA引脚和SCL引脚设置为开漏模式即可,好处是防止短路。

寻址

每个挂载在IIC总线上的外围器件都有独立的器件地址,主机发送开始信号后,只需要发送想要通信的设备的地址,如果设备收到地址并且匹配正确,则开始进行单独通信。

3.上拉电阻的作用

  1. 提供无效应答

当主机在总线上发送数据时(器件地址),从机在接收到该数据后应当回复主机一个有效应答(低电平)但是若主机发送的是器件地址,而从机上没有与该器件地址匹配的从机,此时主机就会接收到来自上拉电阻提供的无效应答(高电平)

     2.多主模式仲裁

IIC支持多主模式,多个主机怎么判定那个主机在当前通信总线上有效呢?

上拉电阻在IO引脚配置为开漏输出后会有线与功能。

线与功能:多主模式下,只要有一个主机发送0,总线上就为低电平,若都发送1,则总线上就是高电平。(有0为0,全1为1)

由线与功能决定在多主模式通信时,哪个主机先发送1信号,谁先被淘汰。最终留下的就是进入通信的主机。

若只有一个主机,通信总线可以配置为通用的推挽输出,但是多主必须配置为开漏输出

4.通信过程

可以看到,在建立通信的时候主机需要发送开始信号,紧接着主机需要发出从器件的设备地址(7bit+1bit),从设备的物理地址是7bit,但是由于只有一根数据线,就需要说清楚数据的传输方向,数据的传输方向通过从设备的地址最低位进行表示(最低位是0,表示写操作,最低位是1,表示读操作),IIC总线提供了应答机制,也就是说从机收到了1个字节的数据之后,会在第九个脉冲发送给主机一个应答信号(1bit),如果主机收到从机的应答信号,则主机可以继续发送数据,反之,如果主机没有收到从机发送的应答信号,那主机就不应该继续发送数据,而是应该主动发出一个停止信号,表示停止通信。

5.器件地址
最低位=0,表示写操作  10100000---写地址 ---主机给从机发数据(0xA0)

最低位 = 1,表示读操作  10100001(0xA1)---读地址---主机从从机读数据(从机给主机发送数据)

1010说明书查的,000是电路设计时接地可以查原理图,0写1读

6.IIC时序

6.1 空闲状态

指的是不传输任何数据的时候就被称为空闲状态,IIC总线规定SDA数据线和SCL时钟线在不传输数据的时候都应该设置高电平,表示空闲。

6.2 开始信号

在SCL(时钟线)为高电平期间,SDA(数据线)从高电平跳变到低电平(下降沿)。

SDA: ----------------\_____
↓ (下降沿)
SCL: --------/¯¯¯¯¯¯¯\_____
↑ (SCL高时SDA跳变)

void OELD_IIC_Start(void)
{
//1.设置SDA引脚为输出模式
OLED_IIC_SDAOutputMode();

//2.确保SDA和SCL为高电平
OLED_IIC_SCL_WRITE(1);
OLED_IIC_SDA_WRITE(1);
Delay_us(5);            //提高程序可靠性

//3.把SDA引脚拉低
OLED_IIC_SDA_WRITE(0);
Delay_us(5);   // IIC总线的通信速率为100KHZ  1000000us = 100000HZ  10us = 1HZ 

//4.把SCL引脚拉低,表示准备通信
OLED_IIC_SCL_WRITE(0);
}

6.3 数据发送

6.4 应答信号

6.5 数据接收

6.6 停止信号

停止信号由主设备(Master)发出,时序特征为:SCL(时钟线)保持高电平期间SDA(数据线)从低电平跳变到高电平(上升沿)

SDA: _____/¯¯¯¯¯¯¯¯
↑ (上升沿)
SCL: ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
(保持高电平)

void OLED_IIC_Stop(void)
{
//1.设置SDA引脚为输出模式
OLED_IIC_SDAOutputMode();

    //2.确保SDA和SCL为低电平
OLED_IIC_SCL_WRITE(0);
OLED_IIC_SDA_WRITE(0);

//4.把SCL引脚拉高
OLED_IIC_SCL_WRITE(1);
Delay_us(5);

//5.把SDA引脚拉高
OLED_IIC_SDA_WRITE(1);
Delay_us(5);  //确保SDA的电平状态可以被其他从器件检测到

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93167.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93167.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93167.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AMD KFD的BO设计分析系列 0:开篇

开启我始终不敢碰的GPU存储系列,先上个图把核心关系表达下,以此纪念。注:图中kfdm_mm误写,应该为kfd_mm,不修改了,请大家不要介意。

EUDR的核心内容,EUDR认证的好处,EUDR意义

近年来,全球森林退化问题日益严峻,毁林行为不仅加剧气候变化,还威胁生物多样性和原住民权益。为应对这一挑战,欧盟于2023年6月正式实施《欧盟零毁林法案》(EU Deforestation-free Regulation, EUDR)&#x…

数据分析专栏记录之 -基础数学与统计知识

数据分析专栏记录之 -基础数学与统计知识: 1、描述性统计 均值 data_set [10, 20, 30, 40, 50] mean sum(data_set)/len(data_set)np 里面的函数,对二维进行操作时, 默认每一列 mean1 np.mean(data_set) print(mean, mean1)s 0 for i…

《星辰建造师:C++多重继承的奇幻史诗》

🌌🔥 《星辰建造师:多重继承与this指针的终极史诗》 🔥🌌—— 一场融合魔法、科技与哲学的C奇幻冒险🌠🌌 序章:代码宇宙的诞生 🌌🌠在无尽的代码维度中&#…

云计算-OpenStack 运维开发实战:从 Restful API 到 Python SDK 全场景实现镜像上传、用户创建、云主机部署全流程

一、python-Restful Api 简介 Restful API 是一种软件架构风格,基于 HTTP 协议设计,通过统一的接口(如 URL 路径)和标准的 HTTP 方法(GET/POST/PUT/DELETE 等)实现资源(如数据、文件等)的操作,具有无状态、可缓存、客户端 - 服务器分离等特点。方法如下 用 GET 请求获…

RxJava 在 Android 中的深入解析:使用、原理与最佳实践

前言RxJava 是一个基于观察者模式的响应式编程库,它通过可观察序列和函数式操作符的组合,简化了异步和事件驱动程序的开发。在 Android 开发中,RxJava 因其强大的异步处理能力和简洁的代码风格而广受欢迎。本文将深入探讨 RxJava 的使用、核心…

面试实战 问题三十 HTTP协议中TCP三次握手与四次挥手详解

HTTP协议中TCP三次握手与四次挥手详解 在HTTP协议中,连接建立和断开依赖于底层的TCP协议。虽然HTTP本身不定义握手过程,但所有HTTP通信都通过TCP三次握手建立连接,通过四次挥手断开连接。以下是详细解析:一、TCP三次握手&#xff…

读《精益数据分析》:双边市场的核心指标分析

双边市场数据分析指南:从指标体系到实战落地(基于《精益数据分析》框架)在互联网平台经济中,双边市场(如电商、出行、外卖、自由职业平台等)的核心矛盾始终是"供需平衡与效率优化"。这类平台连接…

Queue参考代码

queue.c #include "queue.h" #include "stdlib.h" // 初始化循环队列 void initializeCircularQueue(CircularQueue *cq, uint8_t *buffer, uint32_t size) {cq->front 0;cq->rear 0;cq->count 0;cq->size size;cq->data buffer; }…

通过时间计算地固系到惯性系旋转矩阵

通过时间计算地固系到惯性系旋转矩阵 1. 引言 在航天工程和卫星导航领域,经常需要在地固坐标系(ECEF)和惯性坐标系(ECI)之间进行转换。本文将详细介绍如何根据UTC时间计算这两个坐标系之间的旋转矩阵,并提供完整的C语言实现。 2. 基本概念 2.1 坐标系定义…

【Datawhale AI 夏令营】金融文档分析检索增强生成系统的架构演变与方法论进展

# **金融文档分析检索增强生成系统的架构演变与方法论进展****第一部分:基础原则和基线系统分析****第一部分:金融领域检索增强生成范式的解构****第二部分:基线剖析:流水线的二分法****同步轨迹 (SimpleRAG)****异步改进 (AsyncS…

C语言相关简单数据结构:顺序表

目录 1.顺序表的概念及结构 1.1 线性表 如何理解逻辑结构和物理结构? 1.2 顺序表分类 顺序表和数组的区别: 顺序表分类: 静态顺序表 动态顺序表 1.3 动态顺序表的实现 初始化 尾插 头插 尾删 头删 在指定位置之前插入数据 删…

nginx配置代理服务器

Nginx 作为代理服务器时,主要用于反向代理(最常用,转发客户端请求到后端服务)或正向代理(较少用,为客户端提供访问外部网络的代理)。以下是两种场景的具体配置示例: 一、反向代理配置…

MySQL数据库知识体系总结 20250813

一、数据库的原理 1.数据库的分类 我们可以根据数据的结构类型,将数据分成三类,分别是:结构化数据,半结构化数据,非结构化数据。 要点:对于结构化数据来讲通常是先有结构再有数据。要点:对于半…

C++ 中构造函数参数对父对象的影响:父子控件管理机制解析

文章目录C 中构造函数参数对父对象的影响:父子控件管理机制解析1. Qt 中的父对象管理机制2. 构造函数传递父对象的不同方式2.1. 父控件是 QWidget parent(通用方式)分析:2.2. 父控件是 Books_Client parent(限制父控件…

直播美颜SDK开发实战:高性能人脸美型的架构与实现

在直播行业里,美颜已经不再是锦上添花,而是标配中的标配。无论是游戏主播、带货达人,还是唱歌、跳舞的才艺主播,直播美颜SDK往往决定了用户的第一印象和停留时长。尤其是高性能人脸美型技术,不仅能让主播的五官更加自然…

JavaWeb(苍穹外卖)--学习笔记18(Apache POI)

前言 本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,用户端开发的流程大致为用户登录—商品浏览(其中涉及…

OpenJDK 17 源码 安全点轮询的信号处理流程

OpenJDK 17 源码,安全点轮询的信号处理流程如下(重点分析安全点轮询相关部分):核心信号处理流程信号触发:当线程访问安全点轮询内存页时(SafepointMechanism::is_poll_address),会触…

InfluxDB 在工业控制系统中的数据监控案例(一)

工业控制系统数据监控的重要性**在工业领域,生产过程的复杂性和连续性使得数据监控成为保障生产稳定运行的关键环节。通过实时收集、处理和分析生产数据,企业能够及时掌握设备运行状态、产品质量信息以及生产流程的各项参数,从而为生产决策提…

嵌入式学习(day26)frambuffer帧缓冲

一、UI技术: User interface(1)framebuffer: 帧缓冲、帧缓存技术 Linux内核专门为图形化显示提供的一套应用程序接口。流程如下:1. 打开显示设备 (/dev/fb0) 2. 获取显示设备相关参数(分辨率,像素格式)---》…