在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 2787|回复: 5

[求助] 请教一个I2C的问题,在官方文档中提到的仲裁时没有定义的情况

[复制链接]
发表于 2012-1-8 15:52:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 coolzc 于 2012-1-8 20:38 编辑

在一个i2c最新的英文文档下有这么一段描述:There is an undefined condition if the arbitration procedure is still in progress at the
moment when one master sends a repeated START or a STOP condition while the other
master is still sending data. In other words, the following combinations result in an
undefined condition:
• Master 1 sends a repeated START condition and master 2 sends a data bit.
• Master 1 sends a STOP condition and master 2 sends a data bit.
• Master 1 sends a repeated START condition and master 2 sends a STOP condition.

现在问题是这样的,有两个主机同时寻址一个从器件,两个主机都没有被仲裁出结果,接着又发送了一个同样的数据,这两个主机仍旧没有被仲裁出来。问题来了,接下去A主机发送重复起始位(需要改变此时的传输方向),B主机发送下一个数据,那么在总线上,A发送的这个起始位和B发送的数据位就会同时出现,这时候总该怎么处理呢。因为重复起始位是一个高电平到低电平的过程,而数据则是稳定的低电平或者高电平,这样子应该没法仲裁吧?

本人需要写FPGA的IP core,但是i2c协议又没有对这种情况的出现做出具体的解决方案,该怎么处理呢。不同主机发送的重复起始位,数据位,停止位,同时出现在总线上到底该如何处理呢,求解啊~~~~~~~~~我快郁闷了一个月了。
发表于 2012-1-20 00:23:27 | 显示全部楼层
回复 1# coolzc

如果兩個master都是你自己設計的話,在傳送之前可以先detect bus是否為 idle 狀態後再動作。
 楼主| 发表于 2012-1-30 10:14:12 | 显示全部楼层
回复 2# jarodz
对的,所有的主机在启动传输之前都会对总线进行检测,如果总线空闲,这些主机才会启动传输。
但是这并不能解决我所说的那个问题。
多个主机可能同时启动传输,因为总线空闲了,所有的主机都能检测到,他们会认为这时候总线是空闲的,自己能够占据总线进行传输,参与传输的主机并不能事先得知其他的主机是否也要启动传输,所以才引入仲裁这个概念,在传输中逐个仲裁掉自己发送的数据与总线上数据不符合的主机。
发表于 2012-1-30 15:03:16 | 显示全部楼层
如果系統上的master都是自己的,我想到的是,
可以利用先拉 SCL 的 low 的長短來決定優先權。
 楼主| 发表于 2012-2-8 22:41:43 | 显示全部楼层
回复 4# jarodz


   看来只能引入些自定义的方法了
发表于 2012-3-11 13:01:54 | 显示全部楼层
我也没有想明白这个地方。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 02:04 , Processed in 0.019371 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表