Saat ini saya sedang mengerjakan proyek I2C EEPROM menggunakan bit-banging untuk menggerakkan jalur SDA dan SCL.
Fungsi baca saya berfungsi dengan baik tetapi setiap kali saya menulis byte dengan "1" yang memimpin, saya selalu membaca FF kembali; bahkan jika byte telah diprogram dengan sesuatu yang lain sebelumnya. Memimpin "0" sempurna. Ini bukan rutinitas membaca saya; seperti yang saya lihat pada lingkup mengembalikan FF.
Saya mencari saran mengapa ini terjadi. Adakah yang jelas saya bisa lewatkan yang dapat menyebabkan masalah? [Saya tidak dapat memposting kode - rahasia perusahaan ... :(]
Setiap bentuk gelombang yang saya lihat memenuhi spesifikasi persis. Saya memisahkan EEPROM. Pull up saya 2.2k jadi dalam spec. Saya bekerja sekitar 500 Hz dalam prototipe ini. Chip mengirimkan ACK ke masing-masing byte saya sehingga mengenali mereka. Tapi itu tidak berhasil ...
Saya menggunakan Microchip 24LC256 .
Algoritma penulisan sederhana untuk satu byte:
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
Algoritma pembacaan sederhana untuk satu byte:
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