Panjang Bus I2C Maksimum?

38

Berapa panjang maksimum kabel yang dapat digunakan untuk menghubungkan dua perangkat I2C (I2C master-> I2C slave)?

Ya, saya tahu bahwa I2C benar-benar dirancang untuk komunikasi intra-board. Saya telah ditugaskan dengan "tujuan desain" menggunakan bus I2C umum untuk beberapa budak I2C untuk mendukung demo.

Untuk tujuan kejelasan, mari kita asumsikan laju bus I2C standar 100 kHz.

Nate
sumber
1
Panjang maks datang untuk bermain dengan kapasitansi yang diperkenalkan oleh panjang. Kapasitansi terlalu banyak dan itu bisa memengaruhi kecepatan Anda. Jadi seperti biasa, ini tergantung.
Gustavo Litovsky
@ GustavoLitovsky Anda benar tentang kapasitansi. Ini juga tergantung pada jenis kabel yang digunakan (terlindung vs tidak terlindung). Saya paling tertarik dengan pedoman umum.
Nate
2
@Nate Guideline: kapasitansi bus bersih maksimum 400pF. (Agak terkait dengan pertanyaan: Memoar bus I2C yang terlalu banyak .)
Nick Alexeev
1
I2C = Bus Sirkuit Antar-Terintegrasi. Ini tidak dirancang untuk jarak jauh antar kotak, dan tentu saja tidak pada 400kHz.
Spehro Pefhany
1
Hanya ingin memberikan pengalaman pribadi selain dari perhitungan. Saya telah melakukan demo dari papan dev ke konverter I2C ke USB dengan kabel unshielded sekitar 3ft. Tidak terlihat cantik, tetapi berhasil 90% dari waktu.
mcmiln

Jawaban:

16

Untuk mode cepat, dan penarik resistor, kapasitansi harus kurang dari 200pF, menurut dokumen NXP ini spesifikasi I2C-bus dan panduan pengguna .

Dengan penarikan sumber saat ini Anda dapat pergi ke 400pF, tetapi tidak dengan resistor.

Jika kabel Anda 20pF / 30cm dan Anda memiliki 50pF lain dari kapasitansi liar dan input, Anda dibatasi untuk panjang kabel 2,25m. Asumsi yang berbeda akan menghasilkan angka yang berbeda pula.

Spehro Pefhany
sumber
1
@KrunalDesai Secara khusus disebutkan dalam dokumen NXP yang ditautkan di atas. Spesifikasi I2C-bus dan panduan pengguna
Spehro Pefhany
1
Sebagai contoh di dunia nyata, Nintendo Wii "Wiimote" menggunakan 400kHz I2C ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) untuk berkomunikasi dengan periferal seperti Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) yang, seperti Anda bisa lihat, memiliki kabel sekitar 1m. Extender pasif dijual untuk memberikan tambahan 1m ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), jadi mereka mendorong, tetapi tetap dalam batas 2,25m itu.
Rob Starling
16

Panjang kedengarannya gila seperti 10,25, dan 100m sangat mungkin, dan saya sering menggunakan metode ini (dengan UART bukan I2C, tetapi metode ini berdiri) ketika saya harus mengumpulkan barang dengan cepat. Tapi itu bukan cara terbaik.

Kuncinya adalah mengetahui ambang tegangan input Anda. Pastikan jatuhnya voltase pada kabel ground jauh di bawah ini, atau jika pemancar pada potensial ground tinggi tidak akan mampu menarik tegangan cukup rendah. Kurangnya toleransi untuk ground offset IMHO adalah alasan terbesar untuk menggunakan RS485 atau transceiver kaleng (I2C over CAN disebutkan dalam beberapa catatan aplikasi).

Idealnya, semua perangkat akan memiliki kutil dinding dan baterai sendiri dan tidak ada daya yang akan dikirim melalui kabel ground antar perangkat.

Tapi, mari kita ambil CAT5 misalnya. CAT5 tidak boleh lebih tinggi dari 52pf / m, atau bukan CAT5.

100m kabel 52pf memiliki kapasitansi 5200pf atau 5.2nf.

5,2n kali 20kohms (pullup) memberikan konstanta waktu sekitar 104 mikrodetik. Itu membatasi kecepatan sekitar 10kHz atau lebih.

Menggunakan pullup 2.2kohm, Anda mungkin bisa mencapai 100kHz.

Saya telah mendengar bahwa perangkat harus memiliki resistor pada SDL dan SCK, karena beban kapasitif besar yang mereka kendarai, sekitar 180 atau 200 ohm.

