Memahami tingkat transmisi data melalui kabel tembaga

11

Saya telah meneliti berbagai cara untuk menghubungkan sensor ke Arduino, dan i2c tampaknya menjadi metode yang populer. Saya telah membaca bahwa itu hanya dapat diandalkan pada jarak pendek (beberapa meter, paling banyak), dengan kecepatan data 400 atau 100kbps. Saya mengalami kesulitan memahami mengapa batas protokol ini sangat rendah dibandingkan dengan transmisi data lainnya melalui tembaga, seperti gigabit Ethernet. Saya telah melihat alasan seperti kapasitansi, penurunan tegangan, dan resistensi yang diberikan, tetapi bukankah Ethernet over cat5 / 6 mengalami semua masalah yang sama? Pada dasarnya, saya ingin tahu mengapa mengeluarkan beberapa tegangan ke beberapa kawat tembaga tidak menghasilkan hasil yang lebih konsisten (bandwidth, jarak) ketika membandingkan berbagai metodologi ini.

pengguna3629081
sumber
Ada banyak protokol utama dengan batasan yang sering diabaikan. Ethernet hanya dapat diandalkan hingga 30 kaki tanpa repeater. USB berada di bawah 10 kaki. Itu tidak berarti orang tidak memaksakan batas. Itu adalah keputusan implementasi berdasarkan seberapa cepat / dapat diandalkan Anda membutuhkan data menjadi, dan apakah Anda mampu membayar overhead data pemeriksaan crc.
mreff555
Saya hanya ingin menunjukkan bahwa meskipun I2C tidak dimaksudkan untuk digunakan dengan cara ini, sudah pasti dimungkinkan untuk menggunakannya lebih dari 100m. (Ini memiliki jarak maksimum teoritis yang sama dengan ethernet). Namun, Anda akan memiliki baudrate yang sangat rendah, ATAU arus pull-up Anda akan menggelikan.
Opifex
@Opifex Bercahaya kecepatan!
DKNguyen
1
Ini bukan jawaban, dan mungkin saya menyatakan yang sudah jelas, tetapi batas dalam I2C (atau protokol lain) pada dasarnya karena bahan kawat dan protokol. Inti dari pertanyaan Anda tampaknya adalah "jika metode X membuat saya A lebih dari tembaga, maka bukankah Y dan Z juga bisa mendapatkan saya A?" yang secara inheren tidak benar.
dwizum
6
Dengan 30ft, maksud Anda 328ft / 100m @ mreff555? Itulah spesifikasi untuk ethernet twisted pair, ethernet coaxial lama bahkan lebih lama (200m untuk 10base2, 500m untuk 10base5).
Mark Booth

Jawaban:

14

Teorema Shannon menetapkan batas akhir bandwidth informasi pada kabel. Berikut beberapa info lebih lanjut tentang itu: https://www.gaussianwaves.com/2008/04/channel-capacity/

tl; versi dr: Persamaan Shannon-Hartley:

  • C=Blog2(1+SN)(1)

Di mana B adalah bandwidth dalam Hz, SN adalah rasio signal-to-noise.

I2C jelas tidak mendekati batas Shannon untuk kabel. Alih-alih, ini adalah protokol ringan dengan penghitungan waktu sengaja lambat (100/400 kbit / dtk) menggunakan bus kolektor terbuka untuk membuatnya mudah diimplementasikan untuk jaringan perangkat kecil dengan I / O sederhana dan kebutuhan kontrol. Operasi lambat yang ditentukan oleh I2C menghindari sebagian besar masalah integritas sinyal.

Ada varian I2C yang lebih cepat yang menggunakan kecepatan 1 Mbit dan 3,2 Mbit / s. Ini membutuhkan lebih banyak perhatian pada tata letak dan terminasi dari I2C normal dan tentu saja memiliki waktu yang lebih ketat, lebih menuntut.

Memindahkan rantai makanan bijaksana-Shannon, Gbit Ethernet menggunakan beberapa teknik untuk mencapai throughputnya:

  • Pensinyalan diferensial
  • Beberapa pasangan (4)
  • Pensinyalan multi-level, disebut PAM-5
  • Preemphasis / Deemphasis
  • Penyetaraan Adaptif

Teknik-teknik ini membutuhkan banyak silikon, termasuk blok ADC / DAC sinyal-cepat besar untuk berbicara dengan kabel dan beberapa pemrosesan sinyal yang cukup berat untuk mengelolanya. Tambahkan ke ini, tumpukan perangkat lunak yang jauh lebih kompleks untuk mengendarainya. Hal ini menjadikan Ethernet sebagai blok on-chip sedikit banyak untuk mikrokontroler low-end (beberapa di antaranya memilih untuk menggunakan PHY eksternal sebagai gantinya). Namun kematangannya menempatkannya dalam jangkauan Sistem-on-Chip yang lebih besar.

