嵌入式面试-回答I2C

说明:

        此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理,主要针对的是嵌入式软件面试中涉及到的问答,努力精准的抓住重点进行描述。若有不足非常欢迎指出,感谢!在总结过程中有些答案没标记参考来源,若有参考到您的回答请联系我,我会将其补上,最后希望各位都能够找到理想的工作!

I2C具有以下特点(为什么使用I2C):

  • 只需要SDA、SCL两条总线;
  • 没有严格的波特率要求;
  • 所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;
  • I2C是真正的多主设备总线,可提供仲裁和冲突检测;
  • 最大主设备数:无限制;

I2C通信协议描述:

        

S:开始(当 SCL 线为高时,SDA 线上出现由高到低的信号,表明总线上产生了起始信号。平时空闲状态时SCL(时钟线) 和 SDA (数据线)都为高电平

Slave Address:地址信息

R/W:读写位(如果主器件希望将数据发送到节点,则读⁄写位处于低电平。如果主器件请求从节点得到数据,则该位处于高电平。)

A:ACK(接收器【从设备】在接收8位数据【即每个数据帧后】后,在第9个时钟周期拉低SDA

NA:NOACK(接收器【从设备】在接收8位数据【即每个数据帧后】后,在第9个时钟周期拉高SDA

PS:A和NA是由从设备发给主设备的

DATA:数据帧(SDA在SCL为低电平的时候变化,SDA在SCL为高电平的时候保持。所以能够理解其实都是在SCL为高电平的时候采集SDA的数据进行记录。)如下图所示:

P:停止位(SDA 线上出现由低到高的信号,表明总线上产生了停止信号)

多想一步:

1.SDA时钟线可由主设备驱动,也可以由从设备驱动。那么万一存在主设备将SDA拉高,从设备将SDA拉低怎么办?

        涉及I2C的硬件设计:

        SDA的驱动是由DATAN1OUT/DATAN2OUT来控制,以DEVICE1为例:当DATA IN为1时,该设备的SDA=0(因为吸附后接地);当DATA IN为0时,SDA由外部电路(默认上拉电阻)来决定。那么枚举情况就是如下,这就是能够避免电路冲突的原因。

AoutBoutSDA
001
010
100
110

2. 主从设备驱动如何协调,例如主设备每发送完8个CLK的数据帧之后,从设备怎么知道回复1个CLK的ACK信息?

        同样可以从上面的硬件图中得到解答,当8个CLK发送完毕之后,主设备不控制SDA,这时SDA的信号取决于外部电路(若都没有操作默认为高电平)情况,这时候主动权就在接收到数据的从设备手中,他在第9个CLK将SDA信号置为0(置为低电平,这也就是为什么ACK为低电平,NOACK为高电平),而其他从设备不对SDA进行操作。

3.从硬件图中我们看到从设备也可以驱动SCL,这是为什么?SCL不应该是由主设备驱动的嘛

        当主设备驱动SCL发送完8个CLK的数据帧之后,也正常收到了从设备的ACK,这时候说明从设备已经正常接收到了主设备的数据。那么从设备可能需要先对这个数据进行处理,希望主设备先不要发送数据。那么这时候从设备就可以主动拉低SCL信号线,根据上述表格我们也可以知道,这样无论主设备的SCL对应的元件如何操作,整个SCL均为低电平。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目7-音乐播放器6+评论区

1.准备前端界面 前端小白:怎么为你的网页增加评论功能?(一)_为网页添加评论区怎么弄-CSDN博客 参考的上述文章的前端代码 我们从上述前端图片知道,我们数据库需要准备的字段: id,commentuserName,coomen…

JavaWeb开发02-MYSQL-DDL-DML-DQL-多表设计-多表查询-事务-索引

一、MySQL概述 通过SQL语句可以操作数据库 关系型数据库: 只要是关系型数据库就可以用SQL语句这一统一标准进行操作数据库 1.MYSQL数据模型 客户端通过SQL语句交给了数据库管理系统DBMS,进行相应操作,创建一个一个数据库,体现为一…

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "{我%$是,《速$.度\发》中 /国、人"(1)提取汉字 汉字的范围为”\u4e00-\u9fa5“,这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…

力扣HOT100 - 141. 环形链表

解题思路&#xff1a; public class Solution {public boolean hasCycle(ListNode head) {Set<ListNode> set new HashSet<>();while (head ! null) {if (!set.add(head)) {return true;}head head.next;}return false;} }

基于Matlab机器人工具箱对Dobot机械臂的研究

文章目录 文章目录 前言 一、Dobot Mangician 分析 二、Matlab 机器人工具箱 1. 建立模型 2. DoBot 正向运动学 3. Dobot 逆运动学 4. Dobot workpace 5. Dobot轨迹规划 三、Dobot studio 1. DoBot teaching 2. DoBot Python 程序 总结 前言 在本实验中&#xf…

第四届大数据工程与教育国际会议(BDEE 2024)即将召开!

第四届大数据工程与教育国际会议&#xff08;BDEE 2024&#xff09;将于2024年8月9-11日在泰国清迈举行。数据驱动教育变革&#xff0c;智慧点亮未来课堂&#xff01;BDEE 2024是专注于大数据工程与教育领域的重要学术会议&#xff0c;全球大数据与教育精英齐聚&#xff0c;在数…

QTableView获取可见的行数

场景 当我们需要实时刷新QTableView时&#xff0c;而此时tableView的数据量较大&#xff0c;如果全部刷新显然不合理&#xff0c;如果可以只对用户看的到的数据进行刷新那就最好了&#xff0c;经过一番摸索找到了几种方式&#xff0c;可供参考 代码 方法1 QVector<int>…

李沐48_全连接卷积神经网络FCN——自学笔记

1.FCN是用深度神经网络来做语义分割的奠基性工作。 2.它用转置卷积层来替换CNN最后的全连接层&#xff0c;从而可以实现每个像素的预测。 %matplotlib inline import torch import torchvision from torch import nn from torch.nn import functional as F from d2l import t…

Ubuntu20.4版本安装ROS教程

一、配置源 安装成功的Ubuntu系统自带的工具下载速度慢&#xff0c;不太好用&#xff0c;所以我们可以使用国内稳定高速且免费的镜像网站。 清华源&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple 中科大&…

机器视觉【1】-机械臂视觉

文章目录 Eye-to-HandEye-in-Hand基于Eye-in-Hand型机械臂单目视觉定位单目相机标定针孔相机模型畸变标定方法机械臂手眼标定手眼标定求解图像预处理图像灰度化与二值化图像滤波图像特征匹配机械臂单目视觉定位目标物体图像深度信息目标物体中心定位参考文献根据机械臂与相机所…

FlinkCDC基础篇章2-数据源 SqlServerCDC写入到ES中

接着 上期FlinkCDC基础篇章1-安装使用 下载 Flink 和所需要的依赖包 # 下载 Flink 1.17.0 并将其解压至目录 flink-1.17.0 下载下面列出的依赖包&#xff0c;并将它们放到目录 flink-1.17.0/lib/ 下&#xff1a; 下载链接只对已发布的版本有效, SNAPSHOT 版本需要本地编译 …

视频批量高效剪辑,轻松翻转视频画面,支持将视频画面进行逆时针90度翻转。

在视频编辑的海洋中&#xff0c;你是否曾遇到过需要批量翻转视频画面的情况&#xff1f;传统的视频编辑工具在面对这样的需求时&#xff0c;往往显得力不从心&#xff0c;效率低下。今天&#xff0c;我要为大家介绍一款全新的视频编辑神器&#xff0c;它将彻底改变你的视频编辑…

小试牛刀!

1.从双倍数组中还原原数组&#xff08;力扣&#xff0c;vector&#xff09; java式c解法。 class Solution { public:vector<int> findOriginalArray(vector<int>& changed) {int n changed.size();if(n % 2 1) return {};map<int, int> mp;for(int c…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型,包括Pro版本的Opus),亲测比GPT好用

Claude对话、上传图片的超详细教程来啦&#xff01; 近期&#xff0c;Claude 3 Opus的发布引发了网络上的广泛关注与热议&#xff0c;有观点认为其性能已经凌驾于GPT-4之上。虽然网络上已经出现了大量基于这两款先进AI技术的实际应用案例&#xff0c;但仍有许多人对在国内如何…

游戏生成式 AI:编织梦想,避开阴影

想象一下&#xff0c;一个沉浸式的游戏世界中玩家遇到的每个 NPC 都由 AI 驱动&#xff0c;他们能与玩家进行互动&#xff0c;从改变游戏体验。据 Inword 一项研究显示&#xff0c;绝大多数游戏玩家渴望这种互动&#xff0c;愿意投入更多的时间和金钱来玩这种由 AI 驱动的游戏。…

网络编程套接字(三)之TCP服务器简单实现

目录 一、服务端TcpServer 1、tcp_server.hpp 2、tcp_server.cc 二、客户端TcpClient tcp_client.cc 三、服务器和客户端进行通信 四、完整代码 一、服务端TcpServer 首先我们需要对服务端进行封装。我们需要的成员变量有IP地址&#xff0c;端口号port&#xff0c;以及监…

JMM与内存屏障

一、cpu多核并发缓存架构解析 JMM内存模型&#xff1a;java多线程内存模型跟cpu缓存模型类似&#xff0c;是基于cpu缓存模型来建立的&#xff0c;java线程内存模型是标准化的&#xff0c;屏蔽掉了底层不同计算机的区别 JMM数据原子操作 read(读取)&#xff1a;从主内存读取数据…

作为Boss,还在写代码。what?赶紧改掉这个坏毛病

有些创业中的老板&#xff0c;经常或者偶尔也要写代码&#xff0c;我听了很震惊呀&#xff0c;这叫创业吗&#xff1f;这不是给员工打工吗&#xff1f;其他重要的事情谁来干&#xff0c;这个毛病一定要改。 一、比起写代码&#xff0c;你还有更重要的事情要做 作为BOSS和创业…

【Node.js从基础到高级运用】二十五、Node.js中Cluster的作用

引言 Node.js中的cluster模块允许您轻松创建共享服务器端口的子进程。这是一个核心模块&#xff0c;用于在Node.js应用程序中实现多进程架构&#xff0c;以充分利用多核CPU系统的计算能力。 cluster介绍 当您启动一个Node.js应用程序时&#xff0c;默认情况下它运行在单个进程…

怎么设置启用远程桌面? 如何让外网电脑远程本地内网?

如何远程控制电脑&#xff1f;最简单实用的方案是开启电脑系统自带的远程桌面功能&#xff0c;如果涉及跨网、内外网互通&#xff0c;可以同时用快解析内网映射外网。下面是方案的具体实施步骤&#xff0c;供大家参考。 怎么打开设置启用远程桌面&#xff1f; 1.在目标需要远…