EEPROM M24C64替换AT24C64出现读取数据为0xff情况解决办法

硬件情况

STM32F103CBT6+模拟IIC,主频72MHz,IIC上拉电阻3.3kΩ

出现原因

  • 在IIC停止信号上,SCL、SDA翻转间隔不足以被M24C64识别,导致读写出错。

    修改前IIC停止代码如下:
void I2C_Stop(void)
{
I2C_SCL_LOW();
I2C_SDA_LOW(); // STOP:when CLK is high DATA change form low to high
Delay_us(1);
I2C_SCL_HIGH();
I2C_SDA_HIGH(); // 发送I2C总线结束信号
Delay_us(1);
}

  • 使用NOP指令测试M24C64能识别的最小翻转间隔代码如下:
void I2C_Stop(void)
{
I2C_SCL_LOW();
I2C_SDA_LOW(); // STOP:when CLK is high DATA change form low to high
Delay_us(1);
I2C_SCL_HIGH(); __asm__ volatile("NOP");
__asm__ volatile("NOP");
__asm__ volatile("NOP");
__asm__ volatile("NOP");
__asm__ volatile("NOP");
__asm__ volatile("NOP"); I2C_SDA_HIGH(); // 发送I2C总线结束信号
Delay_us(1);
}

测试

  • 在72MHz频率下,使用400MHz采样率的逻辑分析仪测得加NOP延时前翻转延时为57.5ns,无法被M24C64识别。

  • 其余条件不变情况下,增加6条NOP指令后,翻转延时为142.5ns,M24C64可以识别,读写正常。

  • 六条指令周期时长约 6 * 1 / 72000000 * 10^9=83.33ns约等于142.5-7.5=85ns

结论

  • 为了兼容多种IIC设备,在使用模拟IIC程序时,IIC停止等信号SDA、SCL间翻转应加适当延时,避免无法识别的情况。
  • 在此情况下应确保翻转延时大于142.5ns的极限延时,实际使用中应留有余量,可使用1us等常见延时。
void I2C_Stop(void)
{
I2C_SCL_LOW();
I2C_SDA_LOW(); // STOP:when CLK is high DATA change form low to high
Delay_us(1);
I2C_SCL_HIGH();
Delay_us(1);//翻转延时,确保IIC设备能识别
I2C_SDA_HIGH(); // 发送I2C总线结束信号
Delay_us(1);
}

