这几天开发eeprom功能的时候,利用单片机的I2C接口访问AT24C16.遇到一个问题:
发现AT24C16的最后一页写不进去.表现为写任何值后,再读取都是0.
经过几天的排查,发现是应为在I2C总线上还挂了一个时钟芯片X1226 ,它与AT24c16在高区间会有地址冲突的问题.
关于AT24C16的详细介绍,见文献:https://blog.csdn.net/liukais/article/details/85944645
下图是X1226时钟芯片的当前地址读时序.
下图是AT24C16的当前地址读时序,
可见,当访问AT24C16的高地址(最后一页),其device address 将变为 1010 111x, 这和X1226的device address(slave addre) 1xxx 111x 产生冲突!
解决办法,由于暂时不用X1226,将其从pcb拿掉,问题解决!