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. 解决Eclipse中启动Tomcat报unable to start within 45 seconds问题

    启动项目的时候报Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server ...

  2. Solution -「HNOI 2016」最小公倍数(lacks of code)

    Description Link. 给出一个带权无向图,边权为 \(2^{a}\cdot3^{b}\) 形式. 给出 \(q\) 组形如 \(u,v,a,b\) 的询问,问 \(u,v\) 中是否存在 ...

  3. HarmonyOS 4.0 实况窗上线!支付宝实现医疗场景智能提醒

    本文转载自支付宝体验科技,作者是蚂蚁集团客户端工程师博欢,介绍了支付宝如何基于 HarmonyOS 4.0 实况窗实现医疗场景履约智能提醒. 1.话题背景 8 月 4 日,华为在 HDC(华为 202 ...

  4. 算法1:寻找完数(JS)

    任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...

  5. ModuleNotFoundError: No module named 'qrcode'

    W File "/usr/lib/python3/dist-packages/pip/_internal/resolution/resolvelib/candidates.py", ...

  6. oracle命令7 -rman命令

    $ rman targer /RMAN> show all; #查看rman中所有的配置RMAN configuration parameters for database with db_un ...

  7. mysql出现10061错误解决方法

    首先要关闭MYSQL服务 关闭你现在正在运行的mysql数据库,用结束mysql进程或者直接关闭mysql服务器都可以 1.开始菜单->运行(cmd)->寻径到MySQL文件中的bin目录 ...

  8. Quartus 入门

    转载请标明出处:https://www.cnblogs.com/leedsgarden/p/17790320.html 本文介绍的是Quartus的免费版,可以满足基本的教学需要 如果你用的是Xili ...

  9. 如何去掉桌面快捷方式左下角的小箭头(Win11)

    在对系统重命名之后,在快捷方式的左下角莫名的出现了小图标 如果想要去掉这个小图标 (1)首先在桌面上创建一个txt文件 (2)打开后输入指令 reg add "HKEY_LOCAL_MACH ...

  10. RT-Thread 中 minIni 组件包无法添加的解决方法

    事件 今天在 Env 下添加 minIni 包的时候出现了无法将其添加到工程的情况.借此机会来记录一下如何解决该类问题. 如果你想快速排错可以直接到 [2.minIni 组件出现的问题]查看. 一.准 ...