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.