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

IIC

IIC

目录

IIC

BH1750型号的光照传感器

IIC通信协议

iic物理层

IIC软件层协议

-- 那么一主多从,怎么选中与指定的从机通信呢?

从机设备地址 -- 从手册中查看

IIC 写操作

IIC 读操作

硬件IIC和模拟 IIC 使用

模拟 IIC 使用

!!!注意:模拟iic的代码最好手敲一遍熟悉一下。


-- 这节课新增一个传感器,就是光照传感器

-- 之前单片机上的光敏传感器只能测出几千几千的数据,测不出真正的光照数据

BH1750型号的光照传感器

-- BH1750

-- 学习一个模块,还是按照之前的学习方法,要先找到这个模块的官方手册

-- 找到手册之后先看引脚定义,咱们这个模块一共5个引脚

alt text

alt text

-- 可以看到有SCL和SDA引脚,这就是IIC通信的引脚

  • 以后见到SCL和SDA,就是IIC通信

-- 然后要了解它的通信方式

-- IIC是一种通信方式,为什么有时候会叫做IIC协议?

  • 因为像SPI和IIC通信方式自带的有自身的协议。

-- 什么叫协议?

  • 协议一般指的是通信过程中数据传输的格式或者是数据传输的方式

  • 比如kqm6600,通信协议是规定他传输数据的格式。(一次8字节)

iic也是一种通信时自带协议的通信

-- 补充:spi是全双工通信,优点:快。iic是半双工通信,优点:占用引脚资源少,但是没有SPI的速度快。

-- iic是串行通信,什么叫串行通信(一位一位发),要发送一字节,就要发送8次.

IIC通信协议

IIC其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线(总线是连接各个部件的信息传输线,使各个部件共享的传输介质),使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。

-- 我们之前也学过总线,有SPI总线,单总线

  • 总线:在通信方式上能够连接多个设备

-- iic的应用十分广泛,例如:

  • 1、飞行器当中的陀螺仪:

  • 2、EEPROM-存储器

  • 3、触摸屏(触摸芯片)

  • 各种传感器等


iic物理层

-- 两根通信线:SCL(时钟线) 、 SDA(数据线)

-- 电平标准:一般TTL电平标准

-- 需要接上拉电阻

alt text

它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。
一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

也就是说所有IIC设备的SCL,以及SDA都连在一起,设备SCL和SDA都要配置成开漏模式,SCL和SDA各添加一个上拉电阻,阻值一般为4.7k欧姆左右。

-- !!那么怎么判别是哪一个从机向主机发送的数据呢?

每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问.

IIC软件层协议

-- I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

  • 1、开始信号(双方通信的开始):SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
  • 2、结束信号(双方通信的结束):SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

alt text

-- 对比:SPI有一个缺点:发送过去的数据不知道对方到底收到没。iic避免了这个问题:专门有一个信号叫做应答信号:等待接收方的应答信号。

-- 从机收到这个数据,就会发送一个应答信号,主机收到应答信号,就知道数据发送成功。在iic通信中,每发送一个字节,从机都会发送一个应答。高电平1叫做非应答,0叫做应答。也就是说主机发送数据,从机收到数据,主机会检测到低电平,从机没接收到信号,主机会检测到高电平。双方不通信的时候会是高电平,所以一般将高电平叫做非应答

-- 如果整条iic总线保持静默,两条设备线都是处于高低平

