Berapa banyak budak i2c yang dapat didukung oleh i2c?


17

Apakah ada jumlah maksimum budak i2c yang dapat dikendarai oleh master i2c? Apa faktor pembatas fisik?


1
Anda memiliki alamat 7 bit. Itu berarti Anda dapat menangani hingga 127 budak.
Botnic

Terima kasih. Apakah ada faktor pembatas fisik seperti drive saat ini, kapasitansi atau sesuatu seperti itu yang mencegah jumlah budak mencapai hingga 127?
user768421

1
@Botnic sepenuhnya mengabaikan sakelar i2c, hub, buffer, repeater, dan perangkat i2c apa pun yang memungkinkan Anda memperluas bus.
Pejalan kaki

Jawaban:


22

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.


2
Anda memiliki kesalahan satu per satu. Pengalamatan 7 bit mendukung 128 alamat (0 hingga 127). 10 bit menangani dukungan 1024 alamat (0 hingga 1023).
CurtisHx

3
Ini bukan kesalahan satu kesalahan. Ini adalah kesalahan "mati karena 6" karena ada 7 alamat yang dipesan bukan hanya satu.
kruemi

Skema pengalamatan ditentukan oleh perangkat di bus, master atau slave. Beberapa perangkat memiliki rentang alamat preset dan alamat yang dipesan. Perangkat lain, banyak pengontrol mikro misalnya, tidak memiliki alamat yang dicadangkan dan dapat menggunakan alamat apa pun dalam skema bit yang diberikan.
vini_i

Angka-angka ini agak benar, namun peringatan diperlukan. Ada beberapa alamat yang dipesan seperti 1111 XXX dan 0000 XXX. Ini berarti 7-bit = 2 ^ 7 - 16 = 112 alamat yang dapat digunakan, 10-bit adalah penuh 2 ^ 10 1024. 8-bit bukan (seharusnya bukan hal) itu biasanya termasuk bit R / W pada 7-bit. nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault Saya mengakui bahwa alamat 8-bit tidak efektif. Saya telah menghapusnya dari jawaban saya. Sebagian besar mikrokontroler dapat memilih untuk mengabaikan sebagian atau semua alamat yang dipesan dan menggunakan rentang alamat lengkap. Saya perhatikan dalam jawaban saya bahwa ini adalah perangkat khusus.
vini_i

10

Jumlah maksimum node dibatasi oleh ruang alamat, dan juga oleh total kapasitas bus 400 pF, yang membatasi jarak komunikasi praktis menjadi beberapa meter.

Baca lebih lanjut di I²C


9

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:

masukkan deskripsi gambar di sini


7

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.


5

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.


Sudah hampir tiga tahun sejak Anda bekerja di bus i2c yang sangat panjang. Apakah mereka bekerja dengan baik?
wallyk

1
@wallyk saya meninggalkan perusahaan itu tak lama setelah memposting jawaban itu. Saya akan mengatakan bahwa dengan perangkat keras yang tepat, Anda dapat membuat I2C berkomunikasi dengan jarak yang lebih jauh. Namun, ada protokol komunikasi lain yang dirancang untuk jarak jauh dan mungkin akan menjadi pilihan yang lebih baik daripada I2C.
CurtisHx

5

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.


2

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.


0

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


1
Ini tidak menjawab pertanyaan OP di manor lengkap. Cobalah untuk menjawab semua aspek pertanyaan, bahkan jika menggunakan nilai perkiraan. Tentukan dan / atau tinggalkan tautan ke sumber informasi Anda.
Sparky256

0

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.


Tidak, Anda masih akan dibatasi: 4 Saluran / Multiplexer, per saluran Anda memiliki 4 Sub-saluran, maka Anda memiliki sub-saluran, sub-saluran, dan lainnya. Anda memiliki 3 Baris-alamat per saluranwitcher: Apakah 4 ^ (2 ^ 3) = 65536 saluran. Per saluran, Anda memiliki 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Perangkat / Saluran (Bila Anda juga menggunakan Buffer) (-7 adalah untuk alamat yang dipesan dan -8 untuk alamat multipleks). 1265 * 65536 = 82903040 Perangkat Maksimum.
12431234123412341234123

Sunting: Maaf ada kesalahan: ini 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Perangkat / Saluran => 1137 * 65536 = 74514432 Perangkat. Tetapi mungkin ada lebih mungkin ketika Anda menggunakan IO-Expander untuk menghidupkan dan mematikan beberapa Buffer (Yang jauh dari penggunaan praktis tetapi kemungkinan teoretis).
12431234123412341234123
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.