AT24C128 EEPROM的读写

2017-07-13 22:39:17来源: eefocus 关键字:AT24C128  EEPROM  读写

记录AT24C128 eeprom的多字节读写

  1. #define _EEPROM_DEBUG_LEVEL 0  

  2.           

  3. #if _EEPROM_DEBUG_LEVEL == 1  

  4.          #defineEEPROM_DEBUG(fmt,args...) do{ \  

  5.                    printf(fmt,##args);\  

  6.          }while(0)  

  7. #elif _EEPROM_DEBUG_LEVEL == 2  

  8.          #defineEEPROM_DEBUG(fmt,args...) do{ \  

  9.                    printf("%s:line:%d->",__FUNCTION__,__LINE__); \  

  10.                    printf(fmt,##args);\  

  11.          }while(0)  

  12. #elif _EEPROM_DEBUG_LEVEL == 0  

  13.          #defineEEPROM_DEBUG(fmt,args...)  

  14. #else  

  15.          #defineEEPROM_DEBUG(fmt,args...)  

  16. #endif  



[cpp] view plain copy

  1. #define AT24C128_PAGE_SIZE 64  

  2. #define AT24C128_PAGE_COUNT 256  

  3. #define AT24C128_BYTE_SIZE 16*1024  

  4. #define AT24C128_WADDR 0xA0  

  5. #define AT24C128_RADDR 0xA1  


写时序:




  1. ///  

  2. //// wrtie eeprom by page  

  3. ////  

  4. int writeE2promByPage(u32 startaddr,void* data,u32 len){  

  5.       

  6.     int retry=0,pageCnt =0,i=0,j=0,k =0;  

  7.     u32 temp1=0,temp2=0,temp3=0,start=0,startPage;  

  8.     u8 * pBuf;  

  9.     pBuf = (u8*)data;  

  10.     temp1 = startaddr % AT24C128_PAGE_SIZE;  

  11.     temp2 = len % AT24C128_PAGE_SIZE;  

  12.     temp3 = len / AT24C128_PAGE_SIZE;  

  13.     startPage = startaddr / AT24C128_PAGE_SIZE;  

  14.     if(temp1 ==0){  

  15.         if(temp2 !=0) pageCnt = temp3 + 2;  

  16.         else pageCnt = temp3 + 1;  

  17.     }  

  18.     else  

  19.     {  

  20.         if(temp2 !=0) pageCnt = temp3 + 3;  

  21.         else pageCnt = temp3 + 2;  

  22.     }  

  23.       

  24.     if(pageCnt > AT24C128_PAGE_COUNT) return -1;  

  25.     EEPROM_DEBUG("pageCnt %d \r\n",pageCnt);  

  26.     for(i=0;i

  27.         //start signal !!!  

  28.         while(SCCB_Start() ==0){  

  29.             if(retry > 100) {  

  30.                 EEPROM_DEBUG("start fail \r\n");  

  31.                 return -1;  

  32.             }  

  33.             retry++;  

  34.         }  

  35.         if(i == 0){  

  36.             start = startaddr;  

  37.             temp1 = AT24C128_PAGE_SIZE - startaddr;  

  38.         }  

  39.         else{  

  40.             start = (startPage + i) * AT24C128_PAGE_SIZE;  

  41.             temp1 = AT24C128_PAGE_SIZE;  

  42.         }  

  43.         EEPROM_DEBUG("start:%d \r\n",start);  

  44.         EEPROM_DEBUG("temp1:%d \r\n",temp1);  

  45.         //write slave addr  

  46.         SCCB_writeByte(AT24C128_WADDR);  

  47.         if(SCCB_Wait_Ack() == 0){  

  48.               EEPROM_DEBUG("write addr fail \r\n");  

  49.                 SCCB_Stop();  

  50.                 goto _end;  

  51.         }  

  52.         //write page high addr  

  53.         SCCB_writeByte(start / 256 );  

  54.         if(SCCB_Wait_Ack() == 0){  

  55.               EEPROM_DEBUG("write high page addr fail \r\n");  

  56.                 SCCB_Stop();  

  57.                 goto _end;  

  58.         }  

  59.         //write page low addr  

  60.         SCCB_writeByte(start % 256 );  

  61.         if(SCCB_Wait_Ack() == 0){  

  62.                 EEPROM_DEBUG("write low page addr fail \r\n");  

  63.                 SCCB_Stop();  

  64.                 goto _end;  

  65.         }  

  66.         //write date  

  67.         for(j = 0; j < temp1; j++){  

  68.             SCCB_writeByte(pBuf[k]);  

  69.             //write operation need slave response ack  

  70.             if(SCCB_Wait_Ack() == 0){  

  71.                 EEPROM_DEBUG("write data fail \r\n");  

  72.                 SCCB_Stop();  

  73.                 goto _end;  

  74.             }  

  75.             else{  

  76.                 k++;  

  77.             }  

  78.             if( k == len){  

  79.                 SCCB_Stop();  

  80.                 goto _end;  

  81.             }  

  82.         }  

  83.         EEPROM_DEBUG("page %d write success \r\n",i);  

  84.         //stop  

  85.         SCCB_Stop();  

  86.         SCCB_Delay(SCL_TIME_US);  

  87.     }  

  88. _end:  

  89. return k;

[1] [2]

关键字:AT24C128  EEPROM  读写

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2017071334133.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32 内部flash的读写程序
下一篇:STM32连接射频si4438模块

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
AT24C128
EEPROM
读写

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved