搜索
bottom↓
回复: 7

诡异===Arduino 作为I2C Slave通信,SCL被奇怪拉低的现象

[复制链接]

出0入0汤圆

发表于 2017-10-13 16:21:44 | 显示全部楼层 |阅读模式
各位上神好,

我在用Arduino为Slave做I2C通信时,出现了奇怪的SCL被拉低的现象,
请各位大侠帮忙看看。

首先,
上位机Master与I2C的LCD模块通信,以及I2C的IMU通信数据均正常 (I2C频率约300Hz)。
Arduino作为Slave,Nvidia TK1作为Master 通信正常(I2C频率约300Hz)。
而上位机Master与Arduino(Slave)的通信却总是不正确。

上位机Master的与Arduino的电压不同,中间使用I2C电压转换模块,将两设备相连。

程序通信过程
Arduino 的Slave Address为0x08(7 bit)
先由Master向Slave发送数据 0x75,Master再从Slave读回8个Byte。(0,1,2,3,4,5,6,7)

在悬空状态下,I2C波形如下(正常)


而接上Arduino之后,ACK后面的SCL被奇怪的拉低了。


又尝试把I2C频率从300K降到125K,发现丢失的SCL回来了

也就是说Master给Slave发送数据成功,接下来从Slave读回8个Byte

但是读的ACK发送之后,又有SCL被拉低的现象。


再次尝试降低I2C频率,直至降低到83KHz,
8个Byte才正常读到Master端。

而且Arduino的代码要非常简练,如果在RequestEvent里多加一些处理,如串口输出又会导致数据读取错误。

不知道是硬件问题还是Arduino底层中断的问题。
各位上神能给些意见吗?

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-10-13 16:29:06 | 显示全部楼层
从机支持I2C时钟拉伸, 需要主控时钟拉伸支持

出0入0汤圆

 楼主| 发表于 2017-10-13 16:41:37 | 显示全部楼层
lihaimeng@163 发表于 2017-10-13 16:29
从机支持I2C时钟拉伸, 需要主控时钟拉伸支持

谢谢回复。
无论读写操作,从设备都可能会拉低SCL吗?
是说现在我用的Master端没有支持时钟拉伸才会出现现在的问题吗?

出0入96汤圆

发表于 2017-10-13 17:15:26 | 显示全部楼层
当I2C器件工作在主模式的时候,他在转换或运算的时候,会拉低SCL脚,防止I2C工作,从机在这个过程中会释放SCL,方便I2C去进行其他器件的操作!

出0入0汤圆

发表于 2017-10-14 08:32:41 | 显示全部楼层
本帖最后由 Eric_Xue 于 2017-10-14 08:47 编辑

I2C Slave 设备用有Clock stretch功能。I2C Mater也必须支持该功能。否则只能在ACK后加一段延迟。

另外,I2C Master是采用软件模拟的吗,怎么第一张图中,Slave+w接受到NACK,还会继续发送数据?

出0入0汤圆

 楼主| 发表于 2017-10-16 10:07:23 | 显示全部楼层
Eric_Xue 发表于 2017-10-14 08:32
I2C Slave 设备用有Clock stretch功能。I2C Mater也必须支持该功能。否则只能在ACK后加一段延迟。

另外,I ...

谢谢回复。
I2C Master其实是摄像头的SCCB协议,似乎SCCB协议中受到NACK也会照常发送数据。
按照大家的说法,我觉得可能是我现在的Master内不支持Clock Stretch功能,但是master的部分我也改不了里面代码,
能不能用其他方式比如禁止Arduino的Clock Stretch(Arduino只是把loop中实时采集到的数据快速传给Master),或者Arduino代码用更底层的中断方式来写能改善这个问题吗?

出0入0汤圆

 楼主| 发表于 2017-10-16 13:32:55 | 显示全部楼层
gallle 发表于 2017-10-13 17:15
当I2C器件工作在主模式的时候,他在转换或运算的时候,会拉低SCL脚,防止I2C工作,从机在这个过程中会释放S ...

谢谢回复。没太明白您的意思。
意思是从机Arduino端的代码有问题吗?是说clock stretch的问题吗?

出0入0汤圆

 楼主| 发表于 2017-11-13 08:41:27 | 显示全部楼层
确实是Master不支持Clock Stretch的问题。 谢各位大神。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 08:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表