Şu anda SDA ve SCL hatlarını sürmek için bit beceriyor kullanarak bir I2C EEPROM projesi üzerinde çalışıyorum.
Okuma fonksiyonum iyi çalışıyor ancak her "1" ile bir bayt yazdığımda, daima FF'yi geri okuyorum; bayt daha önce başka bir şeyle programlanmış olsa bile. Başta "0" mükemmel. Benim okuma rutinim değil; kapsamda görebildiğim gibi FF döndürüyor.
Bunun neden olabileceğine dair öneriler arıyorum. Soruna neden olabilecek özlediğim bir şey var mı? [Kodu gönderemiyorum - şirket gizli ... :(]
Baktığım her dalga formu tam olarak teknik özellikleri karşılar. EEPROM'u ayırıyorum. Benim pull up 2.2k kadar spec içinde. Bu prototipte yaklaşık 500 Hz hızında çalışıyorum. Çip, baytlarımın her birine ACK gönderiyor, böylece onları tanıyor. Ama işe yaramıyor ...
Bir Microchip 24LC256 kullanıyorum .
Bir bayt için basitleştirilmiş yazma algoritması:
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
Bir bayt için basitleştirilmiş okuma algoritması:
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