嵌入式面试-回答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均为低电平。

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

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

相关文章

轻薄手机,没有一款新机能超越小米11青春版,小米和苹果也没有

打算换手机,但是不喜欢半斤机,于是找了几款轻薄手机,却发现如今的轻薄手机都太重了,还不如3年前的小米11青春版,可见小米11青春版是一款相当能打的手机。 小米11青春版搭载骁龙778芯片,重量只有159克&#…

傅里叶变换的本质。傅里叶案例。数字信号和模拟信号应用数字信号和模拟信号区别和优势。

目录 傅里叶案例 案例:音频降噪处理 案例:图像 积分和求和的关系

《游戏系统设计十二》灵活且简单的条件检查系统

目录 1、序言 2、需求 3、实现 3.1 思路 3.2 代码实现 4、总结 1、序言 每个游戏都有一些检查性的任务,在做一些判断的时候,判断等级是不是满足需求。 比如如下场景:在进入副本的时候需要检查玩家等级是否满足,满足之后才…

【npm淘宝源最新解决方案】 https://registry.npm.taobao.org此地址已失效

【npm淘宝源最新解决方案】 https://registry.npm.taobao.org此地址已失效 最新淘宝源: npm config set registry https://registry.npmmirror.com

YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR -gui界面-交互式图形化界面

往期热门博客项目回顾:点击前往 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 AI健身教练-引体向上…

js-pytorch:开启前端+AI新世界

嗨, 大家好, 我是 徐小夕。最近在 github 上发现一款非常有意思的框架—— js-pytorch。它可以让前端轻松使用 javascript 来运行深度学习框架。作为一名资深前端技术玩家, 今天就和大家分享一下这款框架。 往期精彩 Nocode/Doc,可…

JWT和Redis比较选型

一、Session 二、JWT 三、比较 基于JWT(JSON Web Token)和Session身份验证之间的争论是现代 Web 开发中的一个要点。 JWT 身份验证:无状态。服务器生成一个令牌,客户端存储该令牌并随每个请求一起提供,服务端仅需按照…

LeetCode in Python 200. Number of islands (岛屿数量)

岛屿数量既可以用深度优先搜索也可以用广度优先搜索解决,本文给出两种方法的代码实现。 示例: 图1 岛屿数量输入输出示意图 方法一:广度优先搜索(bfs) 代码: class Solution:def numIslands(self, grid):if not grid:return 0…

IO综述·

阻塞模式 读写数据会发生阻塞现象。当用户线程发起IO请求之后,内核会查看数据检查就绪。如果没有就绪就会等待数据就绪。而用户线程会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户…

使用MyBatis插入数据并返回自动生成的ID

在使用MyBatis进行数据库操作时,经常会遇到需要插入数据并返回自动生成的主键ID的情况。为了解决这个问题,我们可以使用MyBatis提供的useGeneratedKeys和keyProperty属性。本文将介绍这两个属性的作用以及如何使用它们来实现插入数据并返回自动生成的ID。…

KMP算法(Python)

进阶的做法就是KMP算法,当然暴力也能ac。 KMP主要用一个nex列表,nex[i]存储(模式串needle中)从第0个到i个字符串s中的一个相等前后缀的最大长度。比如说对于aabaa来说,最大长度应该是(前缀aa)和…

Android12中JAVA项目中proto文件的编译方式

一. 起因 最近的工作有涉及到将原来Android9平台下的java工程防到Android12中编译,结果发现在Android9中可以编译的工程,没有修改Android.bp,在Android12中编译失败了,原因是java文件中以来项目中的proto文件生成的java类&#xf…

Linux下SPI设备驱动实验:验证读写SPI设备中数据的函数功能

一. 简介 前面文章实现了 SPI设备驱动框架,并在此基础上添加了字符设备驱动框架,实现了读 / 写SPI设备中数据的函数,文章如下: Linux下SPI设备驱动实验:向SPI驱动框架中加入字符设备驱动框架代码-CSDN博客 Linux下…

算法打卡day51|单调栈篇02| Leetcode 503.下一个更大元素II、42. 接雨水

算法题 Leetcode 503.下一个更大元素II 题目链接:503.下一个更大元素II 大佬视频讲解:503.下一个更大元素II视频讲解 个人思路 这道题和之前496.下一个更大元素 I 差不多,只是这道题需要循环数组,那就在遍历的过程中模拟走两遍nums就行&a…

mac修改/etc/profile导致终端所有命令不可使用

原因:配置docker环境的时候修改了/etc/profile,没想到导致悲惨事情,输入什么命令都是 Command not found 可恶!!!试了好久,最终这样搞定! 1-终端输入命令 因为sudo命令也不能直接…

本地主机搭建服务器后如何让外网访问?快解析内网端口映射

本地主机搭建应用、部署服务器后,在局域网内是可以直接通过计算机内网IP网络地址进行连接访问的,但在外网电脑和设备如何访问呢?由于内网环境下,无法提供公网IP使用,外网访问内网就需要一个内外网转换的介质。这里介绍…

使用Python实现时间序列预测模型

时间序列预测是一种重要的数据分析技术,它可以帮助我们预测未来的趋势和模式。在本文中,我们将介绍时间序列预测的基本原理和常见的预测模型,并使用Python来实现这些模型。 什么是时间序列预测? 时间序列预测是根据过去的观测数…

在PostgreSQL中如何创建和使用自定义函数,包括内置语言(如PL/pgSQL)和外部语言(如Python、C等)?

文章目录 一、使用内置语言 PL/pgSQL 创建自定义函数示例代码使用方法 二、使用外部语言 Python 创建自定义函数安装 PL/Python 扩展示例代码使用方法 三、使用外部语言 C 创建自定义函数编写 C 代码编译为共享库在 PostgreSQL 中注册函数注意事项 总结 PostgreSQL 是一个强大的…

前端数据类型大全及其区别总结

前端数据类型大全及其区别总结 基本数据类型引用数据类型Null 与 Undefined 的区别Map 与 Object 的区别Set 与 Array 的区别WeekMap 与 Map 的区别WeekSet 与 Set 的区别 基本数据类型 Number(数值类型),用于表示数字,包括整数和…

CSS基础:table的4个标签的样式详解(6000字长文!附案例)

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…