(起始信号和终止信号都是由主机发送的。在起始信号产生之后,总线就处于被占用的状态,在终止信号产生之后,总线就处于空闲状态,起始信号: 一般时钟在最后再回拉低方便时序的拼接)

  • 3、主机发送一个字节:SCL低电平期间,主机将数据的一位放到SDA线上(高位先行),然后拉高SCL(也叫做释放SCL),从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,一次循环8次就可以发送一个字节。

  • 4、主机接收一个字节:(主机在接收之前,主机需要释放SDA,若不释放,不论从机发送什么,SDA始终都是低电平)SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL(置高电平),主机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化,循环上述过程8次即可接收一个字节 。

  • 5、应答信号: 发送数据的设备:发送完8bit一个字节的数据之后,会等待一定的时间,等接接收方的应答信号(SDA在接收前,拉高释放SDA ),接收端通过拉低SDA数据线,给发送端发送一个应答信号,以提醒发送端我这边已经接受完成,数据可以继续传输,接下来,发送端就可以继续发送数据了。
    接收数据的设备:接收到 8bit一个字节数据后,在下一个时钟,需要向发送数据的设备发出一位数据,其中数据0低电平信号,通知发送方已收到数据,数据1 高电平信号,就是没有通知。


-- 在iic通信中,从机不会主动传输数据的,一般主动发起通信的是主机,起始信号和结束信号都是由主机发送的(与SPI一样)

-- tip:通信最基础的就是发送和接收(类似usart和SPI)

-- 什么叫串行通信(一位一位发),要发送一字节,就要发送8次

-- 疑问:上述的情况下MCU都是做主机的,为什么从机没有发送和接收

因为一般从机的通信都是订死的,主机会根据不同的从机做调整。


-- 那么一主多从,怎么选中与指定的从机通信呢?

  • 就像SPI通信是通过片选实现的从机通信的。

  • 而iic是通过地址实现的从机通信的。在iic总线上的每个设备都有唯一的设备地址 。iic实际上是一个地址通信,每一个iic的从机器件都有自身的地址

  • 比如触摸屏有自身的地址,EEPROM也有自身的地址

  • 但是一条iic总线上不会有地址相同的从机,如果地址一样,是不允许连接到一个iic总线上

  • 每个iic的从设备地址都不一样,从设备的地址只能从手册上查看

-- 在一个项目中,光照传感器的地址是一样的,如果想接多个光照传感器呢?怎么实现?

  • 1、选择不同型号的光照传感器

-- 如果只有一个型号怎么办?

  • 2、再开一个iic总线或者改器件的地址

-- 器件的地址怎么改?

  • iic模块会有一个引脚ADDR,就是用来修改器件地址的引脚。

从机设备地址 -- 从手册中查看

-- 主机根据从机的地址与从机通信。在I2C协议里,分为 7 位和 10 位地址,大多使用 7 位。每个设备出厂时,都会被分配一个地址。若相同芯片接同一个总线,可手动改变(改变从机某个引脚的电平)最后几位地址。

alt text

-- 在开始通信的第一个字节一般是 7bit 的地址位+1bit 的读写位(也可以称之为读写位)。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据

  • 注意:就算可以修改同类型设备的地址,一个总线上也不能挂载很多个。

最多能挂载同样地址的三个器件,有拉低,拉高,悬空的方法

IIC 写操作

  • 1、产生 start
  • 2、传送器件地址 Device_Address,器件地址的最后一位为数据的传输方向位,R/W 低电平0 表示主机往从机写数据(W),1 表示主机从从机读数(R)。ACK 应答,应答是从机发送给主机的应答。
  • 3、传送写入器件寄存器地址分别传送高地址和低地址,即数据要写入的位置。
  • 4、传送要写入的数据 Data。
  • 5、产生 stop 信号

alt text


-- SCL默认是高电平,SCL如果变成低电平,只能是主机控制这个引脚发送低电平。主机要想发送,就会先将SCL拉低,这就说明主机正在占用总线,从机就不能发送。主机将数据的一位放到SDA线上,怎么放?就是将SDA数据线拉高就是1,拉低就是0.

IIC 读操作

-- 与写操作类似

  • 1、产生 start 信号
  • 2、 传送器件地址(写 Device_Address)+读写位,ACK。
  • 3、传送字地址,ACK。
  • 4、再次产生 start 信号
  • 5、 再传送一次器件地址,ACK。
  • 6、 读取一个字节的数据,读数据最后结束前无应答 ACK 信号。
  • 7、 产生 stop 信号

alt text


-- 再看官方手册上是怎么说的

alt text

alt text

