[其它应用] 中颖EEPROM 操作

[复制链接]
770|3
 楼主| zhamatu 发表于 2020-2-26 22:03 | 显示全部楼层 |阅读模式
  1. 中颖EEPROM,使用比较方便,但有个注意点,就是每次无论你写入
  2.         什么数据或者在哪个地址写数据,都需要将对 对应的块擦除,擦
  3.         除后才能写入成功。
  4. */
  5. #define         SSPWriteFlag          0x5A
  6. #define         SSPEraseFlag          0xA5       

  7. //数据区 扇形区1
  8. #define                ADDR_START1                                (uint16)0x100 //数据存储区起始地址

  9. #define                ADDR_START2                                (uint16)0x200 //数据存储区起始地址
  10. //数据区 扇形区2
  11. #define                Addr1UserHave                        (uint16)0x101 //用户地址1
  12. #define                Addr2UserHave                        (uint16)0x102 //用户地址2

  13. uint8 Ssp_Flag = 0 ;

  14. //*************************************
  15. // 函数名称:Ssp_Write
  16. // 函数功能:SSP擦除某块的地址
  17. // 入口参数:被写数据的地址 数据
  18. // 出口参数:无
  19. //***************************************
  20. void Ssp_EraseBlock(uint16 addr)
  21. {
  22.         CY=EA;
  23.         EA=0;
  24.         IB_CON1 = 0xE6;
  25.         IB_CON2 = 0x05;
  26.         IB_CON3 = 0x0A;
  27.         IB_CON4 = 0x09;
  28.         if(Ssp_Flag != SSPEraseFlag)
  29.                 {
  30.                         IB_CON2=0;
  31.                         goto Erase_Err;
  32.                 }
  33.         XPAGE = (addr>>8) & 0x07;          
  34.         FLASHCON=1;
  35.         IB_CON5 = 0x06;
  36.         _nop_();
  37.         _nop_();
  38.         _nop_();
  39. Erase_Err:
  40.         Ssp_Flag=0;       
  41.         FLASHCON=0;
  42.         XPAGE=0;
  43.         EA = CY;
  44. }



 楼主| zhamatu 发表于 2020-2-26 22:04 | 显示全部楼层
  1. //**************************************
  2. // 函数名称:Ssp_Write
  3. // 函数功能:SSP向某地址写一字节数据
  4. // 入口参数:被写数据的地址 数据
  5. // 出口参数:无
  6. //***************************************
  7. void Ssp_WriteByte(uint16 addr,uint8 dat)
  8. {
  9.         CY=EA;
  10.         EA=0;
  11.         IB_DATA = dat;
  12.         IB_OFFSET = addr&0xff; //取被编程的低8位地址
  13.         IB_CON1 = 0x6E;
  14.         IB_CON2 = 0x05;
  15.         IB_CON3 = 0x0A;
  16.         IB_CON4 = 0x09;
  17.         if(Ssp_Flag != SSPWriteFlag)
  18.         {
  19.                 IB_CON2=0;
  20.                 goto Write_Err;
  21.         }
  22.         XPAGE = ((addr>>8) & 7); //被编程的扇形区0-3          
  23.         FLASHCON=1;        //对类EPROM编程开始
  24.         IB_CON5 = 0x06;
  25.         _nop_();
  26.         _nop_();
  27.         _nop_();
  28.         _nop_();
  29. Write_Err:
  30.         Ssp_Flag=0;
  31.         FLASHCON=0;
  32.         XPAGE=0;
  33.         EA = CY;
  34. }
 楼主| zhamatu 发表于 2020-2-26 22:06 | 显示全部楼层
  1. //*************************************
  2. // 函数名称:Read_Flash
  3. // 函数功能:读数据 向FLASH
  4. // 入口参数:读数据的地址
  5. // 出口参数:无
  6. //***************************************
  7. uint8 Read_FlashByte(uint16 addr)
  8. {
  9.         uint8 temp;
  10.         FLASHCON=1;
  11.         temp=*(uint8 code *)(addr);
  12.            FLASHCON=0;
  13.         return(temp);
  14. }


  15. //应用实例:
  16. Ssp_EraseBlock(ADDR_START1);//擦除块1
  17. Ssp_WriteByte(Addr1UserHave,0x88);//在地址Addr1UserHave中写入0x88
  18. R_Data = Read_FlashByte(Addr1UserHave);//读地址Addr1UserHave的值
eanry 发表于 2020-2-27 11:44 | 显示全部楼层
通用操作?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

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