跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. I2C总线死锁问题介绍

I2C总线死锁问题介绍

已定时 已固定 已锁定 已移动 YT SDK
i2c
2 帖子 2 发布者 355 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Maple12138M 离线
    Maple12138M 离线
    Maple12138 YunTu
    写于 最后由 Maple12138 编辑
    #1

    在I2C通信中,如果主机出现异常复位,就会有概率导致总线死锁,出现这个问题后,我们就需要一些特殊手段来解锁总线。接下来我来介绍一下死锁问题的原因及解决方案:

    I2C死锁现象:
    I2C总线SCL为高,SDA一直为低,通信一直处于异常状态

    I2C死锁原因:
    在I2C主设备进行读写操作的过程中:主设备在开始信号后控制SCL产生8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。如果这个时候主设备异常复位,SCL就会被释放为高电平。
    此时,如果从设备没有复位,就会继续I2C的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。而对于I2C主设备来说.复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL和SDA信号变为高电平。这样,I2C主设备等待从设备释放SDA信号,而同时I2C从设备又在等待主设备将SCL信号拉低以释放应答信号,两者相互等待,I2C总线进人一种死锁状态。

    解锁方案:

    1. 在硬件设计上,MCU通过控制MOS来开关I2C从机的电源。
    2. 从机带复位引脚的话,可以通过MCU IO控制,让从机硬件复位
    3. 在检测到总线死锁后,MCU将SCL配置为GPIO,并输出9个CLK信号

    Demo演示:
    芯片:YTM32B1ME05
    硬件环境:YTM32B1ME0-EVB-Q144
    内容:演示上述方案3,即通过翻转SCL引脚解锁总线

    1. 在YCT下载ME05的I2C Master Demo,该Demo是MCU和eeprom通信

    2. 在I2C通信过程中多次复位,便有概率出现I2C死锁问题
      e06d860d-86bd-491e-a118-d6e87e2c4a2d-image.png

    3. 在出现错误后加入unlock操作
      ff4bf514-1030-410d-908f-b116db2a5eed-image.png

    4. 验证OK
      9dd6a3ff-282d-43fb-adc4-3a150537cfbb-image.png

    代码工程:
    I2c_Master_Demo.zip
    参考资料:
    https://blog.csdn.net/fengel_cs/article/details/50563291

    1 条回复 最后回复
    1
    • sunxuehuS 离线
      sunxuehuS 离线
      sunxuehu
      写于 最后由 编辑
      #2
      1. SDK-1.3.0版本后才支持监测总线状态的功能
      2. 也可以在初始化函数阶段检测总线是否异常,若是总线SDA和SCL任意一个为低电平,则返回STATUS_I2C_BUS_BUSY状态
      1 条回复 最后回复
      0

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YCT离线License申请流程

      帮助没办法联网的电脑使用YCT

    • YT CONFIG TOOL调查问卷

      帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

    • demo
      12
      can
      9
      lin stack
      6
      yt-link
      5
      vscode
      3
      adc模块
      2
      i2c
      2
      uuid
      2
      Online Users
      dongtian1D
      dongtian1
      • 登录

      • 登录或注册以进行搜索。
      • 第一个帖子
        最后一个帖子
      0
      • 版块
      • 最新
      • 标签
      • 热门