Tapi jujur, I2C sama sekali tidak bisa menempuh jarak yang jauh. Transceiver CAN atau RS485 yang digunakan dengan UART normal adalah solusi yang kuat dengan perlindungan kesalahan yang sangat baik, ketahanan ESD, kecepatan, jarak, dll, dengan biaya satu dolar per chip, lebih dari itu, ground offset tidak terlalu penting sehingga Anda bebas untuk membawa daya bersama dengan data.

Satu-satunya downside adalah bahwa transceiver kaleng dapat mencapai 70mA mentransmisikan dan 1 atau 2mA hanya mendengarkan, sehingga I2C atau TTL UART langsung mungkin berguna dalam situasi daya rendah yang ekstrim, tetapi pertimbangkan berapa banyak waktu yang Anda habiskan untuk mengirim.

EternityForest
sumber
7

Saya bekerja untuk perusahaan yang membuat sensor USB. Kebanyakan dari mereka didasarkan pada chip sensor I2C, perangkat-perangkat itu dapat dibagi menjadi dua, sehingga Anda dapat menginstal bagian CPU di satu tempat dan bagian sensor di tempat lain. Kami melakukan cukup banyak tes pada koneksi I2C antara CPU perangkat dan sensor I2C. Pada 100 kHz, dengan protokol pemulihan kesalahan yang baik, 25m dapat dengan mudah dicapai menggunakan kabel dasar. Kami bahkan dapat mencapai 100m sekali dengan kabel CAT5.

martin
sumber
Sepertinya Anda berbicara tentang panjang kabel USB . OP bertanya tentang pemasangan kabel I2C mentah . Ini adalah subjek yang sama sekali berbeda. Jika saya salah, edit jawaban Anda dan saya akan menghapus downvote saya.
DoxyLover
1
25m cukup banyak bahkan untuk usb ...
Vladimir Cravero
3
Tidak, saya benar-benar berbicara tentang koneksi I2C antara CPU perangkat dan chip sensor I2C, bukan koneksi USB antara host dan CPU. Berikut ini sebuah contoh: yoctopuce.com/EN/products/yocto-meteo/doc/…
martinm
1
Jika Anda ingin menggunakan twisted pair untuk I2C dan power, pasangan mana yang akan Anda putar bersama? (SDA, SCL), (VCC, GND) atau (SDA, GND), (SCL, VCC)?
Cano64
4
Idealnya, Anda tidak menggunakan twisted pair sama sekali. Twisted pair berguna untuk sinyal seimbang. Jika Anda tidak memiliki kabel lain, putar sinyal dengan ground. Jika Anda benar-benar hanya memiliki empat kabel, pikirkan tentang seberapa banyak daya yang dikonsumsi oleh ujung jarak jauh - Anda dapat mengakhiri dengan ground offset yang lebih tinggi dari yang dapat ditoleransi - sebelum berkomitmen menggunakan hanya satu kawat untuk GND. Saya biasanya menggunakan kabel Cat5 lama (tidak lebih tinggi! Perisai ganda menambah kapasitas yang tidak Anda butuhkan) dengan satu pasangan ground, satu pasangan + 5V, dan pasangan SDA + GND dan SCL + GND.
Matthias Urlichs
5

Sesuatu seperti P82B96 NXP dapat digunakan untuk mengubah level tegangan pada bus, sehingga memungkinkan jarak yang lebih jauh.

The datasheet berisi contoh-contoh untuk panjang kabel I2C dari 3m, 25m, 100m dan 250m.

Ada chip lain yang memiliki fungsi serupa.

Jeffrey Nichols
sumber
Masalah dengan chip NXP adalah Anda akhirnya membutuhkan dua kali lebih banyak kabel. Ada ide lain? IC dua arah yang saya temukan tidak lebih dari + 5V.
Matthias Urlichs
4

IIC adalah protokol sinkron, dan dengan demikian, dapat dijalankan secara lambat untuk memenuhi persyaratan sistem sehubungan dengan jarak dan kebisingan.

Ada banyak contoh penggunaan IIC melalui kabel, mulai dari ACCESS.bus di tahun 1990-an hingga penggunaannya sekarang untuk mengambil informasi EDID dari tampilan video.

Dave Tweed
sumber
Contoh lain adalah Wii Nunchuck, yang terhubung ke Wii Remote via I²C menggunakan kabel 4 kaki terlindung.
tcrosley