alt text


  • 总结:想要实现 iic 通信就是要主机与从机之间产生 iic 的时序信号。

第一种,是通过配置两个引脚 为开漏模式,然后通过 cpu 执行代码控制引脚输出高电平,编写逻辑,生成 iic 的通信时序。
第二种,使用 stm32 上的片上外设,通过寄存器操作,直接产生 iic 时序。

硬件IIC和模拟 IIC 使用

-- 在讲硬件I2C之前不得不吐槽一下这个硬件I2C外设,有时候就突然会卡在某个事件的检测,需要关闭电源重新启动才有用,不过虽然可能硬件I2C可能会有问题,可能以后不一定用的到但是我们主要是学习如何用硬件实现I2C协议,对我们以后学别的协议肯定会有帮助。

硬件 I2C:是指直接利用 STM32 芯片中的硬件 I2C 外设,该硬件 I2C 外设跟 USART串口外设类似,只要配置好对应的寄存器,外设就会产生标准串口协议的时序。使用它的I2C外设则可以方便地通过外设寄存器来控制硬件I2C外设产生I2C协议方式的通讯,而不需要内核直接控制引脚的电平。

软件模拟I2C:即直接使用CPU内核按照 I2C 协议的要求控制GPIO输出高低电平。如控制产生 I2C 的起始信号时,先控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的GPIO引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

-- 硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。

模拟 IIC 使用

-- 参照官方代码

alt text

-- 1、首先配置引脚模式这里拿举例 --开漏模式

  • PB6--iic 时钟引脚 SCL
  • PB7--iic 数据引脚 SDA --开漏模式

-- 2、封装时序信号

  • (1) 起始信号
SDA=1;
SCL=1;
Dealyus(5);
SDA=0;
Dealyus(5);
SCL=0;
Dealyus(5);

alt text

  • (2) 停止信号
SDA=0;
SCL=1;
Dealyus(5);
SDA=1;
Dealyus(5);

alt text

  • (3) 发送单字节 -高位先发

alt text

alt text

  • (4) 接收单字节

alt text

  • (5) 主机发送应答

SDA=0;

  • (6) 主机接收应答

SDA=1;


alt text

-- 注意:在IO初始化中,我们并没有配置上拉电阻,但是前面我们明明讲过要用上拉电阻,这是为什么呢?

  • 答:是我们封装的模块上面有:

alt text


alt text

-- 应答

alt text

-- 接收数据

alt text

-- 硬件连接 -- 4个引脚要连

  • PB6 -- SCL

  • PB7 -- SDA

  • vcc -- 3.3v

  • GND


!!!注意:模拟iic的代码最好手敲一遍熟悉一下。

相关文章:

IIC

IIC 目录 IIC BH1750型号的光照传感器 IIC通信协议 iic物理层 IIC软件层协议 -- 那么一主多从,怎么选中与指定的从机通信呢? 从机设备地址 -- 从手册中查看 IIC 写操作 IIC 读操作 硬件IIC和模拟 IIC 使用 模拟 IIC 使用 !&…...

LLM Observability: Azure OpenAI (一)

作者:来自 Elastic Vinay Chandrasekhar•Andres Rodriguez 我们很高兴地宣布 Azure OpenAI 集成现已全面上市,它提供了对 Azure OpenAI 服务性能和使用的全面可观察性!另请参阅本博客的第 2 部分 虽然我们已经提供了对 LLM 环境的可视性一段…...

qt QBrush详解

