嵌入式笔试面试刷题(day5 IIC详解)

news2024/11/15 21:20:55

文章目录

  • 前言
  • 一、IIC需要几根线分别是什么线
  • 二、IIC优势
  • 三、IIC可以挂载多少个从设备,主设备
    • 1.从设备数量
    • 2.主设备数量
  • 四、IIC是全双工还是半双工
  • 五、SDA和SCL为什么配置为上拉开漏输出模式
    • 1.为什么要配置为开漏输出不能是推挽输出
      • a.实现线与功能
      • b.保护设备不会被短路
    • 2.上拉电阻的作用
      • a.确保空闲状态保持高电平
      • b.开漏输出无法主动输出高电平
  • 六、IIC总线空闲状态
  • 七、IIC主机如何获取总线控制权
  • 八、IIC总线仲裁
  • 总结


前言

本篇文章继续讲解嵌入式笔试面试刷题,这篇文章主要讲解IIC协议。

一、IIC需要几根线分别是什么线

I2C(Inter-Integrated Circuit)通信协议需要两根线来进行传输,分别是SDA(Serial Data Line)和SCL(Serial Clock Line)。这两根线是通过总线结构连接各个设备,并在设备之间进行数据和时钟信号的交互。

以下是对这两根线的详细说明:

SDA(串行数据线):SDA线被用于在设备之间传输数据。它是一个双向线路,在通信中用于发送和接收数据位。每个设备都通过开漏输出或三态缓冲器连接到SDA线,以实现数据的传输和接收。

SCL(串行时钟线):SCL线是用于设备之间同步传输数据的时钟信号线。它由主设备控制,通过在SCL线上产生脉冲信号来同步数据传输。所有设备都在SCL上接受和解析来自主设备的时钟信号。

总结起来,I2C通信协议只需要两根线:SDA用于数据传输,SCL用于时钟同步。这种简洁的连接方式使得I2C在多个设备之间进行通信变得非常方便和可靠。

二、IIC优势

1.简单且灵活:I2C仅需要两根线(SDA和SCL)来进行通信,使得硬件连接和布线变得简单。通过设备地址的选择,可以连接多个设备到同一个总线上,提供了更大的系统灵活性。

2.可靠性高:I2C协议采用了主从架构,由主设备控制总线上的数据传输。主设备协调和同步设备之间的通信,避免了设备之间的冲突。此外,I2C协议支持差分传输和硬件确认,提供了数据的可靠性和稳定性。

3.多设备支持:通过I2C协议,可以连接多个设备到同一个总线上。每个设备都有唯一的地址,主设备可以通过指定地址来选择与之通信的设备。这种架构适用于实现多个设备之间的数据交换和控制。

4.低功耗:I2C在基本模式下使用了开漏输出结构,使得设备在非活动状态下可以撤离总线,从而降低功耗。此外,I2C还支持多速率传输,可以根据需求选择适当的速率,进一步降低功耗。

5.应用广泛:I2C协议被广泛应用于各种领域,如消费电子产品、工业自动化、医疗设备等。它可以用于连接传感器、存储器、显示器、控制器和其他智能设备,为系统提供高效的数据交换和控制能力。

三、IIC可以挂载多少个从设备,主设备

1.从设备数量

IIC总线最多可以挂多少个设备由IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址,所以理论上可以挂127个从器件。

这只是一个理论可以挂载从设备的数量,挂载从设备数量还受到电容的影响。

I2C总线上的每个设备都有一定的输入和输出电容。当总线上连接的设备数量增加时,总线电容的总和也会增加。这样,总线的负载能力和传输速度可能会受到影响。

在这里插入图片描述

2.主设备数量

IIC支持多个主设备,但在同一时刻只能有一个主设备处于活动状态。(主设备没有固定的地址)

当一个主设备发起通信时,它会控制整个总线,并与所选的从设备进行数据交换。其他主设备和从设备会保持静默状态,直到当前的主设备释放总线。

一旦当前的主设备完成与从设备的通信,它将释放总线,然后其他主设备可以竞争获取总线控制权,并选择与所选的从设备进行通信。

这种机制确保在同一时刻只有一个主设备在总线上工作,避免冲突和数据干扰。但是,任何主设备都有权利在需要的时候释放总线,并允许其他主设备接管。这种切换主设备的操作可以在需要时进行,以实现多主设备的共享和通信。

四、IIC是全双工还是半双工

I2C总线是一种半双工的,主机可以向从机发送数据,然后等待从机的响应,并且这期间从机不能主动发送数据。只有当主机发送完数据并停止传输时,从机才可以主动发送数据。

五、SDA和SCL为什么配置为上拉开漏输出模式

1.为什么要配置为开漏输出不能是推挽输出

a.实现线与功能

当一个设备拉低SDA后整个SDA总线都是保持低电平的,其他主设备检测到IIC总线上的SDA为低电平后就知道IIC总线被占用了,这样就无法再占用IIC总线了。

b.保护设备不会被短路

