如果EEPROM的最小擦除单位是字节,那为什么还不能跨页写?
实际上,EEPROM的擦除操作通常是按页面进行的,而不是按字节进行的。虽然EEPROM支持按字节进行编程操作(1->0),但擦除操作(0->1)通常需要按页面进行。下面我将详细解释这一点。
EEPROM的擦除和编程特性
编程操作:编程是指将比特位从1变为0的操作。在EEPROM中,编程是通过改变晶体管的阈值电压来实现的。当晶体管被编程时,其阈值电压升高,使得晶体管在较低的电压下保持关闭状态,表示0状态。
擦除操作:擦除是指将比特位从0变为1的操作。擦除操作通常涉及较高的电压,目的是降低晶体管的阈值电压,使其在较低的电压下导通,表示1状态。擦除操作通常需要按页面进行。
EEPROM的页面结构
EEPROM被划分为多个页面,每个页面都有固定的大小。一个页面内的所有位必须同时擦除,但可以单独编程,这其实与Flash擦写方式类似。
跨页写的缺点
数据保护:如果允许跨页写入,那么在一个页面的部分数据写入过程中可能会中断,导致数据不一致或损坏。为了避免这种情况,通常要求写入操作发生在同一个页面内。
性能考虑:即使技术上可能实现跨页写入,这也可能导致效率降低,因为每次写入后可能需要检查并修正数据完整性。
总结
如果需要写入的数据都在同个页面,那么只需发起一次IIC通讯即可,若超过页范围,则超出的数据将覆盖至页首;而需要写入的数据在两个连续的页面,则需发起两次IIC通讯,写完第一个页的数据再写第二个页的数据。
在EEPROM内部,逻辑单元会从EEPROM中读取该页的数据复制至数据缓冲区(一般与页大小相同),然后与待写入的数据合并,擦除整页后将完整的页面数据写回到EEPROM中。