最近在使用Atmel EEPROM芯片时遇到一个问题,如果连续2次写入之间的间隔太短,可能会造成第二次写入失败,这个涉及到芯片手册中的Write Cycle参数。
分析
这里以AT24C256举例,其芯片手册上有Write Cycle的范围,如下图红框,
这里给的是最大时间,10ms或者5ms,对应AT24C256中不同型号的芯片。
然后手册中又给出Write Cycle的定义,
简单来说:当一次I2C写入结束(以STOP Condition为标志,其实这只是传输数据完毕),芯片会开始把数据写入到内部的存储电路上,等真正存储完毕才算结束。
Write Cycle就是I2C写入操作结束到芯片真正把数据存储好这段时间。所以,如果第二次的写入操作发生Write Cycle之内,那么就会失败,表现就是芯片会返回NACK,而不是ACK。
解决办法
知道原理就好解决了:如果写操作时芯片返回NACK,那么只需不断重复写操作,直到芯片返回ACK