千家信息网

I2C死锁怎么办

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关I2C死锁怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原因当单片机正在和I2C从机通信,如果主正好发生打算发第9个时钟,此时SCL为高,而
千家信息网最后更新 2026年11月03日I2C死锁怎么办

这篇文章给大家分享的是有关I2C死锁怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

原因

当单片机正在和I2C从机通信,如果主正好发生打算发第9个时钟,此时SCL为高,而从开始拉低SDA为低做准备(作为ACK信号),等待主SCL变低后,从再释放SDA为高。如果此时正好单片机复位,主SCL还没来得及变低,直接变成高电平,此时从还在等待SCL变低,所以一直拉低SDA;而主由于复位,发现SDA一直为低,也在等待从释放SDA为高。因此主从都进入一个相互等待的死锁状态。

解决办法

  1. 最好的方法是采用模拟i2c. 但由于已经配置成硬件i2c,程序改为上电或复位改成发9个SCL时钟信号,使从好释放SDA。

  2. 尽量选用带复位输人的I2C从器件。

  3. 将所有的从I2C设备的电源连接在一起,通过MOS管连接到主电源,而MOS管的导通关断由I2C主设备来实现。

  4. 在I2C从设备设计看门狗的功能。

  5. 在I2C主设备中增加I2C总线恢复程序。每次I2C主设备复位后,如果检测到SDA数据线被拉低,则控制I2C中的 SCL时钟线产生9个时钟脉冲(针对8位数据的情况),这样I2C从设备就可以完成被挂起的读操作,从死锁状态中恢复过来。 这种方法有很大的局限性,因为大部分主设备的I2C模块由内置的硬件电路来实现,软件并不能够直接控制SCL信号模拟 产生需要时钟脉冲。

  6. 在I2C总线上增加一个额外的总线恢复设备。这个设备监视I2C总线。当设备检测到SDA信号被拉低超过指定时间 时,就在SCL总线上产生9个时钟脉冲,使I2C从设备完成读操作,从死锁状态上恢复出来。总线恢复设备需要有具有编程 功能,一般可以用单片机或CPLD实现这一功能。

  7. 在I2C上串人一个具有死锁恢复的I2C缓冲器,如Linear公司的LTC4307:LTC4307是一个双向的I2C 总线缓冲器,并且具有I2C总线死锁恢复的功能。LTC4307总线输人侧连接主设备,总线输出侧连接所有从设备。当LTC4307 检测到输出侧SDA或SCL信号被拉低30ms时,就自动断开I2C总线输人侧与输出侧的连接.并且在输出侧SCL信号上产生16个时钟脉冲来释放总线。当总线成功恢复后,LTC4307会再次连接输人输出侧,使总线能够正常工作。

感谢各位的阅读!关于"I2C死锁怎么办"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

总线 设备 死锁 时钟 信号 主设备 输出 功能 脉冲 单片机 状态 检测 怎么办 内容 数据 方法 更多 电源 硬件 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 互联网与科技金融数据 网络科技有限互联网 互联网金融与金融科技 上海挚品互联网科技 滨湖区互联网智能科技产品供应 互联网科技创新企业排名 重庆互联网医院沙龙医盟信息科技 米聚互联网科技南京有限公司排面 科技类公司包括互联网吗 互联网公司黑科技创始人 佛山市拉法互联网科技有限公司 合肥互联网科技公司公章图片 工业互联网科技创业 唯美互联网科技 互联网科技手抄报图片 互联网领先科技活动 第三届互联网大会安防黑科技 青岛互联网科技园 北京瑞云互联网科技有限公司 互联网科技公司发展 云电互联网科技 四川狮子座互联网科技 青海省互联网新科技 上海宁丞科技互联网 彤创互联网科技有限公司 开一家科技互联网公司需要多少钱 济南小医互联网科技有限公司招聘 保山互联网科技靠谱吗 北京军民互联网科技公司
0