Apakah ada jumlah maksimum budak i2c yang dapat dikendarai oleh master i2c? Apa faktor pembatas fisik?
Apakah ada jumlah maksimum budak i2c yang dapat dikendarai oleh master i2c? Apa faktor pembatas fisik?
Jawaban:
Faktor pembatas perangkat lunak adalah ukuran alamat yang digunakan untuk budak: 7-bit atau 10-bit, yang masing-masing mendukung 127 dan 1023 perangkat. Secara fisik, ada dua batasan. Pertama, ukuran fisik bus karena bus hanya diperuntukkan untuk jangka pendek (bagian antar IC). Jika bus terlalu besar ada efek pemuatan kapasitif dan keterlambatan propagasi yang perlu ditangani. Kedua, beberapa perangkat tidak dapat mendukung berbagai alamat I2C. Sebagai contoh, giroskop MPU6050 hanya mendukung dua alamat, dan beberapa perangkat mencadangkan alamat khusus untuk tujuan khusus.
Mengatasi batas jumlah perangkat - beberapa dapat menggunakan pengalamatan 10-bit (cukup jarang digunakan), yang membatasi jumlah alamat hingga 1024. Ada beberapa alamat 'khusus'.
I2C (sebagai lawan dari "bus dua kawat" atau apa pun yang orang lain ingin sebut bus serupa), harus mengikuti standar NXP (née Philips), spesifikasi bus I10 - I10 - UM4 dan manual pengguna . Itu harus menjadi dokumen referensi utama Anda, bukan berbagai interpretasi dan himpunan bagian yang ada di tempat lain.
Jumlah maksimum perangkat akan dipengaruhi oleh kemampuan drive dari keluaran terlemah (yang pada gilirannya menentukan resistor pullup minimum), kabel dan kapasitansi input, dan mode / frekuensi operasi. Lihat bagian 7.2 Mengoperasikan di atas kapasitansi bus maksimum yang diijinkan jika kapasitansi maksimum harus dilampaui:
Bus i2c dibatasi terutama oleh kapasitansi bus (dan dengan demikian kecepatan), dan alamat perangkat yang dapat diakses. Dan ruang papan fisik.
Tetapi tidak ada batas atas yang nyata, ketika Anda memasukkan buffer bus, extender, repeater, hub, multiplexer, switch (atau nama lain untuk perangkat yang dapat beralih di antara beberapa bus). Ini menambahkan beberapa overhead i2c, karena dapat diakses melalui bus i2c yang sama. PCA9548A misalnya, adalah saklar bus 8 bit.
Chip tunggal ini secara teoritis dapat melipatgandakan jumlah budak i2c (127 * 8) yang tersedia. Dan PCA9548A dapat dikonfigurasi hingga 8 alamat pada satu bus, jadi 8 * 8 * 127 perangkat. (matematika mungkin tidak aktif). Dan itu hanya dengan perangkat ini dan tidak lebih.
Terus terang, tidak ada batasan teoritis jika Anda menyesuaikan kapasitansi.
I2C menetapkan 2 panjang alamat, 7 dan 10 bit , yang memberikan maksimum secara teoritis masing-masing 128 dan 1024 alamat.
Namun, ada beberapa alamat yang dipesan, seperti 0x00 (panggilan umum). Ini semakin membatasi ruang alamat.
Jika Anda sedang membangun sistem di mana Anda memiliki kontrol langsung atas perangkat I2C, Anda dapat menggunakan alamat yang dipesan untuk penggunaan Anda sendiri, tetapi sistem tidak akan lagi mematuhi standar I2C.
Selain pengalamatan, ada keterbatasan bus fisik. Setiap perangkat di bus harus dapat menarik bus rendah dalam rentang waktu tertentu (tergantung pada kecepatan bus). Jika bus memiliki banyak kapasitansi, perangkat mungkin tidak dapat menarik SDA cukup rendah dengan cepat, dan penariknya mungkin tidak membawa SDA kembali cukup cepat.
Sekarang, masalah perangkat keras dapat diatasi dengan sedikit perangkat keras driver. Saya sedang mengerjakan proyek sekarang yang menggunakan I2C untuk berkomunikasi dengan perangkat lebih dari 10s meter. Bus utama menggunakan 24v, dan setiap papan memiliki driver yang menurunkannya menjadi 3.3v.
Dalam kulit kacang, keterbatasan fisik I2C dapat diatasi. Pengalamatan dapat diatasi, tetapi hanya jika Anda memiliki kontrol langsung terhadap perangkat.
Batasan utama pada jumlah budak yang dapat dikendarai seorang master umumnya akan berasal dari faktor-faktor listrik seperti kapasitansi bus, kebocoran, kekuatan drive, dll. Jika seseorang dapat membangun budak dengan nol kapasitansi parasit dan nol kebocoran, dan jika seseorang dapat menghubungkan mereka dengan jejak papan kapasitansi nol, maka kapasitansi bus tidak akan menjadi faktor, tetapi dalam praktiknya tidak ada asumsi yang akan berlaku.
Mengatasi perangkat yang "tahu" satu sama lain, di sisi lain, sebenarnya tidak masalah. Akan sepele untuk merancang perangkat yang akan memungkinkan miliaran chip dihubungkan menggunakan satu alamat baca dan satu alamat tulis. Cukup tentukan bahwa setiap perangkat harus memiliki ID empat byte yang unik, dan diharuskan untuk mendengarkan alamat tulis sepanjang waktu, tetapi harus keluar dari setiap transaksi yang empat byte data yang ditransmisikan pertamanya tidak cocok dengan ID mereka. Lebih lanjut menentukan bahwa perangkat hanya dapat menanggapi alamat baca jika transaksi penulisan terakhir yang mereka dengar cocok dengan alamat mereka.
Jika seseorang ingin menambahkan kemampuan untuk membuat master menentukan ID semua budak yang terhubung, seseorang dapat memesan beberapa rentang ID khusus untuk tujuan tersebut. Sebagai contoh, seseorang dapat mengatakan bahwa jika byte ID pertama adalah FF, maka empat byte berikutnya akan menjadi mask dan empat setelah itu ID; sebuah perangkat harus tetap terhubung (dan mengakses byte ID terakhir) jika bagian ID-nya ditentukan oleh mask sesuai dengan yang diberikan dalam perintah. Ini akan memungkinkan master untuk mengidentifikasi setidaknya satu perangkat menggunakan 64 transaksi, dan perangkat tambahan masing-masing menggunakan 62 atau lebih sedikit transaksi. Mungkin bukan cara tercepat yang memungkinkan untuk identifikasi perangkat, tetapi tidak buruk diberikan ruang pencarian miliaran ID perangkat.
Jawaban singkat: Tergantung
Jika Anda memiliki perangkat (umum) dengan alamat 7 bit hingga 104 Perangkat (128 alamat - alamat yang dipesan (0x00-0x07 dan 0xF0-0xFF dicadangkan)) (batasan tertentu berlaku) Jika Anda memiliki perangkat (kurang umum) yang mendukung 10 bit menangani hingga 1024 perangkat (Anda dapat mencampur perangkat 7bit dan 10bit dan mencapai hingga 1136 perangkat seperti itu)
Sekarang untuk keterbatasan: Sebagian besar perangkat sederhana hanya dapat dikonfigurasi untuk dua hingga 8 alamat yang berbeda. Anda dapat mengatasinya dengan perangkat pesanan khusus dengan alamat basis yang berbeda (tetapi ini biasanya berarti Anda memesan jumlah perangkat minimum) Ada juga keterbatasan perangkat keras (terutama kapasitansi bus) tetapi ini dapat diselesaikan dengan driver i2c khusus.
Jika Anda ingin menghubungkan banyak perangkat pada jarak yang lebih besar, saya sarankan tetap menggunakan fieldbus! I2C ditujukan untuk komunikasi di dalam perangkat (seperti perangkat TV). Saya menggunakan I2C sendiri dengan RaspberyPi dengan kabel eksternal hingga 50cm (bahkan dengan T-Bagian Anda seharusnya tidak pernah ada dalam sistem bus). Ini bekerja sangat baik.
Jumlah perangkat yang terhubung ke bus hanya dibatasi oleh total kapasitansi bus yang diizinkan sebesar 400 pF. Karena kebanyakan IC dengan antarmuka I²C menggunakan teknologi CMOS daya rendah, impedansi tinggi, banyak IC dapat dihubungkan ke bus I²C sebelum kapasitansi maksimum tercapai
Dengan chip multiplexer tambahan (seperti TCA9544A) atau buffer (seperti PCA9515B), Anda dapat mengatasi semua batasan - baik kapasitansi dan pengalamatan bus.
Anda dapat menempatkan 3 perangkat dengan alamat yang sama di belakang multiplexer dan hanya memilih satu di antaranya, berkomunikasi dengannya dan kemudian memilih yang lain. Tentu saja perangkat lunak menjadi lebih kompleks.
Jika Anda memiliki kabel yang panjang, Anda dapat menempatkan penyangga di tengah dan mengatasi batas kapasitansi.