我目前正在开发一个 I2C EEPROM 项目,使用 bit-banging 来驱动 SDA 和 SCL 线。
我的读取功能工作正常,但每当我写任何带有前导“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