半小时搞懂STM32面经知识点——IIC

1.IIC

1.1什么是IIC?

同步半双工通信协议,适用于小数据和短距离传输。

1.2 IIC需要几条线?

IIC总共有2条通信总线(SDA,SCL),SCL为时钟同步线,用于主机和从机间数据同步操作;SDA为数据线;
在这里插入图片描述

1.3 为什么上述两条线要用开漏输出且配上上拉电阻呢?

①多口同线,实现“线与”,防止短路
多个设备挂载在同一个总线上,如果采用推挽输出,其中一个设备输出高电平,另一个设备输出低电平就会造成短路。而开漏输出允许多个设备共享同一个总线或信号线,通过合理的电平控制,实现对总线或信号线的协调使用,避免冲突和干扰。
线与:只要有一个设备输出低电平,那么总线便会变成低电平
②无数据传输时,总线一直保持高电平,减少数据干扰

1.4 IIC最大支持的挂载设备数?

地址组成:7+W/R,高7位为设备地址,最低位为读写位。读写位用低电平0表示写,高电平1表示读。
最大挂载设备为:2^7-1 = 127,剩下一个用作广播地址。 广播只能传输控制命令,如复位,不能传数据。
实际上,已有IIC的设备种类远远多于这个限制,在一条总线上出现相同的地址的IIC设备的概率相当高。IIC标准提出10位的地址方案。当使用10位设备地址,可以挂载的设备理论上可以达到1024个。

10位地址对IIC协议的影响有两点:1.地址帧为两个字节长,原来的是一个字节2.第一个字节前五位最高有效作用为用作10位地址标识,约定是“11110”

在这里插入图片描述

际设计中的经验值建议不超过8个设备,受到总线电容和总线电压的限制,信号的质量和传输的可靠性可能会受到影响。

1.5 IIC的速度

标准:100 kb/s,适用较长的总线和较慢的设备,如LCD显示屏、温度传感器等
高速模式:3.4Mb/s(可双向传输的最快)适用于对数据传输速度要求非常高的设备,如高清视频处理器、高速闪存等
超快速模式:5Mb/s(只适用于单向传输)适用于需要超高速数据传输的设备,如图像处理器、高速网络接口等

注:上拉电阻越小,电流越大,电平转换效率越高,总线速率越高

1.6 IIC的信号与时序

Start 起始信号

开始条件:SDA,SCL都为高 11

起始信号:SCL为高电平时,SDA从高到低。 01

结束条件:SDA和SCL都处于低电平。 00
在这里插入图片描述

void IIC_Start(void)
{SDA_H;            // 拉高SDASCL_H;            // 拉高SCL  先拉高两条线是为了确保空闲状态两个都是高电平delay_us(speed);  // 延时控制速度SDA_L;            // 启动信号,SCL高电平的时候,SDA从高电平变为低电平delay_us(speed);  // 延时,控制速度SCL_L;            // 为了准备下一个时钟周期以及接下来的数据传输做准备。
}

Stop 停止信号

开始条件:SDA,SCL都为低

时钟线拉高:SCL拉高先

结束信号:在时钟线为高的时候,SDA从低变高
在这里插入图片描述

void IIC_Stop(void)
{SDA_L;  //  SCL_L;  // 拉低SCL代码是为了确保从设备能够检测出SDA的变化delay_us(speed);SCL_H;  //SCL线 SDA_H;  // 拉高SDA线,当SCL为高时,SDA线一个上升沿代表停止delay_us(speed);
}

ACK 应答信号

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
有效应答:SDA为低电平,SCL经历一个完整的时候, 也就是SCL为高电平时候,SDA为低电平
在这里插入图片描述

//产生ACK应答,读取从机一字节数据后还要接着读的时候使用
//SCL在SDA一直为低电平期间完成低高电平转换
void IIC_ACK(void)
{SCL_L;   // 拉低SCL是为了让从设备检测到SDA的变化SDA_L;   // SDA为低电平表示ACK应答信号delay_us(speed);SCL_H;   // 经历一个完整的高电平时钟delay_us(speed);SCL_L;   
}

在这里插入图片描述

