Mengapa I²C hanya memiliki resistor pull-up (pertanyaan wawancara)?


15

Pewawancara ingin tahu mengapa resistor pull-up digunakan pada SDA dan SCL ketika logika yang berlawanan juga dapat diterapkan. Apakah ada penjelasan mengapa penggunaan resistor pull-up adalah desain yang dipilih?



Sama seperti komentar Protokol bus-mode Ultra-Cepat I2C berfungsi sebagai konfigurasi push-pull, lihat nxp.com/documents/user_manual/UM10204.pdf , bagian 3.2 Protokol bus-cepat-mode I2C-bus
Kvegaoro

Saya bertanya-tanya mengapa NXP tidak menentukan protokol I2C ultra-cepat yang menggunakan SDA dua arah dan SCK searah, membuat master drive SDA keras ketika ingin menghasilkan yang tinggi, dan membuat master menunggu cukup lama untuk jalur ditarik tinggi dalam kasus di mana itu akan peduli apa yang dikatakan budak?
supercat

Apakah pewawancara memberikan jawaban versi mereka?
tembaga. Bahwa

Jawaban:


14

Untuk sedikit memperluas jawaban Jon:

Ya, itu semua berkaitan dengan MOSFET mana yang ingin Anda gunakan.

MOSFET N-channel jauh lebih baik untuk beralih logika daripada P-channel karena:

  • Mereka umumnya memiliki resistensi yang jauh lebih rendah ( )RDSON
  • Mereka menghidupkan dan mematikan lebih cepat

Jadi untuk konfigurasi saluran terbuka (yaitu I2C), jauh lebih murah dan lebih mudah untuk membuatnya menggunakan pengaturan "idle high" dengan NOSFET kanal-channel daripada "idle low" dengan MOSFET kanal-P.

Opsi ketiga adalah "idle low" menggunakan MOSFET N-channel, tetapi untuk itu Anda memerlukan driver gerbang tegangan tinggi untuk menaikkan voltase gerbang cukup jauh di atas tegangan sumber untuk MOSFET untuk dinyalakan. Tidak praktis untuk bus komunikasi kecil, tetapi pengaturan ini sebenarnya cukup umum digunakan pada H-bridges untuk pengemudian motor di mana Anda ingin memiliki respons yang sama (atau serupa) antara sisi tinggi dan sisi rendah H-bridge. Menggunakan pasangan saluran-P dan saluran-N dalam jembatan-H biasanya berarti Anda harus menggabungkan zona mati antara mematikan saluran-P dan menghidupkan saluran-N karena membutuhkan waktu lebih lama, dan itu mengurangi efisiensi daya Anda .

Tetapi untuk bus komunikasi kecil seperti I2C di mana Anda memerlukan kecepatan tinggi, biaya rendah, dan kesederhanaan penggunaan, "idle high" dengan MOSFET kanal-N dan resistor pull-up sejauh ini merupakan yang paling hemat biaya.


Saya tidak setuju tentang "kecepatan tinggi" menjadi pertimbangan dalam I2C (setidaknya dalam desain awal). Pull-up resistif bukanlah cara untuk mencapai kecepatan tinggi jika itu adalah tujuannya.
The Photon

1
Jangan bingung pergantian kecepatan yang lebih tinggi dengan bandwidth yang lebih tinggi. Pergantian berkecepatan tinggi memberi Anda jauh lebih tajam yang berarti komunikasi yang lebih andal.
Majenko

1
Pull-up resistif juga bukan cara untuk mencapai kecepatan switching yang lebih tinggi.
The Photon

itulah sebabnya mengapa memilih nilai resistor yang tepat untuk I2C adalah penting 'dan mengapa Arduino jahat karena menggunakan pullup internal secara default.
Majenko

Ya, Anda dapat memilih resistor untuk mendapatkan kenaikan yang lebih baik. Tetapi keseluruhan sistem masih lebih lambat dan / atau menggunakan lebih banyak daya daripada dengan driver totem-pole (yang tentu saja akan menambah biaya lain).
The Photon

12

