I2C Protocol Subtleties, Bagian 2: Hilang MULAI

Ini adalah yang kedua dalam serangkaian artikel tentang aspek yang lebih halus dari protokol I2C (yang mencakup implementasi TWI dan SMBus juga). Dalam artikel sebelumnya, kami membahas pendekatan perangkat keras dan perangkat lunak dasar untuk menerapkan dukungan untuk I2C, sebagai Master atau sebagai Budak. Artikel ini akan membahas kondisi kesalahan Missing Start.

Apa itu START yang "normal"?

Sesuai spesifikasi I2C, START didefinisikan sebagai garis SDA yang jatuh sementara SCL tetap tinggi. Ini secara teoritis dapat terjadi pada titik mana pun selama transmisi, dan harus mengatur ulang semua perangkat I2C Slave (dan Master juga, dalam lingkungan multi-master) untuk siap menerima transmisi Alamat Slave. Tentu saja, memiliki ini terjadi dalam keadaan selain kondisi Bus Idle atau sambil menunggu STOP kemungkinan kesalahan (START Tak Terduga); ini akan dibahas dalam artikel selanjutnya.

Apa yang dimaksud dengan START "hilang"?

Kondisi Awal yang Hilang dapat terjadi jika keadaan bus saat ini memungkinkan START atau MULAI DIMULAI sebagai keadaan berikutnya, tetapi sebaliknya melihat SCL jatuh (dengan SDA menjadi tinggi atau rendah, tetapi umumnya akan tinggi). Kondisi sebelumnya akan meliputi: (a) Bus Menganggur, diikuti dengan MULAI; (B) NAK telah dikirim oleh perangkat Slave setelah operasi Baca, diikuti dengan MULAI DI MULAI, atau (c) NAK telah dikirim oleh Master setelah operasi Tulis, diikuti dengan MULAI DI MULAI. Dalam kasus ACK yang dikirim oleh Master atau Slave, tidak mungkin mendeteksi 'missing' START sejak START atau START berulang tidak diperlukan dalam situasi seperti ini.

Menurut definisi, kondisi Bus Idle hanya dapat tiba setelah STOP dikeluarkan (meskipun pada saat Startup, kondisi Idle biasanya dapat diasumsikan setelah Master diinisialisasi). Selama Idle Bus, SDA dan SCL didefinisikan sebagai keduanya tinggi. Menghasilkan kesalahan Mulai Hilang dalam kasus ini mengharuskan SCL jatuh saat SDA tetap tinggi. Pertanyaannya bisa ditanyakan, Apakah mungkin untuk memulihkan data yang valid bahkan dalam skenario ini? Di I2C, SCL yang jatuh menandakan bahwa Transmitter (Master atau Slave) sekarang dapat maju ke bit data berikutnya dan memperbarui baris SDA. Namun, tidak ada bit data valid sebelumnya. Perangkat slave harus diharapkan untuk mengabaikan aktivitas SCL sampai START yang valid terlihat, karena Slave seharusnya tidak menerima Slave Address tanpa START yang valid yang mendahuluinya.

Setelah kondisi NAK, keadaan bus berikutnya harus berupa STOP atau START berulang. Jika aktivitas terlihat pada SCL setelah NAK, dapat diasumsikan bahwa START MULAI hilang, karena STOP tidak dikeluarkan (dan karena itu bus tetap di bawah kendali Master saat ini). Perangkat budak kemungkinan tidak akan memperlakukan byte pertama mengikuti NAK sebagai Alamat Slave, karena START atau START berulang diperlukan untuk menyiapkan perangkat Slave untuk menerima alamat baru. Pertanyaan tentang bagaimana Slave yang saat ini aktif menanggapi pencatatan tambahan setelah NAK bergantung pada perangkat, tetapi data apa pun yang disajikan umumnya harus dilihat sebagai tidak valid.

Artikel berikutnya dalam seri ini akan fokus pada kesalahan Hentikan Berhenti. Terima kasih sudah membaca!

Leave a Reply

Your email address will not be published. Required fields are marked *