在推挽输出模式下,如果两个设备同时试图将数据线拉低和拉高,会导致电平短路以及更高的功耗。而在开漏输出模式下,多个设备同时拉低数据线会形成电平的逻辑“与”操作,保证了数据线电平的正确转换和总线的可靠性。

2.上拉电阻的作用

a.确保空闲状态保持高电平

1.在I2C总线中,需要使用上拉电阻(Pull-Up Resistor)是为了确保总线上的数据线(SDA)和时钟线(SCL)在空闲状态时保持高电平。

2.当总线上没有任何设备发送数据时,数据线和时钟线都应该保持高电平。这是总线的空闲状态,也是通信设备之间识别总线空闲的重要依据。

3.上拉电阻连接在数据线和时钟线上,将其拉高到正常工作电平(通常为Vcc)。这样,在未被主动拉低时,数据线和时钟线都保持高电平,形成总线上的高电平信号。

b.开漏输出无法主动输出高电平

1.在I2C总线中,开漏输出主机设备只能主动拉低数据线(SDA),而对于将数据线拉高的操作,主机设备是无法直接实现的。

2.这是因为开漏输出是基于开漏(Open-Drain)输出结构,它可以通过开漏模式将输出引脚置为低电平(连接至地)或是高阻态(断开连接),但无法将输出引脚直接置为高电平。开漏输出仅能通过外部上拉电阻来将数据线拉高。

六、IIC总线空闲状态

在I2C总线中,空闲状态是指时钟线 (SCL) 和数据线 (SDA) 都处于高电平状态时的状态。在空闲状态下,两条线路都被拉高,并且没有任何通信活动正在进行。

七、IIC主机如何获取总线控制权

1.发送Start Bit:主机设备发送Start Bit信号,这是一个特殊的位模式,用于指示主机希望控制总线并启动数据传输。发送Start Bit时,主机将SCL保持高电平,而SDA由高电平转为低电平。

2.监听总线:主机设备释放SDA线,将其设置为输入模式,然后开始监听总线,等待仲裁的结果。

3.仲裁:如果其他主机设备也尝试发送Start Bit,冲突就会发生,所有参与冲突的主机都会检测到数据位不匹配,并放弃继续发送。仲裁通过硬件自动处理,决定哪个主机能够获得总线控制权。

4.获取总线控制权:仲裁之后,只有一个主机设备会成功获得总线控制权,并继续发送数据。它会根据I2C协议规定的操作步骤发送地址、数据等信息,并等待响应。

5.释放总线:主机设备在完成数据传输后,会发送Stop Bit信号,用于表示传输结束并释放总线控制权。发送Stop Bit时,主机将SCL保持高电平,而SDA由低电平转为高电平。

八、IIC总线仲裁

当存在多个主机设备连接到I2C总线时,在某些情况下可能会发生总线仲裁(Bus Arbitration)。

在I2C总线中,多主机的情况下,每个主机都有能力发送起始位(Start Bit)和控制总线的访问。但是,只有一个主机可以完整地控制总线并发送数据,其他主机必须在等待状态。

当多个主机同时尝试在总线上发送起始位和地址时,会发生仲裁。仲裁的原理如下:

1.当一组主机(包括当前总线上的任何从机设备)同时检测到总线空闲,并尝试发送起始位和地址时,它们会同时开始传输。

2.每个主机都会持续地监测总线上的数据位。如果发送的数据位与总线上的数据不一致(有冲突),则主机会立即停止发送,并将数据线拉低来生成一个应答(ACK)信号。这是一种仲裁信号,表示当前主机放弃总线控制权。

3.接着,剩下的主机会继续发送数据,直到只有一个主机剩下为止。这个主机会完整地控制总线并完成数据传输。

4.通过仲裁机制,I2C总线上的多个主机设备可以在发生冲突时进行协调,并确保只有一个主机继续发送数据,从而避免了数据的冲突和错误。

需要注意的是,I2C总线上的仲裁是由硬件自动处理的,主机设备不需要开发者手动干预。硬件会检测冲突并按照I2C协议的规定进行仲裁操作。

总结

本篇文章主要总结IIC的一些知识点,那么下篇文章会继续为大家讲解。

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

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

相关文章

XXL-JOB执行器集群及分片功能

系统架构图 XXL-JOB职责划分 准备工作 1.下载代码 https://gitee.com/xuxueli0323/xxl-job/tree/2.3.0/ 2.将xxl-job sql执行 3.修改xxl-job-admin数据库链接及账号密码 4.创建日志目录修改日志文件指定输出目录 5.启动项目后访问xxl-job-admin http://localhost:8080/xxl-…

GD32F103*固件库移植μCOS-Ⅲ详细教程与解析(最终版本已上传,可下载)

