[其它应用] 中颖8位MCU EEPROM使用注意事项

[复制链接]
1249|8
 楼主| 小夏天的大西瓜 发表于 2023-2-16 22:00 | 显示全部楼层 |阅读模式
本帖最后由 小夏天的大西瓜 于 2023-2-16 22:04 编辑

EEPROM(Electrically Erasable Programmable readonly memory)是指带电可编程只读存储器,是一种掉电后数据不丢失的存储芯片。
中颖Flash型MCU都集成有EEPROM,EEPROM用来存放用户数据。EEROM大小可以通过option(代码选项)选择0~4K不等。EEPROM按照扇区进行划分,每个扇区的大小512字节(较早的产品,每个扇区大小256字节),最多支持8个扇区。
中颖的EEPROM编程/擦除次数:至少100000次
中颖的EEPROM数据保存年限:至少10年
中颖EEPROM的操作原则:
1 必须关闭所有中断
如果在操作EEPROM期间,不关闭中断,可能会导致程序跑飞或者其它异常情况;中颖MCU要求对于EEPROM的擦除和编程,需要按照规定关闭所有中断(EA=0),等到编程完成后再打开中断。

2 如何访问EEPROM

中颖芯片对于EEPROM的读、擦和写都是通过寄存器FLASHCON的FAC位置1来操作。当FAC=0时,MOVC指令或者SSP功能访问Main Block区域;当FAC=1时,MOVC指令或者SSP功能访问类EEPROM区域或信息存储区。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 小夏天的大西瓜 发表于 2023-2-16 22:02 | 显示全部楼层
本帖最后由 小夏天的大西瓜 于 2023-2-16 22:05 编辑

3 操作EEPROM前,清WDT
在对EEPROM的操作前,清WDT,保证操作期间不溢出

4  抗干扰
同时,为了抗干扰,防止误操作,EEPROM编程可以参考如下例程:
  1. uchar ssp_flag;

  2. voidEEPromSectorErase(UCHAR nAddrH)// 扇区擦除
  3. {                                                                                                   

  4.   ssp_flag= 0xA5;

  5.   _push_(IEN0);//中断控制压栈

  6.   IEN0&=0x7F;//关总中断   

  7.   FLASHCON = 0x01;  //访问EEPROM区

  8.   RSTSTAT = 0;    //清WDT                                                      

  9.   XPAGE= nAddrH<<1 ;                                                  

  10.   IB_CON1   = 0xE6;  

  11.   IB_CON2   = 0x05;

  12.   IB_CON3   = 0x0A;

  13.   IB_CON4   = 0x09;     

  14.   if(ssp_flag!=0xA5)//增加flag判断,增强抗干扰

  15.    goto Error;

  16.   IB_CON5   = 0x06;

  17.   _nop_();                              

  18.   _nop_();

  19.   _nop_();  

  20. Error:

  21. ssp_flag= 0;

  22. IB_CON1= 0x00;

  23. IB_CON2= 0x00;

  24. IB_CON3= 0x00;

  25. IB_CON4= 0x00;

  26. IB_CON5= 0x00;
  27.             
  28.   FLASHCON= 0x00;//切回FLASH区

  29. _pop_(IEN0);//恢复总中断

  30. }

  31. voidEEPromByteProgram(UCHAR nAddrH,UCHAR nAddrL, UCHAR nData)  // 扇区编程

  32. {

  33.   ssp_flag= 0x5A;

  34.   _push_(IEN0); //中断控制压栈

  35.   IEN0&=0x7F;//关总中断

  36.   FLASHCON= 0x01; //访问EEPROM区

  37.   RSTSTAT = 0;    //清WDT

  38.   XPAGE= nAddrH;                                                  

  39.   IB_OFFSET= nAddrL;

  40.   IB_DATA= nData;  // 烧写内容

  41.   IB_CON1   = 0x6E;

  42.   IB_CON2   = 0x05;

  43.   IB_CON3   = 0x0A;

  44.   IB_CON4   = 0x09;

  45.   if(ssp_flag!=0x5A) //增加flag判断,增强抗干扰

  46.   goto Error;
  47.                        
  48.   IB_CON5   = 0x06;
  49.             
  50.   _nop_();

  51.   _nop_();

  52.   _nop_();

  53.   _nop_();

  54. Error:

  55. ssp_flag= 0;

  56. IB_CON1= 0x00;

  57. IB_CON2= 0x00;

  58. IB_CON3= 0x00;

  59. IB_CON4= 0x00;

  60. IB_CON5= 0x00;

  61. FLASHCON= 0x00; //切回FLASH区

  62. _pop_(IEN0); //恢复总中断




tpgf 发表于 2023-3-3 11:36 | 显示全部楼层
在任何型号的单片机上操作eeprom都需要关闭中断
qcliu 发表于 2023-3-3 11:47 | 显示全部楼层
我们在写数据的时候必须保证写保护的正确使用
drer 发表于 2023-3-3 12:04 | 显示全部楼层
还得注意读写数据的读出写入地址逻辑关系
coshi 发表于 2023-3-3 12:15 | 显示全部楼层
读数据最后一个字节必须回应“非应答位”
kxsi 发表于 2023-3-3 13:08 | 显示全部楼层
要关注通信过程中的时序关系以及通信速率
wiba 发表于 2023-3-3 13:22 | 显示全部楼层
访问EEPROM必须使用汇编指令吗?是不是c语言也可以啊
OKAKAKO 发表于 2023-3-7 17:25 | 显示全部楼层
访问EEPROM应该用的汇编吧?有清楚的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

275

主题

2392

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部