//不产生ACK应答,读取从机一字节数据后不读了的时候使用    
//SCL在SDA一直为高电平期间完成低高电平转换
void IIC_NACK(void)
{SCL_L;   // 拉低SCL是为了让从设备检测到SDA的变化SDA_H;   // SDA为高电平表示ACK应答信号delay_us(speed);SCL_H;   // 经历一个完整的高电平时钟delay_us(speed);SCL_L;   
}
//等待ACK应答    
//发送完一个字节后(释放SDA)的下一个时钟高电平时期,读取SDA电平,0为收到应答
bool IIC_Wait_ACK(unsigned int timeOut)
{SDA_H;delay_us(speed);SCL_H;delay_us(speed);while(SDA_R){if(--timeOut){printf("Wait IIC timeOut\r\n");IIC_Stop();            // 超时未收到应答,停止总线return IIC_Err;  //返回失败}delay_us(speed);}SCL_L;return IIC_OK;   
}

数据信号

发送数据和接收数据时通用。当SCL为高电平,如果SDA始终为高电平时表示逻辑1,如果SDA始终为低电平表示逻辑0.

IIC发送与接受数据帧

在这里插入图片描述
在这里插入图片描述
起始条件+发送要读取的地址(0,为发送数据)+接收应答位+读取的8位数据+发送应答位(0, 应答)+应答位(1,不应答,因为想停止读取)+停止条件
在这里插入图片描述

1.7 IIC仲裁机制

“低电平优先”,谁先发送低电平谁就掌握对总线的控制
通过线与逻辑就可以仲裁主机,如下图所示,在第四个红框的时候,主器件A和主器件B发送的数据为高电平,主器件C为低电平。此时数据线呈现低电平,A和B与数据线电平不相同,退出竞争。C相同获得数据线的归属权。
在这里插入图片描述

1.8 IIC时钟同步

时钟同步发生在仲裁期间,会有多个主机同时发送往SCL上发送时钟信号,需要时钟同步调整速率一致,具体来说就是SCL线上的低电平时间是由时钟低电平最长的设备决定,SCL的高电平则是由高电平时间最短的期间决定 ,通过这一方法可以同步所有设备的时钟,更好的实现仲裁
在这里插入图片描述

1.9 时钟拉伸

时钟拉伸就是完成时钟同步中的事,将主从设备间数据传输同步。
时钟拉伸是用于调整主从设备速率不一致的时候发生的,当从设备速度较慢或需要处理其他事情的时候,从设备主动拉低SCL线通知主设备,直到从设备释放SCL,主设备才进入下一个时许,时钟拉伸解决了I2C主从设备的数率同步问题,使得数据传输更可靠。

1.10 IIC优势

简单且灵活:I2C仅需要两根线(SDA和SCL)来进行通信,使得硬件连接和布线变得简单。
可靠性高:I2C协议采用了主从架构,由主设备控制总线上的数据传输。
多设备支持:IIC支持一主多从,每个设备都有唯一的地址。
低功耗:I2C在基本模式下使用了开漏输出结构,使得设备在非活动状态下可以撤离总线,从而降低功耗。

1.11软件IIC硬件IIC区别

硬件IIC是通过专门的硬件电路实现的,而软件IIC是通过软件控制GPIO口管脚来模拟IIC协议的时许的。
硬件IIC的优势:高速传输 + 低占用率(不需要CPU的干预)+稳定性高(时许由硬件控制,不受外部干扰)
软件IIC的优势:灵活性高(任意GPIO口)+ 可移植性强 + 适用范围广 。

1.12配置失败,一般怎么排查

硬件连接问题
电源供电问题
地址设置问题
软件程序问题
检查时序

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

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

相关文章

【密评】 | 商用密码应用安全性评估从业人员考核题库(9/58)

Hill密码是重要古典密码之一,其加密的核心思想的是()。 A.线性变换 B.非线性变换 C.循环移位 D.移位 著名的Kerckhoff原则是指()。 A.系统的保密性不但依赖于对加密体制或算法的保密,而且依赖于密钥 B.系统…

【计算机网络】数据链路层的功能

数据链路层的基本功能: 封装成帧透明传输差错检测 数据链路层使用的信道主要有两种 点对点信道——PPP协议广播信道——CSMA/CD协议(有线局域网)、CSMA/CA协议(无线局域网) 数据链路层所处的地位 从图中可以看出,数据从主机H1送到主机H2需要在路径中…

论文笔记模版

1. 摘要 1.1 背景 1.2 挑战 1.3 提出新方法 1.4 贡献 2. 引言 2.1 背景(引出问题) ①介绍大背景: ② 应用场景: ③ 介绍主题: 2.2 引出挑战 一般用图表来展现出我们的挑战(直观,解决什…

echarts环形图 legend文字过长显示...鼠标移动上展示全称

legend: {type: scroll,orient: vertical,x: left,y: bottom,top: "42%",left: 13%,data: this.dutyNames,textStyle: { color: #fff },triggerEvent: true,tooltip: {show: true,trigger: item,//鼠标移动上去展示全称},formatter: function (params) {var val &qu…

HTML五彩缤纷的爱心

写在前面 小编准备了一个五彩缤纷的爱心,送给各位小美女们~ 在桌面创建一个.txt文本文件,把代码复制进去,将后缀.txt改为.html,然后就可以双击运行啦! HTML简介 HTML(超文本标记语言)是一种…

【Python单点知识】通过实例介绍抽象类

文章目录 0. 前言1. 抽象类的概念与特性1.1 定义1.2 特性 2. 抽象类的实现与使用2.1 抽象类的创建2.2 抽象类的特性验证2.3 注册机制与非直接继承 3. 应用场景与设计价值4. 总结 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然…

C++——二叉树搜索树

前面写了初阶数据结构——二叉树;本文内容是来对它来进行结尾 目录 一概念 二实现 2.1查找 2.2插入 2.3删除 完整源代码 三二叉树的应用 四二叉搜索树的性能分析 五二叉搜索树相关的面试题 一概念 二叉搜索树又称二叉排序树,它或者是一棵空树…

妙笔生花,创作无限——WonderPen妙笔 for Mac

写作,是灵感的流淌,是心灵的独白。WonderPen妙笔 for Mac,为您的灵感插上翅膀,让您的创作更加流畅自如。它拥有简洁直观的界面设计,让您的思绪在纯净的写作环境中自由飞翔。多种写作模式,满足您不同的创作需…

Ps 滤镜:绘图笔

Ps菜单:滤镜/滤镜库/素描/绘图笔 Filter Gallery/Sketch/Graphic Pen 绘图笔 Graphic Pen滤镜可以模拟传统绘画技术,特别是模拟使用细油墨笔进行绘制的艺术效果。该滤镜主要用于将图像中的细节以细线的形式表现出来,非常适合于增强图像的线条…

c语言题库之多个数组从两边移动向中间汇聚

文章目录 题目分析代码实现代码分析 题目 c语言题库之多个数组从两边移动向中间汇聚 呈现效果:输入想要输入的字符数组呈现数组从两边向中间逐渐打开的样子 分析 首先我们需要一组我们想要输入的字符数组用来展示打开的字符其次我们需要进行对数组的替换&#x…

系统加固-自用

一、windows 1、概述 (1)、权限最高:system(系统账户),权限比administrator权限还高 (2)、常见操作系统安全漏洞类型 缓冲区溢出漏洞TCP/IP协议漏洞web应用安全漏洞开放端口的安全漏洞 2、系统安全加固方法 (1)、系统不显示上次登录的用户名 进入…

nss刷题(2)

1、[NSSCTF 2022 Spring Recruit]ezgame 打开题目是一个游戏界面 发现是有分数的,猜测分数达到某个之后可以获得flag,查看源码看一下 看到末尾显示分数超过65后显示flag 在js中找到了一个score,将他的值改为大于65的数后随意玩一次就可以得到flag同时&a…

【设计模式】之代理模式(两种)

系列文章目录 (其他设计模式可以参考 👉👉👉)设计模式_小杰不秃头的博客 😊😄😛 前言 今天继续给大家介绍23种设计模式中的代理模式,熟悉Spring的小伙伴都知道&#xf…

文心一言指令:解锁AI写作的新纪元

文心一言指令:解锁AI写作的新纪元 一、引言 在人工智能(AI)飞速发展的今天,自然语言处理(NLP)技术取得了显著的进步。文心一言,作为NLP领域的一颗璀璨明星,以其强大的文本生成和指令…

可行性判定(c++)

可行性判定 当前有 N 件物品和一个容积为 V 的背包。 已知第 i 件物品的体积是 ci​,每种物品有且仅有一件,每一件物品能够选择放或者不放入背包。 现在我们不考虑物品的价值,只关心是否能够取出若干个物品,恰好使这个背包被装…

Adobe Animate 2024软件下载

Adobe Animate 2024软件下载: 百度网盘下载https://pan.baidu.com/s/1cQQCFL16OUY1G6uQWgDbSg?pwdSIMS Adobe Animate 2024,作为Flash技术的进化顶点,是Adobe匠心打造的动画与交互内容创作的旗舰软件。这款工具赋予设计师与开发者前所未有的…

day05-面向对象内存原理和数组

day05 面向对象内存原理和数组 我们在之前已经学习过创建对象了,那么在底层中他是如何运行的。 1.对象内存图 1.1 Java 内存分配 Java 程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域…

Redis的数据完全是存在内存中的吗?

是的,Redis的数据完全是存储在内存中的。这也是Redis能够提供非常高速的读写性能的主要原因,尤其适用于需要快速响应的应用场景。然而,虽然Redis将所有数据存储在内存中,但它也提供了持久化机制,可以将数据异步地保存到…

【LeetCode算法】242. 有效的字母异位词

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每…

docker搭建redis6.0(docker rundocker compose演示)

文章讲了:docker下搭建redis6.0.20遇到一些问题,以及解决后的最佳实践方案 文章实现了: docker run搭建redisdocker compose搭建redis 搭建一个redis’的过程中遇到很多问题,先简单说一下搭建的顺序 找一个redis.conf文件&…