Bus I2C — penugasan, perangkat, transfer data, pengalamatan
Saat membuat sirkuit elektronik, banyak pengembang dihadapkan pada kebutuhan untuk menggunakan sejumlah besar chip perantara untuk mencocokkan, mengambil sampel, dan menangani blok individualnya. Untuk meminimalkan jumlah chip tambahan, Philips mengusulkan antarmuka jaringan serial I2C dua arah dua arah pada tahun 1980-an, yang dirancang khusus untuk mengelola banyak chip dalam satu perangkat.
Saat ini, Philips sendiri memproduksi lebih dari seratus perangkat yang kompatibel dengan I2C untuk peralatan elektronik dengan berbagai keperluan: memori, sistem prosesor video, konverter analog-ke-digital dan digital-ke-analog, driver tampilan, dll.
Bus I2C adalah modifikasi dari protokol pertukaran data serial yang mampu mentransmisikan data serial 8-bit dalam mode "cepat" biasa dengan kecepatan 100 hingga 400 kbps. Proses pertukaran data diimplementasikan di sini hanya pada dua kabel (tidak termasuk kabel biasa): jalur SDA untuk data dan jalur SCL untuk sinkronisasi.
Bus menjadi bi-directional karena kaskade output perangkat yang terhubung ke bus memiliki kolektor atau saluran terbuka, sehingga mereplikasi kabel AND. Akibatnya, bus meminimalkan jumlah koneksi antar chip, menyisakan lebih sedikit pin dan jejak yang diperlukan di papan tulis. Hasilnya, papan itu sendiri menjadi lebih sederhana, lebih kompak, dan secara teknologi lebih maju dalam produksi.
Protokol ini memungkinkan Anda untuk menonaktifkan decoder alamat dan logika negosiasi eksternal lainnya. Jumlah chip yang dapat beroperasi secara bersamaan pada bus I2C dibatasi oleh kapasitasnya — maksimal 400 pF.
IC yang kompatibel dengan I2C memiliki algoritme peredam derau perangkat keras untuk memastikan integritas data bahkan di hadapan interferensi yang kuat. Perangkat semacam itu memiliki antarmuka yang memungkinkan sirkuit mikro untuk berkomunikasi satu sama lain meskipun voltase pasokannya berbeda. Pada gambar di bawah ini, Anda dapat membiasakan diri dengan prinsip menghubungkan beberapa sirkuit mikro melalui bus umum.
Setiap perangkat yang terhubung ke bus memiliki alamat uniknya sendiri, ditentukan olehnya dan, sesuai dengan tujuan perangkat, dapat berfungsi sebagai penerima atau sebagai pemancar. Saat mentransmisikan data, perangkat ini dapat menjadi master (master) atau budak (slave). Master adalah perangkat yang memulai transfer data dan menghasilkan sinyal clock pada jalur SCL. Budak, dalam kaitannya dengan master, adalah perangkat tujuan.
Pada saat operasi tertentu pada bus I2C, hanya satu perangkat yang dapat bertindak sebagai master; itu menghasilkan sinyal pada jalur SCL.Master dapat berupa penerima master atau pemancar master.
Pada prinsipnya, bus mengizinkan beberapa master yang berbeda, tetapi membatasi karakteristik pembentukan sinyal kontrol dan memantau status bus; ini berarti bahwa beberapa master dapat mulai mentransmisikan pada saat yang sama, tetapi konflik semacam ini dihilangkan berkat arbitrase, yaitu cara master berperilaku ketika mendeteksi bahwa bus ditempati oleh master lain.
Sinkronisasi sepasang perangkat dipastikan dengan fakta bahwa semua perangkat terhubung ke bus, membentuk kabel "DAN". Awalnya, sinyal SDA dan SCL tinggi.
MULAI dan BERHENTI
Pertukaran dimulai dengan master menghasilkan status «MULAI»: pada jalur SDA, sinyal beralih dari status tinggi ke rendah, sedangkan jalur SCL memiliki level tinggi yang stabil. Semua perangkat yang terhubung ke bus menganggap situasi ini sebagai perintah untuk memulai pertukaran.
Setiap master menghasilkan sinyal clock individual pada jalur SCL saat mengirimkan data pada bus.
Pertukaran diakhiri dengan pembentukan status STOP oleh master: pada jalur SDA, sinyal berubah dari rendah ke tinggi, sedangkan jalur SCL memiliki level tinggi yang stabil.
Pengemudi selalu bertindak sebagai sumber sinyal START dan STOP. Segera setelah sinyal «MULAI» diperbaiki, itu berarti saluran sedang sibuk. Saluran bebas saat sinyal STOP terdeteksi.
Segera setelah mendeklarasikan status START, master mengalihkan jalur SCL menjadi rendah dan mengirimkan bit paling signifikan dari byte pesan pertama ke jalur SDA. Jumlah byte dalam pesan tidak terbatas.Perubahan pada jalur SDA diaktifkan hanya ketika level sinyal pada jalur SCL rendah. Data valid dan tidak boleh diubah hanya saat pulsa sinkronisasi tinggi.
Pengakuan bahwa byte dari pemancar master telah diterima oleh penerima budak dilakukan dengan menetapkan bit pengakuan khusus pada saluran SDA setelah bit data kedelapan diterima.
KONFIRMASI
Jadi, pengiriman 8 bit data dari pemancar ke penerima berakhir dengan pulsa ekstra pada saluran SCL saat perangkat penerima menjadi rendah pada saluran SDA, yang menunjukkan bahwa ia telah menerima seluruh byte.
Konfirmasi merupakan bagian integral dari proses transfer data. Master menghasilkan pulsa sinkronisasi. Pemancar mengirimkan status rendah ke SDA saat jam konfirmasi aktif. Saat pulsa sinkronisasi tinggi, penerima harus menjaga agar SDA tetap rendah.
Jika slave tujuan tidak mengetahui alamatnya, misalnya karena sedang sibuk, jalur data harus dibuat tinggi. Master kemudian dapat memberikan sinyal STOP untuk membatalkan pengiriman.
Jika penerimaan dilakukan oleh penerima utama, maka pemancar budak wajib memberi tahu setelah transmisi selesai - bukan dengan mengonfirmasi byte terakhir. Pemancar slave melepaskan jalur data sehingga master dapat mengeluarkan sinyal STOP atau sinyal START berulang.
Sinkronisasi perangkat dipastikan dengan fakta bahwa koneksi ke jalur SCL dibuat sesuai dengan prinsip "DAN".
Master tidak memiliki hak tunggal untuk mengontrol transisi jalur SCL dari rendah ke tinggi.Jika slave membutuhkan lebih banyak waktu untuk memproses bit yang diterima, slave dapat menahan SCL secara mandiri hingga siap menerima bit data berikutnya. Garis SCL dalam situasi seperti itu akan menjadi rendah selama durasi pulsa sinkronisasi level rendah terlama.
Perangkat dengan low berkelanjutan terendah akan tetap menganggur hingga periode panjang berakhir. Ketika semua perangkat telah menyelesaikan periode sinkronisasi rendah, SCL akan menjadi tinggi.
Semua perangkat akan memulai clocking tinggi dan perangkat pertama yang menyelesaikan periodenya akan menjadi yang pertama menyetel jalur SCL rendah. Akibatnya, durasi keadaan rendah SCL akan ditentukan oleh keadaan rendah terpanjang dari pulsa sinkronisasi salah satu perangkat, dan durasi keadaan tinggi akan ditentukan oleh periode sinkronisasi terpendek dari salah satu perangkat. perangkat.
Sinkronisasi sinyal dapat digunakan oleh penerima sebagai sarana untuk mengontrol transmisi data pada tingkat bit dan byte.
Jika perangkat mampu menerima byte dengan kecepatan tinggi, tetapi membutuhkan waktu tertentu untuk menyimpan byte yang diterima atau bersiap untuk menerima byte berikutnya, perangkat dapat terus menahan SCL rendah setelah menerima dan mengakui byte, memaksa pemancar ke keadaan siaga.
Mikrokontroler tanpa sirkuit perangkat keras bawaan, misalnya pada level bit, dapat memperlambat kecepatan clock dengan meningkatkan durasi status rendahnya. Akibatnya, baud rate perangkat master akan ditentukan oleh kecepatan perangkat master. perangkat yang lebih lambat.
ALAMAT
Setiap perangkat yang terhubung ke bus I2C memiliki alamat program unik di mana master mengalamatkannya dengan mengirimkan perintah tertentu. Sirkuit mikro dengan tipe yang sama dicirikan oleh pemilih alamat, yang diimplementasikan baik dalam bentuk input digital pemilih, atau dalam bentuk analog. Alamat dibagi ke dalam ruang alamat perangkat yang terhubung ke bus.
Mode normal mengasumsikan pengalamatan tujuh-bit. Pengalamatan berfungsi sebagai berikut: setelah perintah «MULAI», master mengirimkan byte pertama, yang menentukan perangkat budak mana yang diperlukan untuk berkomunikasi dengan master. Ada juga alamat panggilan umum yang menentukan semua perangkat di bus, semua perangkat (secara teoritis) meresponsnya dengan pengakuan, tetapi dalam praktiknya hal ini jarang terjadi.
Jadi tujuh bit pertama dari byte pertama adalah alamat slave. Bit yang paling tidak signifikan, kedelapan, menunjukkan arah pengiriman data. Jika ada «0», maka informasi akan ditulis dari master ke slave ini. Jika «1», informasi akan dibaca oleh master dari budak ini.
Setelah master selesai mengirim byte alamat, setiap budak membandingkan alamatnya dengannya. Siapa pun dengan alamat yang sama adalah seorang budak dan didefinisikan sebagai pemancar budak atau penerima budak, tergantung pada nilai bit signifikan terkecil dari byte alamat.
Alamat budak dapat mencakup bagian tetap dan dapat diprogram. Cukup sering sejumlah besar perangkat dengan jenis yang sama bekerja dalam satu sistem, maka bagian alamat yang dapat diprogram memungkinkan penggunaan maksimum perangkat dengan jenis yang sama di bus. Berapa banyak bit dalam byte alamat yang dapat diprogram tergantung pada jumlah pin bebas pada chip.
Terkadang pin dengan pengaturan analog dari rentang alamat yang dapat diprogram sudah cukup, misalnya SAA1064 - driver indikator LED yang memiliki implementasi seperti itu. Potensi pin tertentu menentukan offset ruang alamat chip sehingga chip dengan tipe yang sama tidak bertentangan beroperasi pada bus yang sama. Semua chip yang mendukung bus I2C berisi sekumpulan alamat yang ditentukan pabrikan dalam dokumentasi.
Kombinasi «11110XX» dicadangkan untuk pengalamatan 10-bit. Jika kita membayangkan pertukaran data dari perintah «MULAI» ke perintah «STOP», akan terlihat seperti ini:
Format pertukaran data sederhana dan gabungan diperbolehkan di sini. Format gabungan berarti bahwa antara «START» dan «STOP» master dan slave dapat bertindak sebagai penerima dan pemancar, hal ini berguna misalnya dalam manajemen memori serial.
Biarkan byte pertama dari data mentransfer alamat memori. Kemudian, mengulangi perintah «MULAI» dan membaca alamat budak, data memori akan berfungsi. Keputusan untuk secara otomatis menambah atau mengurangi alamat yang diakses sebelumnya dibuat oleh pengembang perangkat setelah sebelumnya mempelajari dokumentasi chip. Dengan satu atau lain cara, setelah menerima perintah MULAI, semua perangkat harus memulihkan logikanya dan mempersiapkan fakta bahwa alamat tersebut sekarang akan diberi nama.