Mengapa I2C dirancang untuk bekerja dengan resistor pull-up dan bukan yang pull-down?


22

Saya mengerti bahwa dalam jalur I2C, SCL dan SDA menggunakan resistor pull-up dan driver pin adalah perangkat NPN kolektor terbuka yang dapat mendorong pin ke ground. Ini memberi I2C keuntungan bahwa bus yang sama sekarang dapat dibagi dengan banyak budak, dan bahkan jika dua atau lebih budak secara tidak sengaja mencoba mengemudikan bus pada saat yang sama bus itu tidak akan menyebabkan kerusakan pada sistem.

Tetapi ini juga dapat dilakukan dengan menggunakan driver drain terbuka PNP dan resistor pull-down pada jalur SDA dan SCL. Hal-hal seperti peregangan jam dan arbitrase multi-master dapat dicapai dengan ini juga.

Apakah implementasi protokol I2C saat ini memberikan manfaat dibandingkan implementasi alternatif yang disarankan di atas?


1
transistor kolektor terbuka tampaknya menjadi mayoritas di IC di tahun 80-an.
PlasmaHH

9
@PlasmaHH Saya pikir alasannya adalah NPN (sejauh yang saya ingat samar-samar) memiliki kapasitas lebih saat ini per area karena mobilitas elektron yang lebih tinggi di substrat, sehingga lebih mudah untuk membangun tahap output "kuat" dengan itu.
Marcus Müller

7
@ MarcusMüller Memang, itu (dan masih) benar. NPNs dan NMOS Fets "lebih kuat" bila diberikan ukuran yang sama. Dalam CMOS, faktor 2 hingga 3 adalah tipikal. Untuk PNP vs NPN tergantung pada proses fabrikasi tetapi hampir selalu PNP jauh lebih sulit dan kompleks daripada NPN. Juga dimulai dengan substrat P-doped (seperti yang dilakukan kebanyakan proses) menekankan hal ini (NPN yang lebih baik).
Bimpelrekkie

@Bimpelrekkie Saya ingat faktor 2,3 dari kelas fisika keadaan padat saya hingga tanggal ini :-)
winny

1
Jika bus I2C yang ada tidak sengaja korslet ke ground karena alasan apa pun maka Anda hanya akan menarik arus resistor pull-up. Dengan pengaturan pelengkap driver aktif-tinggi dan resistor pull-down, Anda akan merusak driver sederhana dari tahun-tahun awal I2C. Saat pergi di antara papan, korslet ke sasis adalah pertimbangan. Tapi itu hanya salah satu dari banyak alasan untuk drive-low pull-high, yang sisanya dijawab orang lain di bawah ini.
TonyM

Jawaban:


30

Secara elektrik masuk akal karena ground adalah koneksi yang umum untuk semua perangkat di bus IIC. Itu jauh lebih sedikit pembatasan daripada memaksa daya untuk menjadi koneksi umum ke semua perangkat IIC, seperti yang akan diperlukan jika saluran didorong tinggi dan melayang rendah melalui pulldown.

Perhatikan bahwa perangkat IIC tidak semua perlu diaktifkan dari jaring yang sama atau tegangan yang sama. Ini tidak akan benar jika kedua jalur bus harus didorong ke tegangan daya tunggal yang sama.


5
Bukan downvote saya, dan Anda harus memiliki pengalaman I2C selama bertahun-tahun seperti saya, jadi poin saya di sini kemungkinan adalah kesalahpahaman, tetapi: " Perangkat IIC tidak semua harus didukung dari [...] tegangan yang sama " mungkin dipandang sebagai menyiratkan bahwa perangkat I2C yang bertenaga 5V dan bertenaga 3V (misalnya) dapat berbagi bus I2C yang sama, tanpa komponen atau tindakan pencegahan tambahan (karena Anda tidak menyebutkan penerjemah level). Dan tentu saja mereka tidak bisa melakukan itu, karena ambang logika I2C masing-masing perangkat sekarang direferensikan ke Vcc mereka sendiri. Mungkin kurangnya penyebutan level-penerjemah secara eksplisit menyebabkan downvote?
SamGibson

