首页/文章/ 详情

硬件工程师又踩坑了,第一次同时遇到I2C的时钟拉伸和SPI多从机问题(1)

1年前浏览373
大家好,我是EE小新。

记得以前看飞哥的文章,讲到I2C的时钟拉伸问题,没有太在意,只是知道这么个概念,印象不深。

但是昨天测试客户的板子的时候,通过对比传感器和标准值的时候,发现传感器的数值偶尔会出错,且数值越大偏离标准值越大。

将这一周的故障排除过程做个纪录,也给大家提供一个思路。

1. 第一时间怀疑没有补偿


通过测试50个测试点,拟合出一条曲线,发现测试值和标准值近似了。但是有个问题出现了,一旦量产,每个机器都测试50个点,工作量太大,而且也不确定传感器一致性如何,又挑了几个上机测试,发现只能缩小差值,不能完全消除。

是个方法,但是成本明显增加。


2. 将测试结果反馈给原厂


经过沟通技术反馈,他们的传感器输出是不需要做补偿的,内部已经补偿好了,看一下传感器软件配置是否出错。邮件沟通后,发现软件配置正确,不然不会只错这么一点点数据。


3. 比较测试


这时候我在想是不是传感器原始数据出错,对比一下我的板子和DEMO板传感器端I2C的输出波形,赶紧用示波器抓了一下,还真发现了差异。

DEMO板波形

我们做的板子波形

发现我们板子的波形很差,这种框框的波形好像在哪儿见过,又想不起来。


DEMO板每9个CLK后面都要拉低一段时间,第9个时钟应答的时间也不一致。


打开传感器数据手册,发现确实存在时钟拉伸的情况。



那么什么是时钟拉伸呢?

在I2C的主从通信过程中,总线上的SCL时钟总是由主站产生和控制,但如果从站不能跟上主站的速度,I2C协议规定从站可以拉低SCL时钟线,此时传输会暂停,直到从机释放SCL线,然后继续传输。

为什么需要时钟拉伸?

I2C从机有高速的和慢速的,主要就是为了照顾慢速的从机。

如果不配置,结果会怎么样?

如果主机没有给足够的处理数据时间,主机想强行拉高SCL发送下一帧数据,这时候抓取波形来看,就像是SCL想拉高但是拉不起来,被拽住了一样。而后果就是下一帧的数据错乱,严重的甚至导致IIC通信死掉。
好了,今天先写这么多,SPI的也留到下次文章,看看这两天的结果,再做进一步记录反馈,未完待续!

来源:EEDesign
通信控制SCL
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-10
最近编辑:1年前
EE小新
硕士 签名征集中
获赞 91粉丝 120文章 809课程 1
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