关于 NXP PCA85073A 实时时钟读取数据时出现 IIC 传输失败的原因解析和解决方法

一、前言
     
      对使用 I2C 传输的 RTC 外设 PCA85073,在 I2C 传输过程中若有复位信号输入,则有概率出现 I2C 死锁的状态,即 SCL为高,SDA一直为低的现象。


二、I2C 基本协议

      在分析问题出现的原因之前,我们首先需对 I2C 信号进行解释。

      首先 SCL 时钟和 SDA 数据线都必须是双向开漏结构,通过总线上的上拉电阻拉到逻辑高电平,当 SCL 与 SDA 为都为高电平时,总线处于空闲状态。                                   

      当 SCL 为高,SDA 由高到低的变化为起始信号。
      当 SCL 为高,SDA 由低变高为结束信号,停止信号是由主机发出的。

      当 SCL 为低时,SDA 才能更改电平状态。


三、I2C “ 挂死 ” 原因解析

      由于是开漏的结构,当 I2C SDA 总线上有任何一个器件拉低总线电平的时候,其它任何器件都无法拉高 SDA 总线,如果 SDA 总线上有一个设备不释放总线,那么这条线会一直被这个设备占用,总线上的通信就会暂停。

      一般情况下,从设备在数据传输完成后就释放 SDA 线,总线就会恢复空闲状态。但在一些情况下,从设备会一直拉低 SDA 线不释放,这种一般被称为 “I2C 挂死 ”或 “I2C 死锁 ”。

      那么哪种情况下 I2C 会挂死呢?

      上面说过,只有当 SCL 为低电平时,SDA 才能变化电平状态,当 I2C 在传输过程中被意外中断,总线停留在 SCL 高,SDA 为低的情况,此时总线就会一直被占用,这种情况原因往往是从机拉低 SDA 不释放,因为若是主机拉低 SDA 不释放,我们能够去通过软件控制主机或者通过复位等操作去解决。而若是从机的原因,由于很多时候 I2C 从机不会带复位引脚,所以就算对整个系统进行复位也没办法解除这种状态,只能通过上下电进行恢复,这种操作对于很多时候都是无法接受的,例如需要连续运行进行计时的 RTC 外设。

      接下来我们继续分析

      首先需要看看哪些情况下 I2C 从机会需要拉低 SDA 线

  1. 传输数据时,从机发出 ACK 应答
  2. 读数据,从机传输 0 时会拉低 SDA

      那么出现挂死的最常见的情况就是主机在通讯的过程中产生了复位。由于复位动作通常会立刻执行,也就发不出完整的 CLK 了。那么等到主机复位完成回来后,SCL 为高,SDA 被从机拉低。主机无法发起 START 起始条件,不能开始下一次与从机的通讯,这称为 SDA 挂死。


四、问题解决方法

      根据 NXP 的 《I2C-bus specification and user manual》最简单的解决办法就是使用 GPIO 模拟 I2C 的连续 9 位时钟或者更多时钟,因为协议规定 I2C 的通常传输的数据宽度为 8 位和 1 位应答位,额外的时钟都会被认为是停止信号,所以不管从机处于何种状态,这种方法都能使从机释放 SDA ,进入正常的传输状态。


五、问题解决实例

      在使用 I2C 对实时时钟 PCA85073 读取数据过程,发现传输中间 MCU 出现复位则有概率出现 I2C 挂死的现象,通过 GPIO 模拟时钟信号可以使 PCA85073 释放 SDA 线,后续就能进行正常的数据读取,下图是通过 GPIO 模拟恢复正常传输的时序图。
 

六、参考文档

      [1] NXP《I2C-bus specification and user manual》

 登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/278155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es索引操作命令

索引操作 index 创建索引 put 方法创建索引 使用 put 创建索引时必须指明文档id,否则报错 # PUT 创建命令 # test1 索引名称 # type1 类型名称,默认为_doc,已经被废弃 # 1 文档id PUT /test1/type1/1 {"name":"zhangsan&…

【体验有奖】用 AI 画春天,函数计算搭建 Stable Diffusion WebUI

人工智能生成内容 AIGC(Artificial Intelligence Generated Content)是当下备受关注的概念之一,是继 PGC 和 UGC 之后的新型生产方式。AIGC 技术的核心思想是利用人工智能算法生成具有一定创意和质量的内容。例如,根据用户的描述或…

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中,会损失大量信息,例如图中的马在建模过程中逐渐变得模糊,从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说, PGI包含三个部分,&#xff0…