13
Bergantung pada pull-up dan pin I / O yang digunakan, komunikasi gaya I2C dapat beroperasi dengan lancar antara perangkat 5V dan 3.3V. Menggunakan 10K pull-up ke 5V, misalnya, akan memungkinkan perangkat 3.3V untuk digunakan jika mereka memiliki input 5V yang tidak toleran atau jika mereka dapat mentolerir 150uA ke dalam dioda perlindungan mereka. Dan menggunakan pullup ke 3.3V akan bekerja, setidaknya pada kecepatan yang lebih lambat, untuk berinteraksi dengan perangkat 5V yang memiliki ambang batas input tinggi yang 2,5V atau kurang.
supercat

7
@ Sam: Sebenarnya 5 V dan 3,3 V perangkat IIC dapat berada di bus IIC yang sama. Perangkat dengan tingkat tegangan tetap terlepas dari tegangan suplai mereka disebutkan secara khusus dan diberi sanksi dalam spesifikasi IIC.
Olin Lathrop

5
Dalam dokumen lama "The I2C-bus dan cara menggunakannya" oleh Philips, bagian 10.0 menyebutkan ambang input tetap dari perangkat I2C 5V awal (biasanya NMOS). Ia kemudian mengatakan: " perangkat I2C-bus dengan level input yang terkait dengan VDD harus memiliki satu jalur suplai umum yang mana resistor pull-up juga terhubung " (huruf tebal saya). @supercat - Anda menyebutkan: " perangkat 5V yang memiliki ambang batas input tinggi yaitu 2,5V atau kurang " Dapatkah Anda membantu saya dengan memberikan contoh perangkat seperti itu? Membaca dokumen I2C lama, saya hanya dapat menemukan menyebutkan minimum 3V I2C Vih tetap, untuk perangkat 5V lama. Terima kasih.
SamGibson

2
@SamGibson: Perangkat dengan level input yang terkait dengan VDD mungkin perlu beroperasi dari voltase yang berada dalam kisaran tertentu satu sama lain. Seberapa dekat mereka harus tergantung pada bagaimana tegangan terkait dengan VDD. Lembar data Microchip untuk PIC16F877 (bagian 5V yang dipilih secara sewenang-wenang) mencantumkan V (IH) untuk pin normal sebagai 0,25VDD + 0,8V, meskipun untuk input Schmitt Trigger itu akan jauh lebih tinggi. Pada VDD = 5.2V, input normal akan memiliki V (IH) yang ditentukan sebesar 2,1 volt; Saya tidak melihat spesifikasi untuk perangkat keras I2C V (IH), meskipun grafik kinerja tipikal menunjukkan itu antara input normal dan ST.
supercat

24

Di masa lalu yang baik, driver TTL jauh lebih baik dalam menarik sinyal ke bawah daripada menariknya ke atas. Oleh karena itu, protokol seperti I2C, tetapi juga garis interupsi, reset, dan lainnya, semuanya diimplementasikan menggunakan pull-up dengan distribusi pull-down.


8
Di zaman modern yang lebih baik, hal yang sama tetap berlaku karena merupakan properti intrinsik dari semikonduktor. Hari ini tidak perlu banyak biaya untuk mendapatkan transistor yang lebih besar untuk menangani arus yang sama.
Arsenal

2
Saya diberitahu bahwa dengan CMOS juga jauh lebih mudah untuk mendekati tegangan power rail. 'Masalah' lain di mana TTL sedang berjuang. (Mungkin kita harus menganggap diri kita beruntung karena itu memungkinkan 3V3 CMOS untuk berinteraksi dengan TTL)
Oldfart

14

Lebih mudah untuk menggunakan ground sebagai referensi umum di antara subsistem yang mungkin memiliki voltase pasokan yang bervariasi. Jika Anda menggunakan transistor PNP untuk menarik tegangan suplai, semua subsistem harus terhubung ke suplai yang sama.


