硬件工程师又踩坑了,第一次同时遇到I2C的时钟拉伸和SPI多从机问题(1)
记得以前看飞哥的文章,讲到I2C的时钟拉伸问题,没有太在意,只是知道这么个概念,印象不深。 但是昨天测试客户的板子的时候,通过对比传感器和标准值的时候,发现传感器的数值偶尔会出错,且数值越大偏离标准值越大。 将这一周的故障排除过程做个纪录,也给大家提供一个思路。 1. 第一时间怀疑没有补偿
通过测试50个测试点,拟合出一条曲线,发现测试值和标准值近似了。但是有个问题出现了,一旦量产,每个机器都测试50个点,工作量太大,而且也不确定传感器一致性如何,又挑了几个上机测试,发现只能缩小差值,不能完全消除。 2. 将测试结果反馈给原厂
经过沟通技术反馈,他们的传感器输出是不需要做补偿的,内部已经补偿好了,看一下传感器软件配置是否出错。邮件沟通后,发现软件配置正确,不然不会只错这么一点点数据。 3. 比较测试
这时候我在想是不是传感器原始数据出错,对比一下我的板子和DEMO板传感器端I2C的输出波形,赶紧用示波器抓了一下,还真发现了差异。 发现我们板子的波形很差,这种框框的波形好像在哪儿见过,又想不起来。 DEMO板每9个CLK后面都要拉低一段时间,第9个时钟应答的时间也不一致。 在I2C的主从通信过程中,总线上的SCL时钟总是由主站产生和控制,但如果从站不能跟上主站的速度,I2C协议规定从站可以拉低SCL时钟线,此时传输会暂停,直到从机释放SCL线,然后继续传输。 I2C从机有高速的和慢速的,主要就是为了照顾慢速的从机。 如果主机没有给足够的处理数据时间,主机想强行拉高SCL发送下一帧数据,这时候抓取波形来看,就像是SCL想拉高但是拉不起来,被拽住了一样。而后果就是下一帧的数据错乱,严重的甚至导致IIC通信死掉。 好了,今天先写这么多,SPI的也留到下次文章,看看这两天的结果,再做进一步记录反馈,未完待续! 著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-09-10
最近编辑:1年前
作者推荐
