搜索
bottom↓
回复: 5

Attiny1617 关于IIC总线被持续拉低的原因分析

[复制链接]

出0入0汤圆

发表于 2020-8-9 10:38:59 | 显示全部楼层 |阅读模式
在之前的工作中遇到一次IIC总线的问题:一个主设备和两个从设备使用的一路硬件IIC的环境下,当分别加载两个从设备驱动的时候,出现了IIC总线中的SDA被一直拉低,SCL有周期性的毛刺


其中一个从设备是ATmel系列芯片,而问题就是出在Atmel的硬件IIC中。

经分析,在Atmel发送数据时产生了一个冲突,而在冲突的处理函数中,这里直接重新初始化IIC。

查阅了有关datasheet,发现:

如果从设备不能发送高电平或NACK,此时冲突标志位会被置起。

于是就不能发送数据了,但是从设备依然能正常工作。

这个冲突标志位是临时的,下一次的start信号会自动清除掉冲突标志位。

该标志用于使用地址解析协议的系统。 但是,检测到的冲突是非地址解析协议情况,表明存在协议冲突,应将其视为总线错误。



因此,原因是这样的,在主机读数据的过程中,从设备控制SDA,主设备控制SCL,此时重新初始化iic,也直接将管脚进行了初始化,直接打乱SCL的时钟和长期占有SDA。

于是,我尝试将冲突处理函数中的重新初始化和return去掉,发现:



IIC当前的问题帧的数据是不对的,但并不影响之后的帧的数据,也不会造成总线持续拉低的问题。

修改方法:

在冲突处理函数中,仅做打印通知,并且主机做好相应的数据过滤。
至于为什么产生冲突,目前分析很有可能还是和另一个从机设备的初始化有关。
如果有其他意见,还请大家提出,谢谢!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2020-8-10 08:14:10 | 显示全部楼层
主从都是硬件IIC吗?把主机改成软件IIC试试看呢。

出0入0汤圆

 楼主| 发表于 2020-8-10 09:16:31 | 显示全部楼层
chengyang79 发表于 2020-8-10 08:14
主从都是硬件IIC吗?把主机改成软件IIC试试看呢。

主机端是安卓BSP层,用的是标准iic驱动。
大概率是主机端在这个时间点初始化了管脚导致从机的SDA拉不上去。
准备在从机试下模拟iic,如果拉不上,应该就是主机端的这个原因

出105入79汤圆

发表于 2020-8-10 09:19:58 | 显示全部楼层
看起来电路有问题, 波形不干净

出0入0汤圆

 楼主| 发表于 2020-8-10 15:16:10 | 显示全部楼层
qwe2231695 发表于 2020-8-10 09:19
看起来电路有问题, 波形不干净

使用示波器抓过,也在100us下抓到了问题帧,没发现有脏波形,并且硬件是上拉的

出0入0汤圆

 楼主| 发表于 2020-8-10 15:33:37 | 显示全部楼层
产生冲突的根本原因是:主机端(BSP)在加载另一个从设备时,再一次初始化了管脚,而此时正好是另一个从机发送数据,而从机在发送数据时,没办法拉高SDA产生数据波形,于是collision置位
使IIC总线持续异常的原因是:在产生collision时,直接重新复位iic(管脚也被初始化了),导致主机控制的SCL时序被打乱,SDA被占。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-18 18:15

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

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