8

Banyak jawaban bagus di sini, tetapi ada juga alasan lain.

Jika keadaan diam bis di darat, tidak ada cara untuk mengetahui apakah bus terhubung atau hanya menggantung di luar angkasa.

Normal untuk pull-up ditempatkan di perangkat master. Budak biasanya tidak memiliki pull-up. Ini karena arus pull-down yang diperlukan untuk menyatakan level rendah akan meningkat dengan jumlah perangkat yang terhubung ke bus.

Seorang budak, ketika dicolokkan ke dalam bus, kemudian dapat mendeteksi bahwa kabelnya ditarik terlalu tinggi (dengan asumsi itu tidak digunakan) dan tahu bahwa bus itu benar-benar ada dan sunyi. Itu tidak akan menjadi kasus dengan bus bias tanah.


Untuk mendeteksi bus ditarik tinggi, seorang budak harus menurunkannya sejak awal. Saya tidak yakin mengapa prosedur serupa tidak mungkin dilakukan dengan polaritas yang berlawanan.
Dmitry Grigoryev

@DmitryGrigoryev mengapa perlu menarik sesuatu yang sudah tinggi rendah?
Trevor_G

5

Jika saya memahami pertanyaan dengan benar, satu aspek adalah:

  • Mengapa Anda menggunakan resistor pull-up dan transistor NPN alih-alih resistor pull-down dan transistor PNP?

Pertama-tama Anda harus mencatat bahwa Anda tidak menggunakan transistor bipolar (NPN, PNP) tetapi MOSFET (yang ada dalam empat varian berbeda).

Perangkat yang menggunakan varian " pull-up dan NPN " menggunakan MOSFET perangkat tambahan n-channel . Karena sumber MOSFET ini terhubung ke ground tegangan gerbang-sumber (mengendalikan aliran arus) sama dengan tegangan antara gerbang dan ground. Jadi MOSFET dapat dikontrol menggunakan tegangan antara 0 dan Vdd.

Akan ada tiga kemungkinan untuk menerapkan varian " pull-down dan PNP ":

  • Menggunakan MOSFET peningkatan p-channel

    Pada MOSFET saluran-NMOS atau CMOS IC dengan karakteristik yang sebanding (resistansi, dll.) Memerlukan lebih banyak ruang daripada MOSFET n-saluran.

    Dalam ruang mikroelektronika adalah uang sehingga saluran MOSFET dihindari jika memungkinkan.

  • Menggunakan MOSFET perangkat tambahan n-channel

    Ini akan membutuhkan output dari rangkaian logika yang menggerakkan transistor untuk memiliki tegangan "RENDAH" dari tegangan suplai (mis. + 5V) dan tegangan "TINGGI" di atas tegangan suplai (mis. + 10V ketika sisa rangkaian disuplai dengan + 5V).

    Alasannya: Tegangan sumber-tanah akan menjadi Vdd ketika MOSFET sedang melakukan. Tegangan sumber gerbang harus positif sehingga tegangan antara gerbang dan tanah harus lebih tinggi.

    Anda akan membutuhkan dua suplai tegangan - dan sebuah sirkuit menggeser output dari rangkaian logika dari 0 ... + 5V ke + 5V ... + 10V ...

  • Menggunakan MOSFET penipisan saluran-n

    Sayangnya saya tidak bisa memberi tahu Anda banyak tentang solusi ini. Namun saya menemukan beberapa halaman menggunakan Google mengatakan bahwa penipisan MOSFET lebih sulit untuk diproduksi daripada peningkatan MOSFET dan mereka dihindari karena alasan ini.

    Saya tahu dari elektronika daya (bukan mikroelektronika) bahwa varian "dua catu daya" yang dijelaskan di atas bahkan lebih disukai daripada MOSFET yang menipis. (Tapi aku tidak bisa memberitahumu alasannya.)

    EDIT Menggunakan n-channel deplesi MOSFET Anda mungkin perlu tegangan negatif (misalnya -5V) sehingga Anda juga akan membutuhkan dua tegangan suplai ...


