Bas I2C — tugasan, peranti, pemindahan data, pengalamatan
Apabila mencipta litar elektronik, banyak pembangun berhadapan dengan keperluan untuk menggunakan sejumlah besar cip perantaraan untuk memadankan, mensampel dan menangani blok individunya. Untuk meminimumkan bilangan cip tambahan, Philips mencadangkan antara muka rangkaian bersiri dua hala I2C pada tahun 1980-an, direka khusus untuk mengurus berbilang cip dalam satu peranti.
Hari ini, Philips sahaja menghasilkan lebih daripada seratus peranti serasi I2C untuk peralatan elektronik dengan pelbagai tujuan: memori, sistem pemproses video, penukar analog-ke-digital dan digital-ke-analog, pemacu paparan, dsb.
Bas I2C ialah pengubahsuaian protokol pertukaran data bersiri yang mampu menghantar data bersiri 8-bit dalam mod "pantas" biasa pada kadar 100 hingga 400 kbps. Proses pertukaran data dilaksanakan di sini pada hanya dua wayar (tidak mengira wayar biasa): talian SDA untuk data dan talian SCL untuk penyegerakan.
Bas menjadi dua arah kerana fakta bahawa lata keluaran peranti yang disambungkan ke bas mempunyai pengumpul atau saluran terbuka, dengan itu mereplikasi pendawaian DAN. Akibatnya, bas meminimumkan bilangan sambungan antara cip, meninggalkan lebih sedikit pin dan kesan yang diperlukan pada papan. Akibatnya, papan itu sendiri ternyata lebih ringkas, lebih padat dan lebih maju dari segi teknologi dalam pengeluaran.
Protokol ini membolehkan anda melumpuhkan penyahkod alamat dan logik perundingan luaran yang lain. Bilangan cip yang boleh beroperasi secara serentak pada bas I2C dihadkan oleh kapasitinya — maksimum 400 pF.
IC yang serasi dengan I2C mempunyai algoritma penindasan hingar perkakasan untuk memastikan integriti data walaupun dalam kehadiran gangguan yang kuat. Peranti sedemikian mempunyai antara muka yang membolehkan litar mikro berkomunikasi antara satu sama lain walaupun voltan bekalannya berbeza. Dalam rajah di bawah, anda boleh membiasakan diri dengan prinsip menyambungkan beberapa litar mikro melalui bas biasa.
Setiap peranti yang disambungkan ke bas mempunyai alamat uniknya sendiri, ia ditentukan olehnya dan, mengikut tujuan peranti, ia boleh berfungsi sebagai penerima atau sebagai pemancar. Apabila menghantar data, peranti ini boleh menjadi tuan (tuan) atau hamba (hamba). Induk ialah peranti yang memulakan pemindahan data dan menjana isyarat jam pada talian SCL. Hamba, berhubung dengan tuan, adalah peranti destinasi.
Pada bila-bila masa operasi pada bas I2C, hanya satu peranti boleh bertindak sebagai induk; ia menjana isyarat pada talian SCL.Seorang induk boleh menjadi sama ada penerima induk atau pemancar induk.
Pada dasarnya, bas membenarkan beberapa tuan yang berbeza, tetapi mengenakan sekatan ke atas ciri-ciri membentuk isyarat kawalan dan memantau status bas; ini bermakna bahawa beberapa tuan boleh mula menghantar pada masa yang sama, tetapi konflik seperti ini dihapuskan terima kasih kepada timbang tara, iaitu, cara tuan berkelakuan apabila ia mengesan bahawa bas itu diduduki oleh tuan lain.
Penyegerakan sepasang peranti dipastikan oleh fakta bahawa semua peranti disambungkan ke bas, membentuk pendawaian "DAN". Pada mulanya, isyarat SDA dan SCL adalah tinggi.
MULA dan BERHENTI
Pertukaran bermula dengan induk menjana keadaan «MULA»: pada garisan SDA, isyarat pergi dari keadaan tinggi ke rendah, manakala garisan SCL mempunyai tahap tinggi yang stabil. Semua peranti yang disambungkan ke bas menganggap situasi ini sebagai arahan untuk memulakan pertukaran.
Setiap induk menjana isyarat jam individu pada talian SCL apabila menghantar data pada bas.
Pertukaran berakhir dengan pembentukan keadaan STOP oleh induk: pada garisan SDA isyarat berubah dari rendah ke tinggi, manakala garisan SCL mempunyai tahap tinggi yang stabil.
Pemandu sentiasa bertindak sebagai sumber isyarat MULA dan BERHENTI. Sebaik sahaja isyarat «MULA» ditetapkan, ini bermakna talian sedang sibuk. Talian adalah percuma apabila isyarat STOP dikesan.
Sejurus selepas mengisytiharkan keadaan MULA, induk menukar baris SCL rendah dan menghantar bit paling ketara bagi bait mesej pertama ke baris SDA. Bilangan bait dalam mesej tidak terhad.Perubahan pada talian SDA didayakan hanya apabila tahap isyarat pada talian SCL rendah. Data adalah sah dan tidak boleh ditukar hanya apabila nadi penyegerakan tinggi.
Pengakuan bahawa bait daripada pemancar induk telah diterima oleh penerima hamba dilakukan dengan menetapkan bit pengakuan khas pada baris SDA selepas bit data kelapan diterima.
PENGESAHAN
Oleh itu, penghantaran 8 bit data daripada pemancar kepada penerima berakhir dengan nadi tambahan pada talian SCL apabila peranti penerima menjadi rendah pada talian SDA, menunjukkan bahawa ia telah menerima keseluruhan bait.
Pengesahan adalah bahagian penting dalam proses pemindahan data. Induk menjana nadi penyegerakan. Pemancar menghantar keadaan rendah ke SDA semasa jam pengakuan aktif. Walaupun nadi penyegerakan tinggi, penerima mesti memastikan SDA rendah.
Jika hamba destinasi tidak mengakui alamatnya, contohnya kerana ia sedang sibuk, talian data mesti dipegang tinggi. Tuan boleh memberi isyarat STOP untuk membatalkan penghantaran.
Sekiranya penerimaan dilakukan oleh penerima induk, maka ia diwajibkan untuk memberitahu pemancar hamba selepas selesai penghantaran - bukan dengan mengesahkan bait terakhir. Pemancar hamba melepaskan talian data supaya tuan boleh mengeluarkan isyarat STOP atau isyarat MULA yang berulang.
Penyegerakan peranti dipastikan oleh fakta bahawa sambungan ke talian SCL dibuat mengikut prinsip "DAN".
Tuan tidak mempunyai hak tunggal untuk mengawal peralihan garis SCL dari rendah ke tinggi.Jika hamba memerlukan lebih banyak masa untuk memproses bit yang diterima, ia boleh menahan SCL rendah secara bebas sehingga ia bersedia untuk menerima bit data seterusnya. Garisan SCL dalam keadaan sedemikian akan menjadi rendah untuk tempoh nadi penyegerakan tahap rendah terpanjang.
Peranti dengan tahap terendah berkekalan rendah akan kekal melahu sehingga tempoh yang panjang tamat. Apabila semua peranti telah menamatkan tempoh penyegerakan rendah, SCL akan menjadi tinggi.
Semua peranti akan mula mencatat masa tinggi dan peranti pertama yang melengkapkan tempohnya akan menjadi yang pertama menetapkan garisan SCL rendah. Akibatnya, tempoh keadaan rendah SCL akan ditentukan oleh keadaan rendah terpanjang nadi penyegerakan salah satu peranti, dan tempoh keadaan tinggi akan ditentukan oleh tempoh penyegerakan terpendek bagi salah satu peranti. peranti.
Isyarat penyegerakan boleh digunakan oleh penerima sebagai cara mengawal penghantaran data pada tahap bit dan bait.
Jika peranti mampu menerima bait pada kadar yang tinggi, tetapi ia mengambil masa tertentu untuk menyimpan bait yang diterima atau bersedia untuk menerima bait seterusnya, ia mungkin terus mengekalkan SCL rendah selepas menerima dan mengakui bait , memaksa pemancar ke dalam keadaan siap sedia.
Mikropengawal tanpa litar perkakasan terbina dalam, contohnya pada tahap bit, boleh memperlahankan kelajuan jam dengan meningkatkan tempoh keadaan rendahnya. Akibatnya, kadar baud peranti induk akan ditentukan oleh kelajuan peranti yang lebih perlahan.
MENGALAMI
Setiap peranti yang disambungkan ke bas I2C mempunyai alamat program yang unik di mana tuan menanganinya dengan menghantar arahan tertentu. Litar mikro jenis yang sama dicirikan oleh pemilih alamat, dilaksanakan sama ada dalam bentuk input digital pemilih, atau dalam bentuk analog. Alamat dibahagikan kepada ruang alamat peranti yang disambungkan ke bas.
Mod biasa menganggap pengalamatan tujuh bit. Pengalamatan berfungsi seperti berikut: selepas arahan «MULA», tuan menghantar bait pertama, yang menentukan peranti hamba mana yang diperlukan untuk berkomunikasi dengan tuan. Terdapat juga alamat panggilan biasa yang mentakrifkan semua peranti pada bas, semua peranti (secara teorinya) membalasnya dengan pengakuan, tetapi dalam amalan ini jarang berlaku.
Jadi tujuh bit pertama bait pertama ialah alamat hamba. Bit yang paling tidak ketara, yang kelapan, menunjukkan arah penghantaran data. Jika terdapat «0», maka maklumat akan ditulis daripada tuan kepada hamba ini. Jika «1», maklumat akan dibaca oleh tuan daripada hamba ini.
Selepas tuan selesai menghantar bait alamat, setiap hamba membandingkan alamatnya dengannya. Sesiapa sahaja yang mempunyai alamat yang sama ialah hamba dan ditakrifkan sebagai penghantar hamba atau penerima hamba, bergantung pada nilai bit paling tidak ketara bagi bait alamat.
Alamat hamba boleh termasuk bahagian tetap dan boleh diprogramkan. Selalunya sebilangan besar peranti jenis yang sama berfungsi dalam satu sistem, maka bahagian alamat yang boleh diprogramkan membolehkan penggunaan maksimum jenis peranti yang sama pada bas. Berapa banyak bit dalam bait alamat boleh diprogramkan bergantung pada bilangan pin percuma pada cip.
Kadangkala pin dengan tetapan analog bagi julat alamat boleh atur cara adalah mencukupi, contohnya SAA1064 - pemacu penunjuk LED yang mempunyai pelaksanaan sedemikian. Potensi pin tertentu menentukan offset ruang alamat cip supaya cip daripada jenis yang sama tidak bercanggah beroperasi pada bas yang sama. Semua cip yang menyokong bas I2C mengandungi satu set alamat yang ditentukan oleh pengilang dalam dokumentasi.
Gabungan «11110XX» dikhaskan untuk pengalamatan 10-bit. Jika kita bayangkan pertukaran data daripada arahan «MULA» kepada arahan «BERHENTI», ia akan kelihatan seperti ini:
Format pertukaran data ringkas dan gabungan dibenarkan di sini. Format gabungan bermakna antara «MULA» dan «BERHENTI» tuan dan hamba boleh bertindak sebagai penerima dan pemancar, ini berguna sebagai contoh dalam pengurusan memori bersiri.
Biarkan bait pertama data memindahkan alamat memori. Kemudian, mengulangi arahan «MULA» dan membaca alamat hamba, data memori akan berfungsi. Keputusan untuk menambah atau mengurangkan secara automatik alamat yang diakses sebelum ini dibuat oleh pembangun peranti selepas mempelajari dokumentasi cip sebelum ini. Satu cara atau yang lain, selepas menerima arahan START, semua peranti mesti memulihkan logiknya dan bersedia untuk fakta bahawa alamat itu kini akan dinamakan.