AT24C02数据读取异常问题(0xFF)

文章目录

  • 问题描述
  • 解决方法
  • 总结

2023/11/29

问题描述

使用AT24C02模块,写入数据后立刻读取,读取到的数据出现异常,异常值为0xFF。
例如我们在主函数里,首先调用AT_Write函数往模块的0地址写入一个数据,接着多次调用AT_Read函数从0地址处读取写入的数据,读取到的数据部分会发生错误,具体表现为前几次读取到的数据为0xFF,后几次读取到的数据恢复正常。

解决方法

在 Rev. 0976F–SEEPR–10/02 版数据手册的第九页,我们可以看到如下描述:
大体为:当我们往AT模块成功写入8位数据时,AT模块会回复我们一个0(即IIC通信的应答位),之后AT会进入一个短暂的内部定时写周期 twr,在该阶段AT需要把我们发送的8位数据存储到对应的地址,所以在该阶段内所有AT模块的写入操作都会被禁止,模块不再响应外部的请求。
也就是说,当我们在调用了AT_Write函数往模块里写入一个数据时,数据需要一定的时间才能写到模块的flash中,在这个时间段内,模块需要专心处理往flash中写数据的操作,不再响应外部的请求,此时我们调用AT_Read函数返回的当然是一个错误的数据。只有在等待一定的时间,写flash操作完成后,模块才会再次响应我们的请求,此时,我们再调用AT_Read函数返回的数据就变成了正常的数值。这也就解释了为什么当我们连续多次调用AT_Read函数时前几次返回的是错误的数据,后几次返回的是正确的数据。
我们使用逻辑分析仪进行验证:首先,我们往AT模块的0x02地址写入数值0x06,之后立刻从0x02地址读取数据,此时读取到的数据就变成了0xFF,而不是我们希望的0x06。在这里插入图片描述
其实仔细观察可以发现,在返回0xFF数据前,AT回应给我们的是一个NACK。但部分同学使用的函数中并未对IIC返回NACK有特定的处理,而是在返回NACK后仍然从SDA总线上强行读取数据,我们知道,当IIC总线空闲时,总线电平会由上拉电阻上拉至高电平,此时从SDA读取到的数据也就变成了0xFF。
至此我们就可以针对以上的问题找到相应的解决方法了:1. 首先,我们往AT模块写入数据后,不能立刻读取数据,需要等待几个毫秒后再次读取,躲开模块的内部定时写周期 twr。 2. 要规范自己的函数,在检测到IIC回复NACK后,需要进行特定的处理,例如数据重发、检查芯片状态等,而不是强行从IIC总线读取数据。

总结

  1. 存储模块会有内部定时写周期 twr,需要注意。
  2. 规范自己的函数,将情况考虑周全,在出现不同的情况时会有不同的返回值。(例如让AT_Read函数返回一个16位数据,低八位存储从AT模块中读取的数据,最高位存储AT模块读取情况,在检测到NACK后将最高位置一,此时就可以通过检测AT_Read函数返回的16位数据最高位状态来判断AT模块的读取情况)

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

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

相关文章

leetcode:用栈实现队列(先进先出)

题目描述 题目链接:232. 用栈实现队列 - 力扣(LeetCode) 题目分析 我们先把之前写的数组栈的实现代码搬过来 用栈实现队列最主要的是实现队列先进先出的特点,而栈的特点是后进先出,那么我们可以用两个栈来实现&…

DV、OV、EV证书

在保护您的网站并建立用户信任时,SSL证书起着关键作用。不同的SSL认证级别提供了不同的安全性和验证程度。在选择SSL证书时,了解DV(域名验证)、OV(组织验证)和EV(扩展验证)证书的差异…

PyQt基础_011_对话框类控件QMessage

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class WinForm( QWidget): def __init__(self): super(WinForm,self).__init__() self.setWindowTitle("QMessageBox") self.resize(300, 100) self.myButt…

车辆动力学 | 轮胎纵滑和侧滑下的简化模型

1、轮胎模型的定义: ——反应轮胎力学性能(所有侧向力、纵向力以及会正力矩等)与侧偏角和运动状态(滑转率和滑移率)关系的数学模型 2、四个组成部分 胎面层、带束层、胎体、轮辋 3、简化模型的假设条件 4、起滑点&am…

import matplotlib.pyplot as pit 报 ImportError: DLL Load failed: 找不到指定的模块。

环境python 3.7,需要安装 numpy1.21.6 | matplotlib 2.2.5 看版本依赖 numpy https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy matplotlib https://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

渗透测试|HW蓝队

记录某个对某个钓鱼事件中获取的钓鱼样本进行分析,以及简单的制作学习 样本行为分析 首先看到是 qq 邮箱发来的某个压缩包大概本身是带密码的,反手就丢到虚拟机先看下大概文件,解压后是这样的一个快捷方式 然后打开属性查看快捷方式&#x…

深入理解Python中的模块和包

目录 一、模块(Module) 1.1 模块的概念 1.2 模块的使用方法 1.3 模块的作用和优势 二、包(Package) 2.1 包的概念 2.2 包的使用方法 2.3 包的作用和优势 三、模块和包的应用场景 3.1 模块的应用场景 3.2 包的应用场景 …

【开源视频联动物联网平台】开箱即用的物联网项目介绍

写一个开箱即用的物联网项目捐献给Dromara组织 一、平台简介 MzMedia开源视频联动物联网平台,简单易用,更适合中小企业和个人学习使用。适用于智能家居、农业监测、水利监测、工业控制,车联网,监控直播,慢直播等场景。…

echarts图表滚动条带动页面窗口滚动条的问题

网上搜了很多方法不管用,后来发现每次滚动echarts或者左右滑动echarts下方都会报错,报错提示如下,看看你们的图表是否这样报错: 报错信息如下:Unable to preventDefault inside passive event listener invocation 原…

亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试

近日,在中国信通院“可信数据库”数据库迁移工具专项测试中,湖南亚信安慧科技有限公司(简称:亚信安慧科技)数据库数据同步平台V2.1产品依据《数据库迁移工具能力要求》、结合亚信科技AntDB分布式关系型数据库产品&…

vuepress-----3、导航栏

3、导航栏 # 页面目录结构约定 . ├── docs │ ├── .vuepress (可选的) │ │ ├── components (可选的) │ │ ├── theme (可选的) │ │ │ └── Layout.vue │ │ ├── public (可选的) │ │ ├── styles (可选的) │ │ │…

分布式系统:CAP 定理

欢迎来到分布式系统系列。在本文中,我们将学习并理解什么是 CAP 定理。CAP 代表一致性、可用性和分区容错性。当我们谈论CAP定理时,我们主要谈论的是分布式系统。首先,让我们了解一下什么是分布式系统。分布式系统是由运行在单台或多台机器上…