AT24C02读正常,写不正常的排查方法

注意页的问题

24C02 后面的02的意思是2Kbit
这个eeprom用户总容量就是 2000bit / 8bit = 256 Byte
24C02是分页的,8个字节为一页,总共有256/8=32页。
假如你的写入起始地址是0,写入的数据长度8,那么你直接写入8个数据没问题;
假如你写入的起始地址是 1,写入的数据长度8,不做跨页写入处理的话,你的第8个数据就跑到了,地址0的坑,而不是地址9的坑。

跨页写入处理可以参考rt-thread的eeprom 驱动,如下:


/*** This function write the specific numbers of data to the specific position** @param bus the name of at24cxx device* @param WriteAddr the start position to write* @param pBuffer  the data need to write* @param NumToWrite* @return RT_EOK  */
rt_err_t at24cxx_page_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite)
{rt_err_t result = RT_EOK;uint16_t pageWriteSize = AT24CXX_PAGE_BYTE - WriteAddr % AT24CXX_PAGE_BYTE;RT_ASSERT(dev);if(WriteAddr + NumToWrite > AT24CXX_MAX_MEM_ADDRESS){return RT_ERROR;}result = rt_mutex_take(dev->lock, RT_WAITING_FOREVER);if(result == RT_EOK){while (NumToWrite){if(NumToWrite > pageWriteSize){if(at24cxx_write_page(dev, WriteAddr, pBuffer, pageWriteSize)){result = RT_ERROR;}rt_thread_mdelay(EE_TWR);    // wait 5ms befor next operationWriteAddr += pageWriteSize;pBuffer += pageWriteSize;NumToWrite -= pageWriteSize;pageWriteSize = AT24CXX_PAGE_BYTE;else{if(at24cxx_write_page(dev, WriteAddr, pBuffer, NumToWrite)){result = RT_ERROR;}rt_thread_mdelay(EE_TWR);   // wait 5ms befor next operation}}else{LOG_E("The at24cxx could not respond  at this time. Please try again");}rt_mutex_release(dev->lock);return result;
}

【EEPROM AT24C02读正常,写不正常的解决办法】相关推荐

  1. eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写

    原标题:[STM8L]EEPROM操作读与写 带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了. 不同型号的STM8L器件其内部默认 ...

  2. Arduino IDE+_Attiny13/85实践(六)Attiny13A EEPROM内存读与写

    一.Attiny 13A 与 EEPROM EEPROM:(Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器.是一种 ...

  3. [STM8L]EEPROM操作读与写

    STM8L带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了. 不同型号的STM8L器件其内部默认划分的EEPROM区域都是从0x10 ...

  4. STM32调试过程中,读保护,写保护造成的无法擦写芯片问题的解决办法和相关讨论

    调试Flash读保护时,Jlink不能下载程序 发布: 2010-1-20 22:54 | 作者: linew | 来源: StmFans思蜕盟 OPELC 自由电子联盟 调试flash读保护时,点了 ...

  5. Java 读large excel Out of memory解决办法

    Apache POI 在处理比较大的excel时,经常会遇到out of memory问题,原因是POI本身太吃内存. 解决办法:使用google的sjxlsx-1.0.0.jar library,详 ...

  6. AT89S8253片内EEPROM字节读、字节写、页读、页写驱动代码、注意事项及注释

    在编写AT89S8253片内EEPROM读写驱动程序时,要特别注意数据读写指令MOVX: 当EECON寄存器的EEMEN位置位时,MOVX访问EEPROM: 当EECON寄存器的EEMEN位清零时,M ...

  7. STM32CubeMX学习笔记(9)——I2C接口使用(读写EEPROM AT24C02)

    一.I2C简介 I2C(Inter-Integrated Circuit ,内部集成电路) 总线是一种由飞利浦 Philip 公司开发的串行总线.是两条串行的总线,它由一根数据线(SDA)和一根 时钟 ...

  8. EEPROM - AT24C02

    文章目录 引言 一.EEPROM简介 二.EEPROM - AT24C02引脚 三.AT24C02的地址组成 四.AT24C02写入操作 4.1 字节写入模式 4.2 页写入模式(高效写入模式) 4. ...

  9. ​HC32L130/HC32L136华大单片机硬件I2C驱动代码(从机为存储芯片EEPROM(AT24C02,FM24CL64B))​

    由于同事嫌弃模拟I2C速度太慢了 所以想改成硬件I2C 我试过例程的驱动代码 不太行 存储地址也是8位的 所以参考了一些博文 修改了下例程的代码 亲测有效 希望能帮到大家 代码如下 这里用的是I2C0 ...

最新文章

  1. 第2关:计算二叉树的深度和节点个数
  2. Windows Server 2012 R2工作文件夹⑨:自动发现设置
  3. 员工培训案例分析答案_在职员工培训管理办法案例
  4. php单表查询语句,单表查询
  5. mysql没法安装_mysql没法使用、没法启动服务的解决方法
  6. mysql修改密码的注意点
  7. JS使用按位异或方式加密字符串
  8. Linux pause函数 详解
  9. distributed crawl
  10. 1499元被标149元,苹果官网产品出现Bug价后续:白高兴了!
  11. opencv_haartraining.exe 分类器训练----命令执行,执行项学习(1)
  12. kubernetes PVC介绍
  13. brctl 设置ip_Linux 网桥配置命令:brctl | 学步园
  14. stm32f4红外传感器模块 和人体感应模块HCSR501
  15. OpenCV 数组存储图片像素值,便于后期图像处理
  16. n1 armbian php,斐讯N1盒子armbian 5.77蓝牙连接详细步骤斐讯N1刷入armbian 5.77写入emmc...
  17. Unable to simultaneously satisfy constraints
  18. 转-果壳网python工程师招聘启事
  19. OpenGL 实现 RGBA 转 I420
  20. js调用百度API显示全景图

热门文章

  1. IOS 13 + 13.1 系统更新,你想知道的都在这里
  2. rails pry使用_使用Rails Active Resource简化Web应用程序之间的互操作性
  3. 智慧环保领域的产业市场现状及前景分析
  4. Maven的工作流程和原理
  5. 盘点程序员那些神逻辑,看到第三个我笑吐了!
  6. 【JDBC篇】Java连接数据库的五种方式,及什么是URL?
  7. 电解电容特性及应用要点
  8. 江西省2020年下半年中小学教师资格面试公告
  9. SC9832 Android7.0 基准仓库建立
  10. 【微服务】【GO训练营总结】Go进阶① 微服务概览