1、概述 QBrush是Qt框架中的一个基本图形对象类,它主要用于定义图形的填充模式。QBrush可以用于填充如矩形、椭圆形、多边形等形状,也可以用于绘制背景等。通过QBrush,可以设置填充的颜色、样式(如实心、渐变、纹理等&#xff09…...

Excel函数CUnique连接合并指定区域的唯一值

上一篇文章向大家介绍了如何使用VBA在低版本Excel中创建unique函数的方法,今天我跟大家分享一下如何使用函数连接指定区域的唯一值,也就是将unique函数获取的唯一值连接合并成一个,并指定连接符。 同样,我们需要先创建一个自定义的…...

机械革命屏幕设置为RGB

机械革命屏幕设置为RGB 如何设为机械革命屏幕显示为RGB如何设置1.win菜单下输入“显卡控制中心”2.选择显示器3.设置为RGB4.饱和度大家设为自己舒服的就行5.调整亮度 参考来源 如何设为机械革命屏幕显示为RGB 之前买的显示器,感觉调成sRGB看起来非常舒服。就想着是…...

开源项目-投票管理系统

哈喽,大家好,今天主要给大家带来一个开源项目-投票管理系统 投票管理系统主要有首页,发起投票,管理投票,参与投票,查看投票等功能 首页 为用户提供了一键导航到各个功能模块的便捷途径。 新增投票 用户可以在此轻松创建新的投票活动,设置投票主题、选项等信息。 管理…...

LeetCode 104.二叉树的最大深度

题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1…...

Android启动流程_Init阶段

前言 本文将会介绍 Android 启动流程,将基于 Android 10 代码逻辑介绍原生启动过程。 bootloader 上电 -> 加载 recovery 镜像或者 boot 镜像 -> linux kernel 启动 -> 加载 init 进程 -> 加载 zygote 进程 -> systemserver 进程 -> 系统启动 …...

萤火虫算法优化BILSTM神经网络多输入回归分析

目录 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 代码 结果分析 展望 完整代码下载:的MATALB代码(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88755564 背影 bp神经网络是一种成熟的神经网络,应用非常广,本文用萤火虫算法…...

在线QP(QuotedPrintable)编码解码工具

具体前往:Quoted-printable在线编码解码工具-将给定文本编码为:可打印字符引用编码(简称:QP编码),也支持在线解码...

【已解决】cra 配置路径别名 @ 后,出现 ts 报错:找不到模块“@/App”或其相应的类型声明。ts(2307)

cra 配置路径别名 后,出现 ts 报错:找不到模块“/App”或其相应的类型声明。ts(2307) 然后可以在 tsconfig.json 中配置 baseUrl 和 paths : {"compilerOptions": {"target": "es5","lib": [&quo…...

leetcode-643. 子数组最大平均数 I

文章目录 二 解法2.1 每次都重新计算2.2 使用窗口 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。二 解法 2.1 每次都重新计算 超时 pu…...

论分布式架构设计及其实现

一、引言 随着互联网用户规模的扩大和需求的多样化,传统的集中式架构已经难以支撑高并发、高可用的系统要求。分布式架构的出现,提供了将计算和存储分布到不同服务器上的解决方案,有效提高了系统的可扩展性和容灾能力。分布式架构目前已广泛…...

基于BP神经网络的手写体数字图像识别

基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围…...

QT——串口调试助手

目录 1.QSerialPort类包含了很多有关串口的API 2.实现串口的打开 2.1 方法一:通过函数实现 2.2 方法二:在ui界面右下角实现 3. 实现定时发送 3.1类的私有成员中添加定时器QTimer timer并去构造函数中初始化它 3.2帮助文档中有QTimer类相关的说明 …...

国产操作系统卖疯了!最营收7.84亿,最低1.5亿

最近看各种报道,似乎国产化有提速的绩效,那么既然如此,各个国产操作系统厂商是不是都起飞了呢? 周末闲暇之余,我们来看看各家的营收表现。 银河麒麟2024年1-9月一共卖了多少钱? 前几天中国软件发布了202…...

2024年华为OD机试真题-最小的调整次数-Python-OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 有一个特异性的…...

React.js教程:从JSX到Redux的全面解析

文章目录 介绍react脚手架jsx语法和react组件jsx的基本语法jsx的行内样式jsx的类名classNameif条件渲染map循环渲染创建组件方法 可视区渲染 (React- virtualized)React-redux 介绍 javascript库,起源于Facebook的内部项目,类似于vue特点 声明式组件化 …...

二叉苹果树

AcWing 1074. 二叉苹果树【有依赖背包DP】 - AcWing 问题描述 在一棵有权无向树中,从某个节点(这里假设为节点 1)出发,遍历树的子节点,每经过一条边会获得对应的权重值。在访问节点数的限制下(即体积限制…...

【大数据学习 | kafka】producer的参数与结构

1. producer的结构 producer:生产者 它由三个部分组成 interceptor:拦截器,能拦截到数据,处理完毕以后发送给下游,它和过滤器不同并不是丢弃数据,而是将数据处理完毕再次发送出去,这个默认是不…...

2. 从服务器的主接口入手

Webserver 的主函数 main.cpp,完成了哪些功能? #include "config.h"int main(int argc, char *argv[]) {string user "";string passwd "";string databasename "";Config config;config.parse_arg(argc, a…...

nginx上传文件超过限制大小、响应超时、反向代理请求超时等问题解决

1、文件大小超过限制 相关配置: client_max_body_size: Syntax:client_max_body_size size;Default:client_max_body_size 1m;Context:http, server, location 2、连接超时: proxy_read_timeout: Syntax:proxy_read_timeout time;Default…...

第16课 核心函数(方法)

掌握常用的内置函数及其用法。 数学类函数:abs、divmod、max、min、pow、round、sum。 类型转换函数:bool、int、float、str、ord、chr、bin、hex、tuple、list、dict、set、enumerate、range、object。 序列操作函数:all、any、filter、m…...

【工具变量】中国制造2025试点城市数据集(2000-2023年)

数据简介:《中国制造2025》是中国ZF于2015年5月8日印发的一项战略规划,旨在加快制造业的转型升级,提升制造业的质量和效益,实现从制造大国向制造强国的转变。该规划是中国实施制造强国战略的第一个十年行动纲领,明确提…...

vscode makfile编译

MinGW-w64下载安装 为了在 Windows 上安装 GCC,您需要安装 MinGW-w64。 MinGW-w64 是一个开源项目,它为 Windows 系统提供了一个完整的 GCC 工具链,支持编译生成 32 位和 64 位的 Windows 应用程序。 访问 MinGW-w64 的主页 mingw-w64.org…...

(四)PostgreSQL数据库操作示例

删除有外键约束的表 最近做数据库练习遇到一个问题,数据库里面有一个表,存在外键约束,我想要删除,所以必须先删除这些外键约束。 查询外键约束 查找外键约束:当你需要知道某个表的外键约束及其引用关系时&#xff0…...

Docker-微服务项目部署

环境准备 1.微服务项目 参考:通过网盘分享的文件:wolf2w_cloud.zip 链接: https://pan.baidu.com/s/1Lr4k6LPIJ59gVNA_DgKM_Q?pwdkjxt 提取码: kjxt 前端项目:trip-mgrsite-ui,trip-website-ui,trip-wenda-ui 服务项…...

测试Bug提交报告模板

撰写测试Bug提交说明时,清晰、详细和准确是至关重要的。这有助于开发团队快速理解问题、重现Bug并修复它。以下是一个测试Bug提交说明的模板,可以根据实际情况进行调整: 测试Bug提交说明 1. Bug基本信息 Bug编号:[系统自动生成…...

MybatisPlus - 核心功能

文章目录 1.MybatisPlus实现基本的CRUD快速开始常见注解常见配置 2.使用条件构建造器构建查询和更新语句条件构造器自定义SQLService接口 官网 MybatisPlus无侵入和方便快捷. MybatisPlus不仅仅可以简化单表操作,而且还对Mybatis的功能有很多的增强。可以让我们的开…...

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(6)嵌入式系统总线及通信接口

目录 越努力,越幸运! flechazo 小柴冲刺软考中级嵌入式系统设计师系列总目录 一、PCI、PCI-E 等接口基本原理与结构 1、PCI (1)高速性。 (2)即插即用性。 (3)可靠性。 (4)复杂性。 (5)自动配置。 (6)共享中断。 (7)扩展性好。 (8)多路复用。…...