首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在I2C总线中,从设备如何知道数据是否属于它们

取决于I2C协议的工作机制。I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接多个设备,其中包括主设备(Master)和从设备(Slave)。

在I2C总线上,每个从设备都有一个唯一的地址,用于标识自己。主设备通过发送包含从设备地址的数据包来与特定的从设备通信。从设备在总线上监听传输的数据包,并根据地址来判断是否属于自己。

当主设备发送数据包时,首先会发送一个起始信号,然后跟随着从设备的地址和读/写位。从设备在总线上检测到自己的地址与读/写位匹配时,就知道数据是属于它的。如果地址和读/写位不匹配,从设备会忽略这个数据包。

对于多个从设备的情况,每个从设备的地址应该是唯一的,以确保数据被正确地发送到目标设备。如果多个从设备的地址相同,可能会导致数据冲突和通信错误。

总结起来,从设备通过检测地址和读/写位来判断数据是否属于它们。这种机制可以确保数据被正确地发送到目标设备,从而实现可靠的通信。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。您可以通过腾讯云官方网站(https://cloud.tencent.com/)了解更多关于腾讯云的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一文带你读懂I2C协议

如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。 异步通信: 接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。...地址位由主机发送,从设备负责接受并识别该地址是否位自己地址。 5.3 读写位 由于I2C是半双工通讯,所以设备需要确定数据传输的方向,故引入了读写位。...总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。...在I2C主设备进行读写操作的过程中,主设备在开始信号后控制SCL产生8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。...同样,当I2C进行读操作,I2C从设备应答后输出数据,如果在这个时刻I2C主设备异常复位而此时I2C从设备输出的数据位正好为0,也会导致I2C总线进入死锁状态。

9.4K23

Linux的I2C驱动框架分析

如I2C总线上连接的I2C从设备都有一个标识自己的设备地址,由这个设备地址来确定主设备发过来的命令是否该由它来响应。 驱动 简单的说驱动代表着操作设备的方式和流程。...(2)I2C总线驱动:I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。...(3)I2C设备驱动:I2C设备驱动(也称为客户驱动)是对I2C硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的I2C适配器上,通过I2C适配器与CPU交换数据。 ?...); } 该函数主要实现其I2C底层的操作 4.GC0328摄像头I2C实例分析 ---- 对于摄像头驱动程序,首先要知道如何让摄像头能够正常工作。...到这里,一个I2C完整的传输流程就完成了。 5.总结 ---- 对于I2C完整的传输协议,最重要的是弄清楚总线驱动程序的框架,因为I2C也是属于总线框架。