EEPROM M24C64替换AT24C64出现读取数据为0xff情况解决办法的更多相关文章

  1. HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较

    摘要:   在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...

  2. 标注工具doccano导出数据为空的解决办法

    地址:https://github.com/taishan1994/doccano_export doccano_export 使用doccano标注工具同时导出实体和关系数据为空的解决办法.docc ...

  3. WCF传输过大的数据导致失败的解决办法

    WCF传输过大的数据导致失败的解决办法   WCF服务默认是不配置数据传输的限制大小的,那么默认的大小好像是65535B,这才65KB左右,如果希望传输更大一些的数据呢,就需要手动指定一下缓冲区的大小 ...

  4. ArcGIS客户端API中加载大量数据的几种解决办法

    ArcGIS客户端API中加载大量数据的几种解决办法 2011-03-25 18:17 REST风格的一切事物方兴未艾,ArcGIS Server的客户端API(Javascript/Flex/Sil ...

  5. 大数据批量导入,解决办法,实践从定时从 sqlserver 批量同步数据到 mySql

    c#代码,批量导入数据代码 public class MySql_Target : ZFCommon.DataAccesser.Base.DABase { public MySql_Target() ...

  6. 换晶振导致stm32串口数据飞码的解决办法

    一般来说,stm32f107都是用标配的晶振,比如8MHz. 但是,如果用别的晶振,比如13.56M的晶振,那串口接收还正常吗? 根据试验结果,很可能会飞码.比如说用串口助手发送的是0x35,但是在串 ...

  7. php读取csv文件,在linux上出现中文读取不到的情况 解决方法

    今,php读取csv文件,在linux上出现中文读取不到的情况,google,后找到解决办法<?phpsetlocale(LC_ALL, 'zh_CN');$row = 1;$handle = ...

  8. FTP软件Filezilla出现“读取目录列表失败”的解决办法

    FTP软件Filezilla出现“读取目录列表失败”情况一般出现在vista/win7系统上,之前在xp上没发现这种情况. 总的来说,不论是打开FTP出现乱码或者显示“读取目录列表失败”均是由字符集引 ...

  9. HBase快照迁移数据失败原因及解决办法

    目录 目录 1 1. 背景 1 2. 环境 1 3. 执行语句 1 4. 问题描述 1 5. 错误信息 2 6. 问题原因 3 7. 解决办法 4 1. 背景 机房裁撤,需将源HBase集群的数据迁移 ...

  10. windows和linux下读取文件乱码的终极解决办法!

    乱码是个很恶心的问题. windows和linux读取txt文件,一旦读取了,编码发生改变,就无法再还原了,只有重启项目. 网上有很多方法都是读取文件头,方法很好,但是亲测都不能用(右移8位判断0xf ...

随机推荐

  1. 【项目源码】JSP超市积分管理系统源码下载

    会员积分管理系统的目标是为中小规模的会员积分管理系统的目标是为中小规模的超市提供会员信息管理.会员积分管理以及积分兑换管理的具体解决方案. 网站和积分管理系统采用B/S结构,使用J2EE的技术开发完成 ...

  2. Redis持久化 (RDB和AOF) 梳理

    Redis有两种持久化方案: RDB持久化 AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照.简单来说就 ...

  3. .NET反编译神器ILSpy怎么用?

    前言 上一篇文章我们介绍了4款免费且实用的.NET反编译工具,这篇文章主要来说说ILSpy这个工具该如何安装和使用. ILSpy ILSpy是一款免费.开源的 .NET 反编译工具,能够将已编译的 . ...

  4. Python - 中文文本进行余弦相似度比较

    今天,在看论文的时候,突然想到了一件事情,爱是相对的,是双方的事情.那么"你爱我"和"你爱我"的相似度是多少呢?采用余弦相似度的方式来进行相似度比较.首先&qu ...

  5. 区间检测(range)

    区间检测(range) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给定一个长度为n的序列,进行m次检测,每次检测某个区间中,是否有重复的数. 输入 第一行,两个整数n和m,表示序列 ...

  6. ts 终于搞懂TS中的泛型啦! | typescript 入门指南 04

    大家好,我是王天~ 这篇文章是 ts入门指南系列中第四篇,主要讲解ts中的泛型应用,泛型在ts中是比较重要的概念,我花挺长时间才搞明白的,希望能帮助到大家 ~ ** ts 入门指南系列 ** Ts和J ...

  7. Java开发面试--群面专区

    目录 一.群面背景 二.群面流程 三.群面角色 四.群面细节 五.群面礼仪 六.群面话术 七.个人演讲 八.群面题型 群面也称无领导小组~ 候选人们被要求在一个相对自由的环境中展示他们的能力,并在没有 ...

  8. 多维评测指标解读第17届MSU世界编码器大赛全高清10bit赛道结果

    超高清视频纤毫毕现的关键一环. 01 主要指标多项第一,带宽节省48% 近日,第17届MSU世界编码器大赛全高清10bit赛道成绩揭晓,阿里自研的H.266/VVC编码器Ali266在该赛道最高效的1 ...

  9. java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容

    长字符串起因 项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方. 如果我们使用 枚举 定义的话,idea 编译的时候就会出现编译报错 Error: java:常量字符串过 ...

  10. 生成ios证书最简单的方法

    使用了hbuilderx的uniapp来开发app很方便,但是官网的文档,生成ios的私钥证书却需要使用mac电脑来生成,假如没有mac电脑就无法使用教程的方法来生成ios证书. 因为hbuilder ...