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.
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber