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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3414|回复: 13

[求助] 请教一个关于i2c协议的问题

[复制链接]
发表于 2021-12-6 11:42:11 | 显示全部楼层 |阅读模式

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

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

x
请教诸位大拿一个关于i2c协议的问题:

i2c协议在传输时,由于slave要求在某些时间不能接受数据,因此目前master的做法是在该时间段(红线所标,不同slave时间长短不同)将sda和scl都=0,等到该时间段过去后再完成正常传输。

想问下这样做是否有风险/劣势?如果slave有timeout机制,有啥办法解决这个问题么?

谢谢!



scl在红线所标时间段内为0,随后正常传输

scl在红线所标时间段内为0,随后正常传输
发表于 2021-12-6 14:07:52 | 显示全部楼层
slave需要在一条指令中间不接收数据?也就是说需要master在发送指令中的某个位置进行死等,而且不同的slave需要死等的时间还不同?最好的办法是把设计这个流程的人干掉
发表于 2021-12-6 14:09:59 | 显示全部楼层


由于slave要求在某些时间不能接受数据

意味着slave会出现busy状态:
1) slave按照I2C规范拉低SCL,即Clock stretching,插入等待周期;
2) slave不能插入等待周期,则须在其手册中写明busy的条件,master依据slave的手册在预计slave会busy时主动插入等待周期(即你的方案)
3) slave不能明确其busy条件,master就不知道咋办了,换slave吧



如果slave有timeout机制,有啥办法解决这个问题么?

1) slave手册须写明其busy条件,busy到ready的最长时间,如果有timeout机制,还须写明其timeout的时间参数

如果你的slave是这样的:
1) 我会busy,啥子情况下会busy,我不告诉你
2) busy之后,什么时候ready,我不告诉你
3) 我busy,但我会悄悄的观察你猜我啥时候ready,你猜不准,我悄悄的走,不告诉你

那对这样的slave,咱们就只能不伺候咯。。。
 楼主| 发表于 2021-12-6 14:37:40 | 显示全部楼层
感谢回复

1. slave busy的开始和结束时间点等等时间参数都是已知的,只是不同slave取值不同。因此slave busy的条件是可以预知的。master可以主动插入等待周期将scl/sda长时间=0。
2.如果slave存在timeout机制(时间参数已知),即不能允许scl/sda长时间=0。这种情况下,似乎只能将原来的配置拆成两次,避开slave busy的时间?
3. 貌似slave clock stretching是个坑,能不碰尽量还是不碰……


 楼主| 发表于 2021-12-6 14:39:03 | 显示全部楼层


innovation 发表于 2021-12-6 14:09
意味着slave会出现busy状态:
1) slave按照I2C规范拉低SCL,即Clock stretching,插入等待周期;
2) slave ...


感谢回复

1. slave busy的开始和结束时间点等等时间参数都是已知的,只是不同slave取值不同。因此slave busy的条件是可以预知的。master可以主动插入等待周期将scl/sda长时间=0。
2.如果slave存在timeout机制(时间参数已知),即不能允许scl/sda长时间=0。这种情况下,似乎只能将原来的配置拆成两次,避开slave busy的时间?
3. 貌似slave clock stretching是个坑,能不碰尽量还是不碰……
 楼主| 发表于 2021-12-6 14:40:39 | 显示全部楼层


jinj198908 发表于 2021-12-6 14:07
slave需要在一条指令中间不接收数据?也就是说需要master在发送指令中的某个位置进行死等,而且不同的slave ...


干不动啊,老板的要求……

发表于 2021-12-6 16:07:09 | 显示全部楼层


tezhong 发表于 2021-12-6 14:39
感谢回复

1. slave busy的开始和结束时间点等等时间参数都是已知的,只是不同slave取值不同。因此slave  ...


slave的busy时间会超过timeout时间吗?如果超过的话就只能避开了,如果不超过的话,就判断busy条件死等呗
发表于 2021-12-6 16:24:36 | 显示全部楼层


tezhong 发表于 2021-12-6 14:39
感谢回复

1. slave busy的开始和结束时间点等等时间参数都是已知的,只是不同slave取值不同。因此slave  ...


你这哪里是有技术上的问题,风险点,风险系数(参数)你都知道,也有了应对方案。

你就是被这个slave雷到(气到)了?想吐槽一下。没事儿,这个问题最好的答案你老板已经告诉你了:“我知道有问题啊,没问题我花钱请你干嘛。”

都是打工人,不要为难自己,你干这事儿至少有这几个好处:
1)你挣到自己应得的报酬了;
2)吐槽的资本来自于你对I2C协议的理解,你加深了协议应用,提升了自己的技能;
3)你知道了这样干会被吐槽,所以你以后不会这样干,你成功地规避了一次被吐槽的风险;
。。。

所以,没事儿,开开心心的干吧,打工人。
 楼主| 发表于 2021-12-6 18:00:40 | 显示全部楼层


jinj198908 发表于 2021-12-6 16:07
slave的busy时间会超过timeout时间吗?如果超过的话就只能避开了,如果不超过的话,就判断busy条件死等呗 ...


有可能超过,不同的slave情况不同。

明白你的意思,谢谢回复!

 楼主| 发表于 2021-12-6 18:03:17 | 显示全部楼层


innovation 发表于 2021-12-6 16:24
你这哪里是有技术上的问题,风险点,风险系数(参数)你都知道,也有了应对方案。

你就是被这个slave雷 ...


哈哈,兄弟误会了。真是技术问题,我只是不确定i2c是否允许master插入长时间的等待周期,即scl/sda长时间=0。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 15:13 , Processed in 0.029454 second(s), 7 queries , Gzip On, Redis On.

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