AJAX 02 案例、Bootstrap框架

AJAX 学习 AJAX 2 综合案例黑马 API01 图书管理Bootstrap 官网Bootstrap 弹框图书管理-渲染列表图书管理-添加图书图书管理-删除图书图书管理 - 编辑图书 02 图片上传03 更换图片04 个人信息设置信息渲染头像修改补充知识点:label扩大表单的范围 AJAX 2 综合案例 黑…

【鸿蒙HarmonyOS开发笔记】自定义组件详解

自定义组件 除去系统预置的组件外,ArkTS 还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。 我们开发的每个页面其实都可以视为自定义组件内置组件的结合 语法说明 自定义组件的语法如下图所示 各部分…

深度序列模型与自然语言处理:基于TensorFlow2实践

目录 写在前面 推荐图书 编辑推荐 内容简介 作者简介 推荐理由 写在最后 写在前面 本期博主给大家推荐一本深度学习的好书,对Python深度学习感兴趣的小伙伴快来看看吧! 推荐图书 《深度序列模型与自然语言处理 基于TensorFlow2实践》 直达链接…

基于centos7的k8s最新版v1.29.2安装教程

k8s概述 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语&…

AI系统性学习01- Prompt Engineering

文章目录 面向开发者的Prompt Engineering一、简介二、Prompt设计原则1 环境配置2.两个基本原则2.1 原则1:编写清晰、具体的指令2.1.1 策略一:分割2.1.2 策略2:结构化输出2.1.3 策略3:模型检测2.1.4 策略4:提供示例 2.…

css设置选中文字和选中图片字的颜色

要改变页面中选中文字的颜色,可以使用 CSS 的 ::selection 伪元素来实现 *::selection {/* 改变选中文字的背景色 */background-color: #c42121;/* 改变选中文字的文本颜色 */color: #fff; } 用通配符选择器给所有元素都加上了 ::selection伪元素,用于…

鸿蒙开发之MPChart图表开发

一、简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一,因此需要经常使用图表,如折线图、柱形图等。OpenHarmony提供了一个强大而灵活的图表库是实现这一目标的关键。 在 ohpm 中心仓(https://ohpm.openharmony.cn/)中,汇聚了众多开发者…

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

基于JavaWeb+SSM+Vue“鼻护灵”微信小程序系统的设计和实现

基于JavaWebSSMVue“鼻护灵”微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 摘 要 3 Abstract 1 1 绪 论 1 1.1研究背景 1 工作的效率。 1 1.2 研究意义 1 1.3研究现状 1 1.4本文组织结构 2 2 技术介绍 3 2…

Flutter:构建美观应用的跨平台方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java数据结构二叉树练习

1.检查两棵二叉树是否都是相同的练习 我要求时间复杂度为1,所以我们不用前序中序后序是否都一样来进行判断 如何判断二叉树是否都是相同的子问题方式 先判断根节点是否相同 再判断左子树和右子树是否都是相同的 先用代码判断不相同的情况,都相同的化…

Linux:系统初始化,内核优化,性能优化(3)

优化系统的文件句柄数(全局) 也就是系统的最大文件数量 查看最大数量 cat /proc/sys/fs/file-max 当我们的服务器有非常大的一个数据并发的时候十几二十万的文件需要去配置,可能这个是远远不够的,我们就要去修改 vim /etc/sy…

服务器开机不输入密码自动进系统, 与设置开机启动项

打开运行[win R ] 输入: control Userpasswords2设置开机启动项 运行 输入 shell:startup在这里插入图片描述

中国城市统计年鉴、中国县域统计年鉴、中国财政统计年鉴、中国税务统计年鉴、中国科技统计年鉴、中国卫生统计年鉴​

统计年鉴是指以统计图表和分析说明为主,通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴,则是研究者常用的途径。目前国…

【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程

本文作者: slience_me 文章目录 ARIMA 非平稳过程通过差分转化为平稳过程文章原文具体解释详解参照 ARIMA 非平稳过程通过差分转化为平稳过程 文章原文 Many time series forecasting methods start from the classic tools [38, 10]. ARIMA [7, 6] tackles the fo…

sqllab第二十七关通关笔记

知识点&#xff1a; union select 关键字过滤 通过<> /**/进行截断处理 un<>ion sel<>ect 没效果uni/**/on sel/**/ect 被过滤了双写绕过 这关对select进行了多重过滤&#xff0c;无法进行双写绕过 大小写绕过 UNion SElect (这关可以用&am…

【前端】-css的详解

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …