iic总线从机仲裁_I2C总线的仲裁问题

【问】有网友问关于I2C总线的仲裁问题:

The I2C-bus specification的第13页有这样的话:

In other words, arbitration isn’t allowed between:

* A repeated START condition and a data bit

* A STOP condition and a data bit

* A repeated START condition and a STOP condition.

Slaves are not involved in the arbitration procedure.

我现在遇到了一个问题,假设说有两台主机A和B同时发送数据给C,但是A发送一个字节的数据,B发送两个字节的数据。并且他们第一个字节的数据都相同。即A发送的是" start+C地址+字节1+stop",B发送的数据是"start+C地址+字节1+字节2+stop".由于第一个字节相同所以在第一个字节传送完后仲裁过程没有结束。这就遇到了规范上所讲到的一个停止位和一个数据位的情况,那么是不应该发生仲裁的。如果说B发送的第二个字节的第一位是1,那么“线与”后SCL和SDA线实际上就表示了stop信号,如果不仲裁则B继续发数据,而此前C已经收到了一个停止信号。C停止了,那么B所发送的第二个字节的数据根本就没有成功。有那位大虾可以帮我解释一下,应该怎么办。多谢了。另外如果两个主机,一个发送停止条件,一个发送重复起始条件,如果不仲裁,总的效果就是产生一个低电平的数据,那么从机就会把这个数据接收过去,但事实上这并不是两个主机期望发送的数据,I2C总线的时序就乱了。

【答】I2C规范的这段话的含义可以译为:

也就是说,仲裁不能在下面情况之间进行:

*重复起始条件和数据位。

*停止条件和数据位。

*重复起始条件和停止条件。

从机不被卷入仲裁过程。

翻阅《I2C总线规范》,对于I2C总线的仲裁有比较详细地论述。个人认为需要明白其的先决条件:

1、I2C总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。

2、主机只能在总线空闲的时侯启动传送。两个或多个主机可能在起始条件的最小持续时间tHD;STA内产生一个起始条件,结果在总线上产生一个规定的起始条件。

3、当SCL线是高电平时,仲裁在SDA线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。

然后,进一步获得其的判定条件:

1、仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假设主机是发送器),或者比较响应位(假设主机是接收器)。

2、I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。

3、在串行传输过程中时,一旦有重复的起始条件或停止条件发送到I2C总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件,也就是开始那段话的含义。

4、此外,如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器件。那么,丢失仲裁的主机必须立即切换到它的从机模式

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

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

相关文章

jvm 加载class文件过程

jvm 加载class文件分为装载-链接-初始化三个过程。 load -------->link verify prepare resolve ---------->initialize (类加载过程) bootstrap class Loader | | extenstion class loader | | system class Loader | | ----------- user-define user-define…

dvt高危患者的护理措施_dvt的预防及护理

DVT的预防措施高危患者预防深静脉血栓的护理措施一、深静脉血栓的预防对象 1.大手术病人:三类、四类手术病人。 2.高危患者:①年龄≥41 岁;②肥胖;③妊娠;④盆腔手术或关节置 换手术;⑤急诊剖腹产手术&…

java环境配置—配置Tomcat8环境

先安装JDK,配置好jdk环境后再配置Tomcat 8配置环境变量:TOMCAT_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_BASE:D:\Program Files\apache-tomcat-8.0.28修改CLASSPAT…

加密解密_作业-加密解密程序

# 加密解密程序作业:自己写一个加密程序,能够加密的内容是英文和汉字。同时加密并且解密就是说,一段话中既有中文又有英文,标点符号不用处理。加密规则,获取ascii码数字,中间用|分割# 思路提示:…

详解Objective-C中委托和协议

Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托。 AD:【活动】Web和AP…

svn拉取文件合并_SVN分支(branches)合并(merge)到主干(trunk)和拉取分支(tag)

在一个团队协作且不断迭代更新的项目开发中,经常会使用到svn的一些分支主干的方法,这样的好处是使得各个版本之间可独立开发,大多数情况下是branch分支主要用来开发新的功能和版本迭代,主干上面及时快速的修复线上的一些bug和优化…

