shishu 发表于 2023-2-9 21:52:04

GPIO模拟I2C出现SCL时钟线被外设拉低的情况

如图是软件模拟I2c的大概整体的波形
局部放大时钟线两处有问题
再放大后,发现时钟线主机主动拉高了,gpio口配置为OD门电路,高电平被外部的10K电阻拉高。出问题的时候外设不知道什么原因也会主动拉低SCL线。为什么会这样?要怎么处理呢?
谢谢大家。

tang_qianfeng 发表于 2023-2-9 21:54:12

保持sda为高,发送9个时钟,

矩阵时间 发表于 2023-2-9 22:37:58

上拉电阻换个小一点的试试
是不是 SDA 和 SCL 的布线比较长,而且很靠近呢?
图中就是个 5ns 的抖动吧,芯片检测不到的

shishu 发表于 2023-2-9 22:40:16

矩阵时间 发表于 2023-2-9 22:37
上拉电阻换个小一点的试试
是不是 SDA 和 SCL 的布线比较长,而且很靠近呢?
图中就是个 5ns 的抖动吧,芯 ...
(引用自3楼)

好的我试试换个上啦电阻试试感谢

t3486784401 发表于 2023-2-9 23:07:55

按着I2C的协议,从机是可以通过拉低 SCL,通知主机降低通信速率的。如果是实物测得波形,考虑降低比特率

akey3000 发表于 2023-2-10 00:08:31

tang_qianfeng 发表于 2023-2-9 21:54
保持sda为高,发送9个时钟,
(引用自2楼)

对,这个按i2c协议,是有效的

shishu 发表于 2023-2-10 02:22:53

各位目前看来问题解决了。最后的原因跟硬件和软件都相关。硬件部分修改上拉电阻到4.7Kgpio线中间串接的500欧姆电阻改为0欧姆。软件把速率从1M降到600K左右之后就没有在出现上面的问题了。谢谢各位的建议和帮助。

ackyee 发表于 2023-2-10 09:01:15

shishu 发表于 2023-2-10 02:22
各位目前看来问题解决了。最后的原因跟硬件和软件都相关。硬件部分修改上拉电阻到4.7Kgpio线中间串接的50 ...
(引用自7楼)

。。。。。。大哥我没见过I2C 拿来1M 通讯的

I2C都只推荐400k 以下吧 ,很多芯片手册里都注明400k 以下

redroof 发表于 2023-2-10 09:09:44

ackyee 发表于 2023-2-10 09:01
。。。。。。大哥我没见过I2C 拿来1M 通讯的

I2C都只推荐400k 以下吧 ,很多芯片手册里都注明400 ...
(引用自8楼)

对啊。
规定最就是400k的,你跑到1兆然后问为什么人家反应不过来。。。
然后自己试着降速,发现你手上这个芯片降到600K差不多没问题了。
等这样量产了,肯定又会来问,同一个批次为什么某些的i2c正常,某些不正常。。。
因为体质差一点的可能跑不到600K

陆小凤之北京 发表于 2023-2-10 18:50:10

个别芯片支持到1M多,特殊模式。实际慢点更安全。

2nd 发表于 2023-2-10 23:08:12

本帖最后由 2nd 于 2023-2-10 23:09 编辑

支持1M接口速度的EEPROM很常见了,我判断主要是电路的问题。
另外,从逻辑分析仪图看,SCL也没有1M,楼主你的图怎么看?

shishu 发表于 2023-2-13 09:52:34

redroof 发表于 2023-2-10 09:09
对啊。
规定最就是400k的,你跑到1兆然后问为什么人家反应不过来。。。
然后自己试着降速,发现你手上这 ...
(引用自9楼)

芯片支持1M的速率,可能还是有点问题。好像在一个简单的demo上没问题,但是到有中断发生的demo上就有问题,中断没有进行gpio的操作只是简单的更新了一个全局时钟ticks的计数值好像就又会有问题了

shishu 发表于 2023-2-13 09:54:01

2nd 发表于 2023-2-10 23:08
支持1M接口速度的EEPROM很常见了,我判断主要是电路的问题。
另外,从逻辑分析仪图看,SCL也没有1M,楼主你 ...
(引用自11楼)

芯片支持1M的速率,可能还是有点问题。好像在一个简单的demo上没问题,但是到有中断发生的demo上就有问题,中断没有进行gpio的操作只是简单的更新了一个全局时钟ticks的计数值好像就又会有问题了。就会出现图上scl有ns跳变的情况,还在实验中

lyz3432 发表于 2023-2-13 10:40:43

搜下iic clockstrech

shishu 发表于 2023-2-13 23:25:47

矩阵时间 发表于 2023-2-9 22:37
上拉电阻换个小一点的试试
是不是 SDA 和 SCL 的布线比较长,而且很靠近呢?
图中就是个 5ns 的抖动吧,芯 ...
(引用自3楼)

确实如楼主那样 5ns的抖动芯片没有检测得到。但是这里有个疑问就是程序没有开中断的时候scl不会抖动,开了中断了就scl有抖动,目前测试好像通讯过程没有问题。还有就是逻辑分析仪开启了滤波 滤波时间设置为一个周期 目前逻辑分析仪分析协议没有出现问题。还有就是中断的开启会导致ack的判断被延迟最后导致时序失效。后来在开启scl=0之前关闭中断检测ack后再打开中断就ok了

qwe2231695 发表于 2023-2-14 00:10:19

发送大量SCL时钟复位外部器件时序

Tao涛 发表于 2023-2-15 08:59:11

这个是什么工具?还可以这样截屏。

shishu 发表于 2023-2-26 22:54:31

Tao涛 发表于 2023-2-15 08:59
这个是什么工具?还可以这样截屏。
(引用自17楼)

DSView逻辑分析仪几百兆频率抓波用RLE压缩办法抓抓几十秒的样子
页: [1]
查看完整版本: GPIO模拟I2C出现SCL时钟线被外设拉低的情况