Keuntungan lain dari pasif pull up / pull down aktif, adalah dapat bekerja dengan berbagai voltase daya. Perhatikan bahwa level tinggi dan rendah digital secara eksplisit ditentukan dengan IIC. Level tersebut cukup rendah untuk bekerja dengan penarikan 3,3 V. Perangkat karenanya dapat dibangun yang bekerja dengan daya 5 V dan 3,3 V. Bahkan, jalur bus IIC dapat ditarik hingga 3,3 V, dan ini akan bekerja dengan campuran perangkat di bus yang secara terpisah bertenaga pada tegangan yang berbeda.


Saya hampir 100% ini adalah jawaban yang mereka cari, saya punya teman yang ditanya bahwa pada sebuah wawancara untuk sebuah perusahaan manufaktur CPU besar (tebak yang mana) dan itu adalah jawaban yang mereka cari.
user34920

6

Sementara NMOS memang memiliki keunggulan dibandingkan PMOS dalam hal kecepatan / area, perbedaan ini sangat kecil ketika Anda berbicara tentang driver pada satu atau dua pin. Dan setelah semua, sebagian besar driver output sebenarnya tipe tiang totem yang memerlukan baik NMOS dan PMOS, jadi apakah mereka telah memilih konfigurasi pull-down atau pull-up, mereka akan berakhir dengan driver output yang lebih kecil dari totem- pengemudi tiang.

Tetapi ada satu manfaat dari NMOS keluaran saluran terbuka dibandingkan PMOS saluran terbuka yang tidak berlaku untuk I2C secara langsung: ketika VCC positif, NMOS drain terbuka memungkinkan chip dengan tingkat VCC yang berbeda untuk dihubungkan satu sama lain. Ini adalah (bagian dari) mengapa banyak IC logika logika open-drain NMOS tersedia.

Di sisi lain, saya tidak mengetahui adanya chip open-drain PMOS yang tersedia di pasaran. Sebenarnya saya tidak percaya bahwa saya pernah mengalami output open-drain PMOS pada chip apa pun. (Saya telah menggunakan ECL berkali-kali, yang memiliki keluaran emitor open-NPN dengan perilaku yang mirip dengan PMOS open drain)

Ketersediaan NMOS open drain discrete logic chip membuat NMOS open drain jauh lebih akrab bagi para desainer elektronik daripada PMOS open drain.

Baik keakraban dan ketersediaan chip diskrit (untuk prototipe, misalnya), kemungkinan mempengaruhi desainer I2C untuk memilih konfigurasi open-drain NMOS.


6

Saya kira jawabannya kembali ke mengapa kita menggunakan konvensi darat negatif di tempat pertama (dan ini pasti tidak ada di mana-mana sebelum era semikonduktor). Alasan untuk ini adalah bahwa perangkat N-Channel memiliki kinerja yang lebih baik daripada perangkat P-Channel karena fisika dari jenis operator mayoritas yang digunakan di dalamnya.

Pada hari-hari awal sirkuit terpadu, ini adalah batasan yang cukup serius sehingga ada preferensi untuk menggunakan transistor N-Channel (atau NPN) untuk mencapai kinerja setinggi mungkin. Dari ini kami mendapat sistem ground negatif dan keluaran kolektor terbuka yang mengharuskan penggunaan resistor pull-up daripada pull-down.

Tentu saja bus I2C bukan kecepatan tinggi sehingga tidak ada alasannya tidak dapat diimplementasikan menggunakan resistor pull-down, tetapi juga tidak ada keuntungan. Jadi kami tetap dengan konvensi dan menggunakan pull-up.


2

Berikut adalah spekulasi (berdasarkan sejarah) ...

Ketika Anda memiliki pullup (daripada push-pull), Anda jelas dapat memiliki beberapa perangkat dalam pertentangan untuk bus tanpa arus berlebih mengalir (Good Thing - tetapi Anda dapat mencapai hal yang sama dengan pull-down).

Di "masa lalu" transistor bipolar, logika TTL paling sederhana menggunakan kolektor terbuka dengan transistor NPN - semuanya dirujuk ke ground, yang membuat level pemicu mudah untuk ditentukan terlepas dari tegangan bus. Juga, NPN lebih cepat dari PNP.

