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模块的读取情况)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Vue+SpringBoot的创意工坊双创管理系统

项目编号: S 049 ,文末获取源码。 \color{red}{项目编号:S049,文末获取源码。} 项目编号:S049,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

Python教程:装饰器的10个示例用法

Python装饰器是一种高级语法,它允许我们增强函数或方法的功能,而无需修改其原始代码。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这个新的函数可以包装原有函数,添加一些新的功能。 在Pyth…

重载、重写、重定义的辨析

C重载、重写、重定义 重载、重写、重定义对比一、重载(overload)二、重写 / 覆盖(override)三、重定义 / 隐藏(redefining) * 为什么在虚函数中不能使用 static 关键字?动态绑定(Dyn…

上海震坤行:水泥行业数字化采购的趋势、策略与实践

上海震坤行:水泥行业数字化采购的趋势、策略与实践 在中国水泥协会发布的《2023年上半年水泥行业经济运行及下半年展望》中提到了水泥行业的发展现状——2023年上半年,在全球经济增长放缓、国内经济延续恢复态势、但市场需求不足的宏观环境下&#xff0…

直播间搭建设备

直播间搭建对设备的要求因直播类型和直播内容而异,但以下是一些常见的直播设备要求: 1.摄像头∶高清、稳定、画面流畅的摄像头是直播的必备设备。对于大部分直播来说,选择一个质量较好的网络摄像头或手机摄像头即可。但对于需要更高清晰度或专业级别的直…

论文学习-Bert 和GPT 有什么区别?

Foundation Models, Transformers, BERT and GPT 总结一下: Bert 是学习向量表征,让句子中某个词的Embedding关联到句子中其他重要词。最终学习下来,就是词向量的表征。这也是为什么Bert很容易用到下游任务,在做下游任务的时候&a…

C++ Primer 第十六章 模板与泛型编程 重点解读

文章目录 1 定义模板1.1 类模板成员函数的实例化:1.2 在类代码内简化模板类名的使用:1.3 令模板自己的类型参数成为友元(C11)1.4 模板类型别名1.4.1 typedef1.4.2 为模板定义类型别名(C11) 1.5 函数模板与类模板的区别1.6 使用类的…

SpringMVC多种类型数据响应

SpringMVC多种类型数据响应入门 1.概念 RequestMapping 作用:用于建立请求URL和处理请求方法之间的对应关系 位置: 类上,请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录 方法上,请求URL的第二级访问目…

宠物店管理系统服务预约会员小程序效果如何

很多人都会养宠物,随着生活品质提升,尤其以年轻人为主的消费者在宠物食品、医疗、购买消费等方面有较高的消费属性,而在线下也有大量从业者,互联网程度及智慧化门店提升及客户赋能,线下经营的同时还需要线上发展拓客引…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Builder组件内自定义构建函数与@Styles自定义组件重用样式(十)

文章目录 一、Builder自定义构建函数1、什么是自定义构建函数2、组件内定义构建函数3、组件外定义构建函数4、Builder装饰器练习 二、Styles重用样式函数1、重用样式的作用2、组件内定义Styles3、组件外定义4、Styles装饰器练习5、注意要点 一、Builder自定义构建函数 1、什么…

寿险公司通过开源治理保障数字创新,安全打通高质量服务新通道

某寿险公司致力于为消费者提供人性化的产品和服务,在中国保险市场中始终保持前列。该寿险公司以挖掘和满足客户需求为出发点,从产品开发、渠道销售、运营流程和售后服务等各环节,借助数字化工具,不断地努力探索并提升服务品质。 精…

NumSharp

github地址:https://github.com/SciSharp/NumSharp High Performance Computation for N-D Tensors in .NET, similar API to NumPy. NumSharp (NS) is a NumPy port to C# targetting .NET Standard. NumSharp is the fundamental package needed for scientific …

Linux Centos系统安装Mysql8.0详解

本文是基于服务器Linux Centos 8.0系统 安装 Mysql8.0真实运维工作实战为例,详细讲解安装的全过程。 1,检查卸载mariadb Mariadb数据库是mysql的分支,mariadb和mysql会有冲突,所以安装Mysql前,首先要检查是否安装了m…

6.如何利用LIO-SAM生成可用于机器人/无人机导航的二维/三维栅格地图--以octomap为例

目录 1 octomap的安装 2 二维导航节点的建立及栅格地图的构建 3 三维栅格地图的建立 1 octomap的安装 这里采用命令安装: sudo apt install ros-melodic-octomap-msgs ros-melodic-octomap-ros ros-melodic-octomap-rviz-plugins ros-melodic-octomap-server 这样…

HPE存储监控

存储设备构成了企业组织的支柱,使应用程序能够运行,可以进行市场研究,并且能够存储关键业务信息以用于日常运营,由于健康的存储网络对于日常业务运营的顺利运行是必不可少的,因此 IT 团队应确保存储基础架构的理想性能…

毫米波传感器系统性能测量(TI文档)

摘要 本应用报告讨论了使用德州仪器高性能毫米波传感器的系统性能测量结果。TI的毫米波传感器是一个77 GHz,高度集成的收发器,具有高速接口(CSI2),可将原始ADC数据发送出去进行处理。毫米波传感器包括整个毫米波射频和模拟基带信号链&#xf…

ubuntu18.04安装miniconda和mysql

MySQL 1.更新软件包 apt-get update 2.mysql安装 apt-get install mysql-server 3.初始化配置mysql mysql_secure_installation 第一个选项是问你要不要安装密码插件,就是说安装了之后你必须用安全度很高的密码,不安装的话,可以随意设…

HAProxy部署Web集群(Nginx)实验

实验前准备 HAProxy服务器:192.168.188.11 内核版本最好要在2.6以上,使用uname -r查看自己的内核版本是否适用 Nginx服务器1:192.168.188.12 Nginx服务器2:192.168.188.13 客户端:192.168.188.1(本机window…

渗透测试|HW蓝队

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

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用

基于STC12C5A60S2系列1T 8051单片机的IIC总线器件24C02实现掉电保存计时时间应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单…