4.9K11
  • platform device

    ————————– 从硬件的角度来说,集成在嵌入式芯片内部的外设离CPU最近,它们不依附于GPIO或者PCI,I2C此类的 总线,它们挂接在soc内存空间,cpu靠操作这些soc内存空间来控制这些片内的外设...从驱动的角度,为了获取这些挂接在soc内存空间的外设的资源,linux系统专门定义了一类总线来 挂接它们。...I2C也是一样,在平台 探测函数中初始化I2C设备的资源,然后注册i2c_adapter。...如何使用platform device ———————– 首先,platform device描述的是cpu的片内外设的资源,,属于板级配置,所以习惯上需要在系统初 始化阶段(一般在...驱动程序不知道当前的系统用的是什么显示设备(可能还不是LCD)以及这些LCD屏的参数都是些什么 ,所以这些参数在板级数据里面定义起来,并且被被platform_data指向以便于驱动程序读取。

    59920

    万变不离其宗之I2C总线要点总结

    比如主设备已经接受到足够多的数据,不希望从设备发送更多的数据时,就可以 NACK 从设备,这样从设备就会停止发送 时钟同步与仲裁 时钟同步:两个主机可以同时开始在空闲总线上进行传输,并且必须有一种方法来确定控制总线并完成其传输的方法...节点发送 1 个位后,回读比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA 线的仲裁可以保证 I2C 总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。...主机实际上不知道有一个或多个设备响应时确认了广播数据(不确定有多少个 ACK)。每个能够处理此数据的从机接收器都会确认第二个字节和随后的字节。无法处理这些字节的从机将不应答从而忽略。...由于 I2C 主设备事先不知道该消息必须传输到哪个从设备,故利用通用广播地址及通用呼叫命令并将自身的地址放在高 7 位,从而标识总线上发送通用硬件呼叫的设备 ID。...除了在 Hs 模式传输期间不执行仲裁和时钟同步外,与 F/S 模式系统保持相同的串行总线协议和数据格式。那么如此高速是如何做到的呢?

    2.3K60

    终于搞清了:SPI、UART、I2C通信的区别与应用!

    电子设备之间的通信就像人类之间的交流,双方都需要说相同的语言。在电子产品中,这些语言称为通信协议。 之前有单独地分享了SPI、UART、I2C通信的文章,这篇对它们做一些对比。...而在I2C和UART中,数据以数据包的形式发送,有着限定位数。 在SPI设备中,设备分为主机与从机系统。主机是控制设备(通常是微控制器),而从机(通常是传感器,显示器或存储芯片)从主机那获取指令。...只需要两条线即可在两个UART之间传输数据,数据从发送UART的Tx引脚流到接收UART的Rx引脚: UART属于异步通讯,这意味着没有时钟信号,取而代之的是在数据包中添加开始和停止位。...以下是一些利弊,可帮助您确定它们是否适合您的项目需求: 优点 仅使用两根电线 无需时钟信号 具有奇偶校验位以允许进行错误检查 只要双方都设置好数据包的结构 有据可查并得到广泛使用的方法 缺点 数据帧的大小最大为...以下是一些利弊,可帮助您确定它们是否适合您的项目需求: 优点 仅使用两根电线 支持多个主机和多个从机 每个UART的波特率必须在彼此的10%之内 硬件比UART更简单 众所周知且被广泛使用的协议 缺点

    3K32

    Linux应用开发【第十二章】I2C编程应用开发

    I2C总线结构如下图: ​ 传输数据时,我们需要发数据,从主设备发送到从设备上去;也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。 ​...I2C总线,比如在我们的100ask_imx6UL板子中就有eeprom和AP3216两个外设,它们在I2C总线中充当的都是I2C从机的角色,它们和主控芯片imx6中的I2C控制器1都是以并联的方式挂在这个...下面举例说明主要的IOCTL命令: I2C_SLAVE_FORCE 设置I2C从设备地址(只有在该地址空闲的情况下成功) I2C_SLAVE_FORCE 强制设置I2C从设备地址(无论内核中是否已有驱动在使用这个地址都会成功...第二,数据线和时钟信号线是否有接反的情况。 ​ 第三,I2C的通信速率是否超过了设备所支持的最高速度。 ​ 第四,检查外部I2C设备与操作的I2C控制器是否挂在了同一条I2C总线上。 ​...第五,检查操作的I2C外设地址是否正确。 ​ 第六,检查I2C总线上是否有多个相同设备地址的从机设备,导致通信冲突。 ​ 第七,操作的I2C外设是否处于写保护状态,写保护状态是无法写入数据的。 ​

    3.9K31

    IIC通信协议,搞懂这篇就够了

    I2C(IIC)属于两线式串行总线,由飞利浦公司开发用于微控制器(MCU)和外围设备(从设备)进行通信的一种总线,属于一主多从(一个主设备(Master),多个从设备(Slave))的总线结构,总线上的每个设备都有一个特定的设备地址...,以区分同一I2C总线上的其他设备。...的各种高低电平变化来实现I2C协议,只需要将I2C协议中的可变部分(如:从设备地址、传输数据等等)通过函数传参给控制器,控制器自动按照I2C协议实现传输,但是如果出现问题,就只能通过示波器看波形找问题。...从设备地址 从设备地址用来区分总线上不同的从设备,一般发送从设备地址的时候会在最低位加上读/写信号,比如设备地址为0x50,0表示读,1表示写,则读数据就会发送0x50,写数据就会发送0x51。...数据有效性 I2C总线进行数据传送时,在SCL的每个时钟脉冲期间传输一个数据位,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化

    3.1K11

    28.Linux-IIC驱动(详解)

    应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器, 并控制I2C设备的工作方式 显然,它和前几次驱动类似, I2C也分为总线驱动和设备驱动,总线就是协议相关的,它知道如何收发数据,...但不知道数据含义,设备驱动却知道数据含义 1.2 I2C驱动架构,如下图所示: ?...总线对应一个编号,下文中称为I2C总线号.这个总线号的PCI中的总线号不同.它和硬件无关,只是软件上便于区分而已....里面帮我们做好了IIC通信的架构,就是不知道发什么内容 我们进入driver/i2c/chips中,看看eeprom设备驱动是如何写的 参考: driver/i2c/chips/eeprom.c 6.还是首先来看它的...= eeprom_detach_client, //与总线驱动的适配器解绑,分离这个IIC从设备 }; 如下图所示, eeprom_driver结构体的ID成员在i2c-id.h中,里面还定义了大部分常用

    3.1K80

    Linux系统驱动之I2C协议

    硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。 2....1表示读) 从设备回应(用来确定这个设备是否存在),然后就可以传输数据 从设备发送一个字节数据给主设备,并等待回应 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据...数据发送完之后,主芯片就会发送一个停止信号。 下图:白色背景表示"主→从",灰色背景表示"从→主" 3.3 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。...主设备不驱动三极管 从设备决定数据,要发出回应信号的话,就驱动三极管让SDA变为0 从这里也可以知道ACK信号是低电平 从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使用上拉电阻的原因...当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。 对于IIC协议它只能规定怎么传输数据,数据是什么含义由从设备决定。

    2.9K20

    SPI、I2C、UART、I2S、GPIO、SDIO、CAN总线

    I2C总线用两条线(SDA和SCL)在总线和装置之间传递信息,在微控制器和外部设备之间进行串行通讯或在主设备和从设备之间的双向数据传送。...总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。...在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。...I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。...多路微控制器能在同一个I2C总线上共存这两种线属于低速传输。 而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。

    1.8K10

    SOC设计之MIPI I3C

    因此,I3C接口具有: 使用推拉式高达12.5MHz的双线串行接口 旧版 I2C 设备在同一总线上共存(有一些限制) 动态寻址,同时支持传统 I2C 设备的静态寻址 传统I2C消息传递 类似于I2C的单数据速率消息传递...它们被发送到总线上的所有I3C 从设备 直接消息,它们被发送给特定的从设备 基本原理 I3C 支持多种通信格式,全部共享一个两线接口。...HDR模式消息,它在每个等效时钟周期中实现更高的数据速率(I3C基本版中不支持) I2C消息传递给传统的I2C从设备。 从设备向主设备发起的 START 请求,例如发送带内中断或请求主设备。...在典型的应用程序中,当前主设备是总线上的I3C设备,它发送大部分的I3C命令(CCC),地址可以是所有从设备(广播CCC),也可以是特定的单个从设备(定向CCC)。...SDA 允许从设备控制数据线并启动中断。(SPI和I2C只能通过使用第三条专用线提供从设备中断。) I3C 从设备可以在总线空闲时请求中断。

    1.2K20

    IIC支持热拔插吗?(附有详细CW32 IIC协议解读)

    好吧,要知道它是一种串行协议。半双工通信,一次只有一个控制器或目标设备在总线上发送数据。半的意思就是,一个时间上只有一个任务。 IIC 控制器设备启动和停止通信,从而消除了潜在的总线争用问题。...但是抱歉,在软件上并没有这个功能。 I2C只能做到硬件准许热插拔,但软件加载无法自动实现,I2C标准中没有相关内容,需要在底层引入直接控制才行。 这里面的问题是,让主设备知道某个从设备是否加载了。...主机根据从机地址寻址从机,从机通过地址比较器自动检测主机发送的 7bit 寻址地址与本机地址是否匹配,以确定是否与主机通信。从机是自己看是不是在喊自己。...如果符合 4 个地址中的任何一个,则认为地址匹配,同时 I2C 中断标志位 I2C_CR.SI 会被置 1,并产生一个中断请求。先自己看,如何和主机说,有人喊我。...在从机发送数据过程中,如果自身的 I2C_CR.AA 应答控制位被应用程序清零,则从机在发送完最后 1 字节有效数据后,将自身切换为未寻址从机接收模式,并释放 SDA 总线,主机从总线上读数据将得到 0xFF

    10710

    i2c时序图的详细讲解

    写时序:   开始信号:主机+从设备地址+写命令,从机应答,应答成功,表示有这个设备,然后主机+设备内部寄存器地址,此时不用再加写命令控制字,从机应答,应答成功,表示设备内有这个地址,主机写入数据,从机应答...,是否继续发送,不发送的话,发送停止信号P。   ...读时序:   要想读设备,首先要知道将要所读取设备的地址告诉从设备,从设备才能将数据放到(发送)SDA上使主设备读取,从设备将数据放入SDA上的过程,由硬件主动完成,不用人为的写入。...然后主机继续发出:写入从机地址,然后+读命令,从机应答,应答成功,此时便可以读取数据了,从设备已经将数据放入到SDA上了。地址跟设备已经验证了,不用再进行验证。   ...如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假设主机是发送器),或者比较响应位(假设主机是接收器)。   I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。

    6.7K20

    如何从10亿数据中快速判断是否存在某一个元素?今天总算知道了

    布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率而且删除困难。...如何从10亿数据中快速判断是否存在某一个元素?今天总算知道了 所以通过上面的现象,我们从布隆过滤器的角度可以得出布隆过滤器主要有 2 大特点: 如果布隆过滤器判断一个元素存在,那么这个元素可能存在。...如何从10亿数据中快速判断是否存在某一个元素?今天总算知道了 第一部分输出的 mightContainNum1一定是和 for 循环内的值相等,也就是百分百匹配。...这个 3% 的误判率是如何来的呢?我们进入创建布隆过滤器的 create 方法,发现默认的fpp就是 0.03: ? 如何从10亿数据中快速判断是否存在某一个元素?...如何从10亿数据中快速判断是否存在某一个元素?今天总算知道了 得到的结果是 7298440 bit=0.87M,然后经过了 5 次哈希运算。

    1.3K20

    Linux 设备和驱动的相遇

    各级设备的展开 内核启动的时候是一层一层展开地去寻找设备,设备树之所以叫设备树也是因为设备在内核中的结构就像树一样,从根部一层一层的向外展开,为了更形象的理解来看一张图: ?...IP 外设有具体的总线,如 I2C 总线、SPI 总线,对应的 I2C 设备和 SPI 设备就挂在各自的总线上,但是在 soc 内部只有系统总线,是没有具体总线的。...下面我们按照 platform 设备、i2c 设备、spi 设备的顺序探究设备是如何一层一层展开的。...2.展开 i2c 设备 有经验的小伙伴知道在写 i2c 控制器的时候肯定会调用 i2c_register_adapter() 函数,该函数的实现如下(kernel/drivers/i2c/i2c-core.c...我们先看设备树里的 soc 描述信息,红色标注的代表着寄存器地址用几个数据量来表述,绿色标注的代表着寄存器空间大小用几个数据量来表述。

    2.5K40

    i2c总线的通信协议(i2c通信协议原理)

    然后将SDA拉低,这样,所有slave设备就会知道传输即将开始。...SDA拉低,则说明接收设备可能没有收到数据(如寻址的设备不存在或设备忙)或无法解析收到的消息,如果是这样,则由master来决定如何处理(stop或repeated start condition)。...所以更完整的I2C数据传输时序图为: 10-bit地址空间: 上面讲到I2C支持10-bit的设备地址,此时的时序如下图所示: 在10-bit地址的I2C系统中,需要两个帧来传输...注意,10-bit地址的设备和7-bit地址的设备在一个系统中是可以并存的,因为7-bit地址的高5位不可能是b11110。...一个master每发送一个bit数据,在SCL处于高电平时,就检查看SDA的电平是否和发送的数据一致,如果不一致,这个master便知道自己输掉仲裁,然后停止向SDA写数据。

    1.9K10

    20.Linux-IIC驱动(详解)

    应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器, 并控制I2C设备的工作方式   显然,它和前几次驱动类似, I2C也分为总线驱动和设备驱动,总线就是协议相关的,它知道如何收发数据...,但不知道数据含义,设备驱动却知道数据含义 1.2 I2C驱动架构,如下图所示: ?   ...如上图所示,每一条I2C对应一个adapter适配器,在kernel中, adapter适配器是通过struct adapter结构体定义,主要是通过i2c core层将i2c设备与i2c adapter...,里面帮我们做好了IIC通信的架构,就是不知道发什么内容   我们进入driver/i2c/chips中,看看eeprom设备驱动是如何写的   参考: driver/i2c/chips/eeprom.c...= eeprom_detach_client, //与总线驱动的适配器解绑,分离这个IIC从设备 };   如下图所示, eeprom_driver结构体的ID成员在i2c-id.h中,里面还定义了大部分常用

    2K20

    I2C spec 总结

    一般认为 I2C 总线上,低于 0.3Vdd 为低电平,高于 0.7Vdd 为高电平。 I2C 协议中每个挂到总线上的设备都有独一无二的静态设备地址。...主机从从机读数据 10、补充 I2C 不支持从设备在 SCL 和 SDA 总线上发起一个中断,通知主设备来读数据。...这时,从设备会主动控制时钟线把它拉低!直到数据准备好之后再释放时钟线,把控制权交还给 MASTER。这也是 I2C 通信系统中,从机唯一能控制总线的时候!...节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。 SDA 线的仲裁可以保证 I2C 总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。...这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,而主节点1在转为从节点后继续接收数据,同样也没有丢掉 SDA 线上的数据。因此在仲裁过程中数据没有丢失。

    1.4K10

    单片机各种通信协议详解

    一、IIC通信协议 (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用...I2C总线特征总结 I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信...,在通常的应用中, 我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。...I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传。 二、SPI 协议 1....此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一个控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。

    3.8K32

    Linux系统驱动之使用GPIO模拟I2C的驱动程序分析

    回顾I2C协议 1.1 硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。...1.2 I2C信号 I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。...在9个时钟里, 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据; 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据。...双方设备中,某个设备发送数据时,另一方怎样才能不影响SDA上的数据?...主设备不驱动三极管 从设备决定数据,要发出回应信号的话,就驱动三极管让SDA变为0 从这里也可以知道ACK信号是低电平 从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使用上拉电阻的原因

    3.2K32
    领券