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