|
今天用读写器把英飞凌的SPD参数全部读出备份了,然后修改0x1e的值,把28改成23,没想到写进去后重新读出来,还是28没变化,又刷写了几遍,还是没有变化。开始以为是WP脚接高电平起保护了,用万用表一测,WP接GND,没有打开硬件保护。于是怀疑写程序有问题,翻查了N多I2C时序资料和24C02读写例程,没发现自己写的程序有什么不妥。后来在代码里逐步加入调试语句时发现,在写入操作时,写设备地址正常,写操作命令正常,写数据地址也正常,问题出在写数据时,竟然没有收到被写器件的ACK回应。正常来说每写完一个byte后,SPD芯片应该把SDA电平拉低来回应(通知单片机它已经正常接收了一个字节并写入,可以继续发下一个数据)。从症状来看,非常像是SPD芯片损坏导致不能写了,但无意中发现,竟然只是前128字节的存储空间无法改写,后128字节是可以随意改写的!鉴于无法改写的空间是0~128,非常有规律的存储空间,于是不得不怀疑芯片具有某种保护功能。于是上www.alldatasheet.com输入芯片型号34Y02查询,没查到有这种芯片,鉴于24Y02是24C02的一种特殊封装芯片,于是重新输入34C02查询,结果真的查到一堆芯片的datasheet,下载了ATMEL公司的一看,原来34C02(34Y02)是带软件保护功能的EEPROM,芯片里有一个保护寄存器,按24C02的写方法写入数据后,再写入一个特殊的控制命令对保护寄存器置1,芯片的前128字节内容就会受到保护,无法被改写,而后128字节内容还可以随意改写。从datasheet来看,对保护寄存器的操作是一次性不可逆的,也就是说写保护后,就无法解保护了,前128字节的内容永远没法修改。 |
|