使用MCU内部flash模拟EEPROM的简易算法-EFM32ZG平台

       flash较之eeprom的一大缺点是擦除以页或扇区为单位。这样带来的问题是,即使用户只需要修改一个字节的内容,必须先擦除该字节所在的整页,然后还要将之前该页已存在的内容重复写入flash。如果主机每两次写之间不加延时,很大可能导致写入失败或其他问题

       大多数应用场景中,该缺点不会显得那么突出,因为用户通常只需要修改一次flash即可完成自己的需求。在某些特殊场景下,

用户会对一块已经有数据的flash区域进行内容修改,接口通过IIC,单字节操作。这样若用户两次写操作间隔很短,因为每次写flash需要先进行擦除,占用比较长的时间,是无法实现此需求的。

      EFM32ZG平台flash分为main block(32K)+UD page(1K)。

    因此想到用UD做写缓冲,每次上电判断UD区是否有内容更新。若有,更新到对应用户EEPROM。

     这样即可实现,每次用户写操作,MCU不需要先进行擦除操作,因为总有一块区域是全FFh的,可以随时以单字节写入方式进行操作,省去擦除的时间。

    该简易算法已经在我们的SFP+光模块产品上实现。

       

你可能感兴趣的:(使用MCU内部flash模拟EEPROM的简易算法-EFM32ZG平台)