Jika saya memiliki beberapa perangkat yang bekerja dengan tegangan suplai mereka sendiri, dan tegangan suplai tidak konstan, maka memiliki pull-up daripada pull-down menjadi keharusan. . Jika beberapa perangkat mencoba menarik bus ke rel suplai masing-masing, aliran arus akan tidak dibatasi dan sesuatu mungkin menggoreng. Setidaknya mereka semua sepakat pada nilai dasar, sehingga masalah ini tidak muncul.

Dengan CMOS, ceritanya berubah - sekarang level pemicunya adalah mid rail. Tetapi EE bisa menjadi kelompok tradisional. Tentu saja, datang dari masa transistor awal saya tidak pernah genap mempertanyakan pilihan pull-up, karena alasan di atas.

Seperti yang saya katakan, ini hanya spekulasi.


1

Ini mungkin hal bersejarah.

Transistor lama dan sirkuit terintegrasi sebenarnya mengkonsumsi lebih sedikit daya ketika mereka berada di 5 V daripada di 0 V. Karena ada perbedaan yang signifikan antara kedua level, desainer memilih untuk membuat keadaan 'idle' menjadi 5 V satu. Kemudian, seiring berjalannya waktu, transistor dan IC meningkat, membuat kedua negara mengkonsumsi jumlah daya yang kira-kira sama, tetapi tidak ada alasan nyata untuk mengubah standar.

Sekarang, Anda melihat banyak hal seperti ini - di mana idle 5 V - hanya karena standarnya tidak pernah berubah.


Masih benar bahwa sebagian besar IC dapat menenggelamkan lebih banyak daya daripada yang dapat mereka peroleh, sehingga masih berlaku.
Joel B

1

Sudah bertahun-tahun sejak saya membaca spec I2C, tapi saya ingat ketika pertama kali digunakan orang sering menyebutnya bus 2-wire-open-collector. Itu membuat koneksi dan deteksi tabrakan sangat mudah bahkan untuk menggedor bit. Bahkan 20 tahun yang lalu itu tidak dianggap sebagai bus berkinerja tinggi, hanya murah dan mudah.


1

Saya akan mengatakan bahwa itu karena I2C didefinisikan sebagai bus di mana semua unit yang terhubung harus saluran terbuka atau kolektor terbuka. Ini berarti bahwa ia hanya dapat mendorong bus rendah, tidak tinggi. (Ketika transistor output drive dimatikan, pin dalam keadaan impedansi tinggi.)

Skema ini memberikan beberapa manfaat yang bagus, misalnya Anda dapat menghubungkan perangkat dengan voltase pensinyalan yang berbeda dan bus dapat sembuh sendiri dari kesalahan komunikasi.

Jelas, standar dapat didefinisikan sebaliknya, sebagai konfigurasi idle-low / active-high, dan jawaban lain di sini menyentuh elemen itu dengan cukup baik.

Sumber: LabWorX 1, Menguasai I2C Bus, oleh Vincent Himpe. Buku yang sangat bagus tentang I2C, latar belakang historisnya, cara mengimplementasikannya dalam perangkat keras dan cara menggunakannya dalam implementasi perangkat lunak dan debug.


1

Jawaban sebenarnya yang belum disentuh oleh siapa pun adalah bahwa hal itu memungkinkan Anda untuk menghubungkan perangkat yang didukung oleh tegangan yang berbeda (selama pin I / O toleran). Misalnya perangkat 3.3V dapat berkomunikasi dengan perangkat yang dimatikan 1.8V selama IO perangkat 1.8V toleran terhadap tegangan hingga 3.3. Tentu saja setiap perangkat dapat menggerakkan 0V, tetapi tidak setiap perangkat mungkin dapat mencapai tegangan pada resistor pull-up Anda.

Selain itu, sebagian besar IC dapat tenggelam lebih banyak saat ini daripada sumbernya. Ini karena disipasi panas. Jadi arus tenggelam (driving ground) dari pull-up lebih mudah untuk bagian tersebut daripada sumber arus (mengemudi tegangan tinggi) ke pull-down.

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.