我目前正在使用位撞击驱动SDA和SCL线的I2C EEPROM项目。
我的读取功能可以正常工作,但是每当我写任何以“ 1”开头的字节时,我总会读回FF。即使该字节之前已经用其他方式编程过。领先的“ 0”是完美的。这不是我的阅读习惯;正如我在示波器上看到的那样,它返回FF。
我正在寻找关于为什么会这样的建议。有什么明显的我可能会引起问题的原因吗?[我无法发布代码-公司机密... :(]
我看到的每个波形都完全符合规范。我正在去耦EEPROM。我的引体向上是2.2k,所以在规格范围内。在此原型中,我的时钟频率约为500 Hz。芯片正在向我的每个字节发送ACK,以便识别它们。但这是行不通的...
我正在使用Microchip 24LC256。
一个字节的简化写入算法:
wait
SDA low
SCL low
wait
for each bit
if bit is set: SDA high
if bit is unset: SDA low
wait
SCL high
wait
wait
SCL low
wait
wait
SDA high
SCL high
wait
wait
check ACK status
SDA low
SCL low
wait
return ACK status
一个字节的简化读取算法:
wait
SCL low
SDA high
for each bit (8 bits)
SCL high
wait
wait
SCL low
wait
check and store received bit
wait
do a NACK or ACK depending on if it is the last byte