現在、ビットバンギングを使用してSDAおよびSCLラインを駆動するI2C EEPROMプロジェクトに取り組んでいます。
私の読み取り機能は正常に動作しますが、先頭に「1」が付いたバイトを書き込むときはいつでも、常にFFを読み取ります。バイトが以前に何か他のものでプログラムされていても。先頭の「0」は完璧です。これは私の読み取りルーチンではありません。スコープで確認できるように、FFを返します。
これがなぜであるかについての提案を探しています。問題を引き起こす可能性のある明らかなミスはありますか?[コードを投稿できません-会社の機密情報... :(]
私が見るすべての波形は、仕様を正確に満たしています。EEPROMを分離しています。私のプルアップは2.2kなので、仕様の範囲内です。このプロトタイプでは、約500 Hzでクロッキングしています。チップは各バイトにACKを送信しているため、それらを認識します。しかし、それはうまくいきません...
Microchip 24LC256を使用しています。
1バイトの簡略化された書き込みアルゴリズム:
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
1バイトの簡略化された読み取りアルゴリズム:
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