Seberapa dekat kita dengan batas Shannon? Lebih lanjut di sini: https://pdfs.semanticscholar.org/482f/5afbf88a06d192f7cb052f543625c4b66290.pdf

hacktastical
sumber
Hah, ada voodoo: Pra-penekanan dan de-penekanan. Jadi ethernet tidak hanya mengirim pulsa persegi atau bahkan gelombang sinus ke garis dan berdoa agar tidak terlalu terdistorsi pada saat mencapai tujuan. Ini membentuk gelombang analog dan mengirimkannya ke telepon.
DKNguyen
3
@DKNguyen Voodoo asli untuk 100 megabit atau lebih cepat Ethernet ada di penerima. Algoritma pemerataan adaptif digunakan, hari ini sering diimplementasikan secara digital; sinyal yang diterima mengumpan ADC diikuti oleh beberapa perangkat keras DSP (semua di dalam perangkat PHY Anda $ 0,50). Teknologi dalam protokol kecepatan tinggi yang lebih baru secara substansial lebih canggih lagi.
scary_jeff
Terima kasih @scary_jeff tentang persamaan adaptif. peringatan. Menambahkannya ke jawaban saya.
hacktastical
6

Ada lebih banyak transmisi daripada hanya kabel tembaga. Pernahkah Anda melihat perangkat keras di belakang ethernet? Mungkin tidak, karena sangat sulit untuk menemukan sirkuit tingkat dasar untuk apa yang sebenarnya terjadi karena nyali selalu tersembunyi di IC. Yang paling dekat yang pernah saya temukan adalah magnet yang diperlukan untuk ethernet, yang tampaknya bukan opsional. Itu hanya petunjuk tentang apa yang terjadi secara fisik dengan perangkat keras ethernet.

Pikirkan seperti ini: Udara adalah medium. Mengapa jenis informasi yang dapat disampaikan ketika anjing berbicara satu sama lain jauh lebih sedikit daripada ketika manusia berbicara satu sama lain? Mengapa mengirimkan beberapa gelombang bertekanan ke udara tidak menghasilkan hasil yang lebih konsisten dalam komunikasi antara kedua jenis hewan ini?

Beberapa faktor pembatas untuk I2C (dan banyak protokol lain) adalah:

  1. drive kolektor terbuka
  2. tidak ada pencocokan impedansi
  3. tidak ada transmisi seimbang
  4. tidak ada pengecekan error
  5. skema pengkodean sederhana
  6. tingkat tegangan yang relatif tinggi (jika langkah tegangan Anda tidak harus sebesar Anda dapat mentransmisikan lebih cepat karena dV / dT Anda tidak harus setinggi untuk kecepatan yang lebih tinggi)
  7. tidak ada isolasi
  8. tegangan unipolar (ethernet mentransmisikan pada +/- 2.5V yang mungkin membantu entah bagaimana)
  9. Transmisi budak adalah clock oleh master sehingga pada dasarnya jam harus melakukan perjalanan pulang pergi lebih cepat dari sinyal data

Semua ini baik untuk membuat hal-hal sederhana. Tidak begitu baik untuk kecepatan data tinggi atau transmisi jarak jauh.

Mungkin juga ada beberapa voodoo lain yang terjadi di perangkat keras yang tidak saya ketahui.

DKNguyen
sumber
6

Beberapa aturan sederhana: Tidak ada yang namanya landasan. Semua kabel adalah antena. Semua kabel adalah saluran transmisi. Selalu ada kebisingan.

Jika kabel pendek dibandingkan dengan waktu kenaikan sinyal, maka Anda dapat mengabaikan ketidakcocokan impedansi saluran transmisi dan refleksi (tidak seperti Ethernet, yang membutuhkan terminasi rumit dan pembentukan pulsa). Jika kabelnya panjang, maka voltase yang diinduksi pada kabel dan pembumian pembumian lebih cenderung membuat tingkat sinyal digital Anda pada ujung yang jauh tidak pasti atau salah. Tetapi Ethernet menggunakan pensinyalan diferensial bengkok, yang sangat mengurangi masalah kebisingan dan referensi rujukan tanah. Penerima Ethernet juga menggunakan input analog yang lebih sensitif daripada input digital biasa, sehingga memungkinkan lebih banyak line loss. Tambahkan ke pengkodean dan koreksi kesalahan Ethernet untuk mengatasi statistik kebisingan, dan Anda bisa lebih andal berjalan lebih cepat dan lebih jauh.