GD32F103*固件库移植μCOS-Ⅲ详细教程与解析(最终版本已上传,可下载) GD32F103*移植μCOS-Ⅲ详细教程与解析,欢迎指正 文章目录 GD32F103*固件库移植μCOS-Ⅲ详细教程与解析(最终版本已上传,可下载&#x…

GitHub上删除项目后,IDEA分享项目到GitHub提示Remote is already on GitHub

文章目录 一、错误信息二、解决方法1.删除GitHub上的项目2.找到项目里的.git隐藏文件3.找到config文件4.打开config文件,删除[remote "git-test"]及下面两行内容5.继续使用IDEA分享项目到GitHub即可 一、错误信息 二、解决方法 1.删除GitHub上的项目 2.…

亿邦智库天猫:2023年中国家电产业带白皮书(附下载)

关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 中国家电产业市场始于上个世纪80年代,经过近四十年的发展,中国家电产业经历了以产能为主导的“供给驱动〞 阶段、线下网点为主导的“溪道驱动”阶段,现已全面进入以…

Windows批处理基础

一、【echo】显示文本内容 echo | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/echo 显示消息或者打开或关闭命令回显功能。 如果不结合任何参数使用,echo 会显示当前回显设置。 1.1、echo显示文本常用命…

【GEMM预备工作】行主序和列主序矩阵的内存中的连续性,解决理解问题

在内存存储中,默认矩阵是按照行优先储存的,即矩阵的每一列在内存中是连续的。行优先矩阵储存中行数据是不连续的。 而对于列主序的矩阵,是按照列优先储存的,即矩阵的每一行在内存中是连续的。列优先矩阵储存中列数据是不连续的&am…

过滤器的使用和编码过滤器案例

过滤器的使用和编码过滤器案例 案例:设置UTF-8编码

Python - 【socket】 服务端Server异常重启处理简单示例Demo(二)

一. 前言 当socket服务端通信出现异常时,我们需要做重启程序,可根据具体场景做出选择 二. 示例代码 1. 重启服务 import socket import time import sys import tracebackHOST 127.0.0.1 # 服务器IP地址 PORT 8080 # 服务器端口号 BACKLOG 5 #…

七步成诗问题处理法

七步成诗问题处理法 来自麦肯锡咨询公司的经典工具,是各类问题处理的一种方法和逻辑,广泛应用于现代企业管理中,也适用于个人的问题处理。 模型介绍 职场中最重要的能力之一,一定是解决问题的能力。善于解决问题,通常…

台灯应该买什么样的才能护眼?教大家如何挑选护眼灯

家里顶灯太暗了且高度太高,还是原始的LED灯,晚上用着眼睛都有点难受,还好遇到了儿童护眼灯。下面小编为大家介绍下儿童护眼灯哪个牌子好?什么护眼台灯比较专业 护眼台灯怎么样选择 1、照度级别 台灯照度级别分为 A 级和 AA 级。…

Centos虚拟机忘记密码-修改密码

1.重启系统 2.在这个选择界面,按e建 3.找到如下位置,插入init/bin/sh 4.填写完成后按Ctrlx引导启动 5.输入mount -o remount, rw / (注意空格) 6.重置密码 出现以下为重置成功 7.执行touch /.autorelabel 8.退出exec /sbin/init 9.输入你的新密…

多态的使用

1、认识多态 面向对象三大特征:封装、继承、多态 什么是多态? 同类型的对象,表现出不同的形态。(对象的多种形态。) 多态的表现形式? 父类类型 对象名称 子类对象&#xff1…

SpringBoot项目-个人博客系统的实现

1.博客系统简要分析 一共有6个网页,分别是博客列表页面,博客详情页面,发布博客页面,博客登陆页面,博客更新页面,修改个人信息页面(暂未实现),我们要实现的功能有&#xf…

什么是 MySQL 的“回表”?怎么减少回表的次数?

什么是 MySQL 的“回表”?怎么减少回表的次数? 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,BTree 嘛! BTree 是什么?那你得先明白什么…

使用Python将图像转换为PDF:一次性解决您的批量转换需求

导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…

AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载 简介 现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑…

Linux进程(二)

文章目录 进程(二)Linux的进程状态R (running)运行态S (sleeping)阻塞状态D (disk sleep)深度睡眠T(stopped)状态X(dead)状态Z&#x…

2024年浙师大MBA项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段,不少考生开始持续将注意力集中在备考的规划中!杭州达立易考教育整合浙江省内的MBA项目信息,为大家详细梳理了相关报考参考内容,方便大家更好完成择校以及针对性的备考工作。本期…

C语言基础知识点一

C语言基础知识点一&#xff1a; 1.数据类型 2.bool类型&#xff1a; 使用bool时时&#xff0c;需要增加<stdbool.h>头文件。 说明&#xff1a;bool 类型只有非零&#xff08;true&#xff09;和零&#xff08;false&#xff09;两种值。 如: if&#xff08;-1&#xf…

Qt下开发基于QGIS的应用程序

Qt下开发基于QGIS的应用程序 目的版本说明1、Qt的安装2、MSVC套件与Windows 10 SDK的下载3、QGIS开发有关的库文件下载4、环境搭建5、QGIS开发环境搭建6、展示网页地图 目的 由于有在背景地图上进行动态轨迹&#xff08;曲线&#xff09;显示的需要&#xff0c;故采用QtQGIS的…