找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20228|回复: 15
打印 上一主题 下一主题
收起左侧

关于AT24C02的写入读取巨坑

  [复制链接]
跳转到指定楼层
楼主
ID:365802 发表于 2019-2-20 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在学习AT24C02, 晶振11.0592MHz 写了一段代码, 首先向24C02 0-15地址写入0-15, 再读取出来显示在1602上, 结果发现, 奇数位是正确的, 偶数位错误.经排查发现时写入错误, 即本应写入0123456789abcdef, 实际写入0520456084ace, 困扰我很久. 今天早上突发奇想, 是不是写的太快了, 加延时试试看.问题解决....
总结:
24C02在逐位写入数据时, 必须加延时, 否则器件处理不过来导致偶数位写入失败. 手头的这颗料, 需要加1毫秒延时才能保证写入正确.
读取时, 不加延时也能正确读取到,(可能器件的读取速度快), 保险起见, 建议加上延时.

以此提醒各位在使用AT24C02时注意写入延时的问题.

演示代码:
  1.         for(i=0; i<16; i++)
  2.         {
  3.                 at2402_write(i,i);
  4.                 delayms(1);
  5.         }
  6.        
  7.         for(i=0; i<16; i++)
  8.         {
  9.                 lcdwritechar(2,i,num2str(at2402_read(i)));
  10.         }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:158375 发表于 2019-2-20 16:59 | 只看该作者
楼主:
仔细看看 AT24C02 的资料哦。
看资料不仔细是不行的,不能自己想当然!
回复

使用道具 举报

板凳
ID:365802 发表于 2019-2-20 20:05 来自手机 | 只看该作者
笨笨兔 发表于 2019-2-20 16:59
楼主:
仔细看看 AT24C02 的资料哦。
看资料不仔细是不行的,不能自己想当然!

确实没怎么注意,原以为24C02的响应速度会很快,单片机应该跟不上。没想到。。。不管怎么样,算是一次教训,以后会多注意响应速度的问题。
回复

使用道具 举报

地板
ID:477932 发表于 2019-2-20 21:22 | 只看该作者
不是写与读要延时

评分

参与人数 3黑币 +40 收起 理由
Trump1438 + 10
zhengchong60 + 15
sheng7533967 + 15

查看全部评分

回复

使用道具 举报

5#
ID:401564 发表于 2019-2-20 22:20 | 只看该作者
它本身对于时钟的响应速度是比较快的,但是,写入的速度比较慢
但凡用IIC,对于速度就不会是很高的要求,加个延时就好了
回复

使用道具 举报

6#
ID:373388 发表于 2019-2-21 01:00 | 只看该作者
这不是坑,我记得at24c02 写周期最长是5ms,数据手册上有的, 你这个延时1ms也是有风险的;at24c02具有8字节写模式,连续写8字节后,需要延时5ms的;字节写模式也需要等待5ms是比较安全的;如果不等待5ms,再写下一字节是需要判段应答位的,应答位不对,等待再重新发写命令才可以的。

评分

参与人数 1黑币 +10 收起 理由
yaoji123 + 10 学习要认真,仔细。

查看全部评分

回复

使用道具 举报

7#
ID:474677 发表于 2019-2-21 10:24 | 只看该作者
说不上巨坑,只能说搂主对I2C的工作规范不了解,其对脉宽时延是有明确的要求的,其实不光是I2C,所有串行通信都对时序有着比较严格的要求,编程时必须按照时序规范要求写,移植代码时也要做到心里有数,否则在低速低频的单片机上工作正常的代码用到高速高频的单片机就会出错
回复

使用道具 举报

8#
ID:280876 发表于 2019-2-22 19:45 | 只看该作者
是你自己模拟的时序有问题吧
回复

使用道具 举报

9#
ID:477932 发表于 2019-2-22 22:20 | 只看该作者
数据手册上有, 根据手册上来
回复

使用道具 举报

10#
ID:477932 发表于 2019-2-22 23:49 | 只看该作者
仔细看看 AT24C02 的资料,真不难
回复

使用道具 举报

11#
ID:529916 发表于 2019-5-7 19:28 | 只看该作者
你是怎么知道写入错误的,
回复

使用道具 举报

12#
ID:365802 发表于 2019-5-15 09:07 | 只看该作者
文文12345 发表于 2019-5-7 19:28
你是怎么知道写入错误的,

进行读写测试, 发现读出来的和写入的数据不一样. 奇数地址位的正确, 偶数地址位的不对.
回复

使用道具 举报

13#
ID:394424 发表于 2021-1-5 13:23 | 只看该作者
我写一个的时候没有这个问题 现在我也发现了  连续的写与读 要加延时
回复

使用道具 举报

14#
ID:781556 发表于 2021-1-5 22:16 | 只看该作者
坑是個好東西,唯希望不是在應用項目中的坑
回复

使用道具 举报

15#
ID:57657 发表于 2021-1-6 09:53 | 只看该作者
do while 判断,写进去再读出来,数值不符就重写。
回复

使用道具 举报

16#
ID:886398 发表于 2021-3-17 00:45 | 只看该作者
我试了,要稳定的写入,得有5个ms延时才行,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表