hotpaw2
sumber
5

I2C adalah open drain bus , secara aktif ditarik rendah, tetapi tarikan ke atas (setidaknya untuk 100kHz normal, varian 400kHz) adalah resistor pasif.

Karena ini ada batasan pada seberapa cepat benda itu dapat bekerja berdasarkan seberapa cepat resistor pull up dapat mengisi kapasitansi bus, Anda kadang-kadang bisa mendapatkan kecepatan lebih dengan menurunkan nilai pull up tetapi itu berarti node harus tenggelam lebih banyak arus untuk mendapatkan logika rendah .... Atau Anda dapat pergi ke arah lain, memperlambat bus untuk memungkinkan penggunaan resistor pull up bernilai lebih tinggi untuk disipasi daya yang lebih rendah (lihat misalnya bus PM).

Ini adalah instruktif untuk menjalankan lingkup dan perhatikan bahwa sisi jatuh pada I2C jauh lebih tajam daripada yang naik.

Untuk penggunaan yang dimaksudkan, pada dasarnya sensor suhu dan perangkat konfigurasi kecil dalam satu papan (atau paling banyak satu sasis) ini ternyata cukup banyak menyentuh sweet spot antara kompleksitas implementasi, jumlah pin rendah dan perangkat keras sederhana. Maksud desainnya bukanlah "Cepat, sambungan data jarak jauh", dan untuk semua yang saya temukan SPI secara umum lebih mudah untuk ditangani, I2C cocok dengan kasus penggunaan yang dimaksudkan dengan sangat baik.

Setelah jarak meningkat maka sesuatu yang lain menjadi lebih cocok, tetapi di papan dengan antarmuka konfigurasi eeprom / suhu / perangkat sederhana, itu cukup baik (Perlu dicatat bahwa antarmuka manajemen PHY terlihat BANYAK seperti I2C).

Dan Mills
sumber
2

Hasil yang berbeda adalah karena rangkaian driver berbeda untuk setiap teknologi.

I2C 100kHz biasanya menggunakan resistor pullup untuk meletakkan sinyal pada level tinggi, dan driver drain terbuka untuk menempatkan sinyal pada level rendah.

Resistor pullup biasanya beberapa kilo-ohm. Semakin panjang kabel semakin besar kapasitansi yang dimilikinya. Waktu yang dibutuhkan garis untuk transisi dari 0 ke 1 akan sebanding dengan total kapasitansi pada saluran dan nilai resistor penarik. Di suatu tempat dalam kisaran sekitar T = 2 * R * C akan menjadi benar.

Sebagai contoh jika Anda memiliki kabel 10 kaki yang memiliki 20pF per kaki kapasitansi dan Anda menggunakan resistor pullup 10K maka dibutuhkan T = 2 * 20pF / ft * 10 ft * 10K = 3,6us untuk transisi dari rendah ke tinggi.

Dalam hal ini Anda jelas tidak dapat memiliki satu bit mengikuti nol bit yang kurang dari 3,6us lebar, sehingga tingkat transmisi Anda akan dibatasi hingga 277kHz.

Dalam sistem I2C nyata, spesifikasi I2C lebih lanjut mengamanatkan pengaturan dan menahan waktu sekitar data dan transisi jam. Saat-saat itu adalah ratusan nanodetik atau mikrodetik. Waktu dibuat sangat lambat dengan sengaja sehingga perangkat dapat diimplementasikan dengan murah (uang), dan mengkonsumsi daya yang sangat kecil (miliwatt).

Ethernet di sisi lain dapat berjalan lebih cepat meskipun kabel kapasitansi karena tidak menggunakan resistor pullup. Ini secara aktif mendorong tinggi atau rendah ke dalam kabel. Pengemudi memiliki impedansi rendah dan dapat mengisi daya kapasitansi saluran apa pun dengan sangat cepat. Tentu saja semua itu ada harganya. Ethernet biasanya mengkonsumsi daya ratusan mW, dan biaya setidaknya beberapa dolar per port untuk diimplementasikan.

Bisakah pengaturan yang mirip dengan I2C berjalan lebih cepat, tentu saja, ubah pullup 10K menjadi 100 ohm dan sekarang waktu kenaikan Anda menjadi 10ft penurunan kabel dari 3.6US ke 36ns. Anda kemudian dapat berjalan sekitar 10MHz tanpa terlalu banyak masalah (selain fakta bahwa chip I2C biasa tidak dapat berbicara secepat itu).

pengguna4574
sumber