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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 4803|回复: 13

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

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

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

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

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

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

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

谢谢!



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

scl在红线所标时间段内为0,随后正常传输
 楼主| 发表于 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 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。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-7 13:07:35 | 显示全部楼层


   
innovation 发表于 2021-12-6 18:26
这个从I2C协议本身没有规定,如果是你设计master,你想问这样干是否违背I2C协议规范,应该不违背。如果你 ...


我们负责设计master,对接各种别人提供的不同的slave。

感谢您,混这个论坛这么久头一次遇到这么热心+专业的回复,学到很多!

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-7 13:21:42 | 显示全部楼层


   
loglong 发表于 2021-12-6 23:33
没搞明白为什么是技术问题。
如果slave busy,那么需要slave来做clock stretch。随便需要master来配合的s ...


感谢版主回复


1. 是我们设计master,对接各种别人的slave。

2. slave做clock streching似乎对处理slave busy的情况也合理,但只是对我这个i2c新人感觉怕有些坑。

3. 至于为什么让master配合slave。是因为master对slave的传输需要跟其他一些操作同步,因此需要确保master对slave的传输一定需要在某一个时间段完成,不能早太多或晚太多。所以如果传输比较多的数据时,需要提前很久,并且避开slave busy的时间


回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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


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

GMT+8, 2025-10-18 13:05 , Processed in 0.016623 second(s), 5 queries , Gzip On, Redis On.

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