0

Ada juga satu lagi manfaat tambahan untuk memiliki jalur data ground-up dan pull-up yang sama (lebih dari memiliki VCC umum dan pull-down):

Bahkan jika niat awalnya adalah untuk menghubungkan perangkat pada PCB yang sama pada rentang beberapa inci saja, itu sudah cukup berhasil jadi sekarang tidak jarang memiliki garis panjang beberapa kaki dan menghubungkan "perangkat" yang bisa berupa komputer atau sesuatu yang setara kompleksitasnya, dengan beberapa perangkat memiliki sumber dayanya sendiri (dengan kualitas yang berbeda, katakan Anda menghubungkan sesuatu yang dihubungkan dengan sesuatu yang bertenaga baterai). Lebih baik, jika koneksi berfungsi "setidaknya baik" bahkan dalam kondisi yang tidak ideal dan di luar spesifikasi.

Dan banyak dari perangkat yang terhubung semacam itu entah bagaimana dapat terhubung juga dengan cara lain, maka hanya komunikasi I2C. Biasanya ketika menghubungkan perangkat bersama-sama Anda menghubungkannya dengan common ground- kadang-kadang sebagai bagian dari fungsi lain, kadang-kadang hanya karena dipasang pada casing logam dan perangkat terhubung ke tanah dengan casing juga (atau dengan pendingin umum atau sesuatu seperti itu) atau mungkin ada dilindungi kabel dengan grounded shielded di dalamnya - yang juga menghubungkan tanah.

Jika Anda juga secara langsung menghubungkan saluran listrik (VCC) dari perangkat tersebut, Anda akan mendapatkan masalah ketika saluran tersebut akan berada pada tegangan yang berbeda secara alami (tentu saja, bisa dikatakan 5V di sana-sini, tetapi tergantung pada konstruksi dan toleransi sebagian dari sumber daya itu). bisa juga 4.9V atau 5.2V atau bahkan berubah, jika bertenaga baterai dan kadang-kadang menjalankan beberapa motor, membuat daya turun dan naik seiring waktu).

Dalam kasus seperti itu, ada hubungan arus pendek yang efektif antara sumber-sumber daya bagian a Volt dan tergantung pada sumbernya (dan ketahanan cara-cara) di sana dapat mengalir arus yang relatif tinggi yang tidak hanya menghasilkan pemborosan energi dan panas, tetapi mungkin bahkan dalam merusak ( atau memperpendek umur) dari beberapa sumber tersebut. Itu tidak baik.

Memiliki kesamaan ground dan pull-up menghindari masalah seperti itu - ground adalah ground dan resistor pullup hanya memungkinkan arus silang yang sangat kecil bahkan jika VCC jauh berbeda dari perangkat.


1
Ini pada dasarnya sama dengan jawaban Dave Tweed.
Janka

-2

Anda tidak perlu mengirim begitu banyak daya melalui chip, jika itu menarik.

Karena chip tidak menggerakkan apa pun, itu hanya membuat pendek untuk membawa bus ke 0, dan melakukan buka untuk membawanya ke 1.

Jika itu ditarik ke bawah, Anda harus mengirim daya melalui chip untuk mendorong bus ke 1. Jika bus kebetulan pendek, itu mungkin banyak daya yang Anda kendarai melalui chip itu untuk mencoba mendorongnya hingga 1.

Penafian: Saya seorang EE yang cukup buruk pada saat ini.


3
Selamat datang di EE.SE. " Anda tidak harus mengirim begitu banyak daya melalui chip, jika itu menarik ke atas. " Jika resistor pull-up dan pull-down adalah ukuran yang sama maka arus akan sama. Pull-up akan membutuhkan arus yang bersumber dari chip yang digerakkan dan ditenggelamkan di chip mengemudi. Pull-down akan membutuhkan arus yang bersumber dari chip penggerak dan ditenggelamkan oleh chip yang digerakkan. Pendek yang tidak disengaja bisa menjadi V + atau ground.
Transistor
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.