Jawaban:
Pengaturan hub sensor
Dalam skenario ini, ada dua bus I²C. Sebut saja mereka bus lokal dan bus utama . Tujuan dari bus lokal adalah untuk menghubungkan sekelompok sensor ke mikrokontroler (μC). Tujuan μC adalah untuk menyurvei sensor, mengumpulkan informasi dari mereka, dan mendeteksi peristiwa tertentu. ΜC dalam peran tersebut disebut sensor hub . Hub sensor tidak bertanggung jawab atas fungsi tingkat tinggi; ada prosesor utama yang kuat untuk itu. Bus utama menghubungkan hub sensor ke prosesor utama. Jadi, hub sensor μC adalah master pada bus I²C lokal dan budak di bus utama I²C.
SPI dan I²C
PIC yang ditautkan di pos asli tidak membagikan pin antara SPI dan I²C. Namun, ada PIC lain yang menggunakan pin yang sama untuk perangkat keras SPI dan I²C, karena keduanya diimplementasikan dengan perangkat MSSP yang sama. Jika PIC memiliki dua periferal MSSP yang terpisah, maka satu dapat digunakan untuk perangkat keras SPI, sedangkan yang lainnya digunakan untuk perangkat keras I²C.
Alasan yang sangat umum untuk membutuhkan lebih dari satu bus adalah memiliki perangkat yang beroperasi pada kecepatan yang berbeda. Awalnya, I²C bekerja pada kecepatan maksimum 100 kHz. Kemudian, kecepatan ditingkatkan hingga maksimum 400 kHz, dan masih kemudian, hingga 1 MHz ke atas.
Gotcha adalah, karena alamat masing-masing perangkat tertanam dalam protokol I²C, maka jika Anda memiliki perangkat dengan peringkat kecepatan berbeda pada bus yang sama, katakanlah 100 kHz dan 400 kHz, Anda selalu harus menjalankan bus pada kecepatan terendah yang umum ke semua perangkat di bus yang sama (100 kHz dalam hal ini).
Jika Anda menjalankan bus pada kecepatan yang lebih tinggi (400 kHz), jelas perangkat berkecepatan rendah tidak akan berfungsi dengan baik, dan bahkan mungkin menafsirkan alamat perangkat berkecepatan tinggi sebagai miliknya, menyebabkan perangkat 400 kHz gagal karena baik. Tetapi bahkan jika Anda awalnya menjalankan bus pada 100 kHz, dan kemudian mencoba untuk mempercepat bus ke 400 kHz setelah menangani chip berkecepatan lebih tinggi, akan mungkin (walaupun mungkin tidak mungkin) untuk chip kecepatan rendah untuk menafsirkan salah satu dari paket data berkecepatan tinggi salah alamatnya, dan dengan demikian mengacaukan komunikasi di bus. Dalam kedua kasus, pada akhir pertukaran dengan perangkat 400 kHz, perangkat 100 kHz mungkin akan berada dalam kondisi yang tidak diketahui.
Jadi ini paling efisien, jika Anda memiliki perangkat yang berjalan pada kecepatan yang berbeda dan Anda memiliki beberapa port I²C dan Anda memiliki pin cadangan untuk memungkinkan kemewahan tersebut, memiliki satu kata I²C untuk perangkat 100 kHz, satu lagi untuk perangkat 400 kHz, dan lainnya untuk perangkat 1 MHz, karena kebutuhan Anda mungkin menentukan.
Ini bukan masalah dengan SPI karena setiap perangkat diaktifkan (ditangani) dalam perangkat keras oleh jalur pilih chip yang terpisah. Jadi kecepatan clock dapat dicocokkan dengan kecepatan chip yang dipilih (10 MHz, 20 MHz, apa pun) tanpa memiliki efek pada chip lain di bus yang sama, karena mereka tidak diaktifkan.
Juga bisa membiarkan Anda mendukung dua perangkat dengan alamat yang sama. Ya, sebagian besar perangkat memungkinkan Anda memilih, mungkin dua bit terbawah dari alamat mereka dengan tali. Baru-baru ini saya harus mendukung 4 perangkat yang masing-masing hanya memungkinkan Anda untuk mengatur LSB dari alamat mereka dengan sebuah resistor. Memiliki dua port berarti tidak ada biaya tambahan untuk saya.
Mungkin saya ingin satu menjadi master untuk banyak perangkat dan menghadirkan yang lain sebagai port slave, jadi master saya tidak perlu menunggu untuk mengambil bus untuk memberi saya perintah sementara saya polling sensor suhu untuk ke-10.000 waktu.
Tampaknya ada banyak tanggapan baik lainnya di utas ini, hanya menambahkan 2 sen saya.
Kecepatan.
Jika Anda harus mengakses dua perangkat I2C secara bersamaan, Anda dapat memiliki konflik yang signifikan. Atau, yang satu harus menunggu yang lain.
Kedua, I²C dapat digunakan untuk mendapatkan lebih banyak bandwidth (Anda dapat menerima atau mengirim dua byte sekaligus).
Jika Anda memiliki beberapa ADC yang berfungsi terus menerus, satu I²C sibuk sepanjang waktu.
Mengganti alamat juga memakan waktu, jadi dalam beberapa kasus - Anda dapat menggunakan dua port untuk dua perangkat dan menghindari perubahan alamat untuk menghemat waktu.
Lainnya menyebutkan banyak alasan untuk melakukan ini, saya akan menambahkan satu:
Anda mendapat banyak perangkat 5V I2C, dan banyak perangkat 3V3 I2C.
Misalnya saya punya mikro 3.3V yang memiliki dua port I2C, satu 5V toleran, yang lainnya 3V3 saja.