1、现象,最近产品一直检出EEPROM参数写入值和读取值不同的故障。
2、比如说往地址0x0000写入10(Dec),但从eeprom读取地址0x0000,读出的值变成了128。
3、调查后发现是eeprom在写入过程中被另一个优先级较高的中断中的读eeprom的操作打断,造成被打断的写eeprom数据异常。
4、eeprom读写IIC时序
4.3 eeprom读取时序
start A0 ack word_addr_Hi ack word_addr_Low ack start A1 ack char_data noack stop
4.2 eeprom写入时序
start A0 ack word_addr_Hi ack word_addr_Low ack char_data ack stop
现在main函数中写eeprom操作执行到上图1、2、3、4、5任意一处时,有一个中断函数进来,该中断中要进行eeprom读取或写入操作,待结束后,main函数中写eeprom的数据就会出现异常改变,即要写入10,但读取出来的确实128。
5、解决
将所有读写eeprom的操作都在同一个进程中完成。