Unable to load native-hadoop library解决思路

最近试着搭建Hadoop,我使用的操作系统是Centos6.5,Hadoop版本是2.6.0。 在安装过程中总是出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。 解决…

ios13苹方字体ttf_字体 | iOS1013 SF Compact Rounded 英文 By alex

最近沉迷游戏,差点忘记了这个英文。嗨呀,问就是在玩了,啊不,在做了。这个英文来自推特alexman,原版包含100和85大小,本次分享新增到了100-60,每5%一个大小。gzh分享已经获得alex授权&#xff0c…

Rust 中的继承与代码复用

Rust 中的继承与代码复用 在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的。 C的继承 首先看看c中是如何做的。 例如要做一个场景结点的Node类和一个Sprite类继承它。 定义一个node基类…

怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...

原标题:【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像效果图先放上1.新建一个白色的背景,这里是1080*720的。然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐变参数:黑白渐变,径向&#xff0…

10双屏鼠标过不去_灵耀X2 Duo双屏笔记本是怎样“炼”成的?对话华硕笔记本设计团队...

2020年的CES上,华硕推出了一款灵耀X2 Duo笔记本,灵耀X2 Duo采用了和灵耀X2 Pro相同的屏幕技术,C面同样采用了一块ScreenPad Plus副屏,机身也更轻更薄。如今灵耀X2 Duo的处理器升级至英特尔第十代酷睿,正在参与“618”大…

powershell加win的dns服务器,解决网站负载均衡问题

用我发明的powershell填坑法,加windows的dns服务器。从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题。 ------------------------win2012r2中,用powershell管理dns服务器的,命令列表-------------------------------- 共…

csv python 只写一次_在Python CSV Writer循环中写入一次头

下面是一个scraper,它遍历两个网站,获取团队的花名册信息,将信息放入一个数组中,然后将数组导出到CSV文件中。一切都很好,但唯一的问题是每次scraper移动到第二个网站时,csv文件中的writerow头会重复出现。…

理解 OpenStack 高可用(HA) (6): MySQL HA

本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)Neu…

聚类中心坐标公式如何使用_如何使用CAD看图软件来测量坐标?

当我们在拿到图纸的时候,经常会需要使用测量工具,再次测量dwg图纸上的数据。浩辰CAD看图王软件,不仅可以看图,也可以编辑图纸,测量功能更是很方便,当我们在测量的时候,如何测量图纸上点的坐标呢…

linunx 定位最耗资源的进程

[oracletopbox bdump]$ ps -ef|grep “(LOCALNO)”|sort -rn -k 8,8|head -10oracle 9402 1 67 09:18 ? 00:43:09 oracletopbox (LOCALNO)oracle 15524 12159 0 10:21 pts/2 00:00:00 grep (LOCALNO)oracle 15519 1 0 10:20 ? 00:00:00 or…

德利捷读码器设置软件_S7-1500PLC+变频器+编码器组成位置控制系统

PLC学习中组成部分:位置控制、力矩控制、惯量控制。位置控制模式S7-1500 的运动控制功能支持轴的定位和移动,是 S7-1500 系列 CPU 众多集成功能中的重要组成部分。运动控制功能支持旋转轴、定位轴、同步轴和外部编码器等工艺对象。根据PLC-Open&#xff…

解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给…

汇编语言基础知识摘要(《汇编语言》王爽)第 1 / 17 章

CPU,是计算机的核心部件,它控制整个计算机的运作并进行运算。存储器,即内存,存放CPU需要的指令和数据。寄存器,是CPU中可以储存数据的器件,一个CPU中有多个寄存器。汇编语言由以下3类指令组成: …

vue 添加全局组件_自定义vue2.0全局组件(下篇)

在上篇中,老K为大家介绍了一个初级自定义按钮组件的编写方法。虽然能用,但是还不算完美,可扩展性不够强大。在这一篇中,老K继续为大家完善这个按钮组件。启动命令窗口, 进入在上篇中我们搭建的vue目录中,输…