Saya merancang perangkat yang disematkan yang ingin saya operasikan dengan periferal pihak ketiga melalui bus serial. Haruskah saya memilih SPI, I²C, atau bus lain?
Periferal akan menjadi bandwidth yang cukup rendah (beberapa sensor yang berkomunikasi melalui bus, disurvei secara berkala) dan kemungkinan besar berada dalam jarak satu meter atau kurang dari pengontrol. Satu-satunya tugas pengontrol adalah mengumpulkan data sensor, mengemasnya dengan beberapa cara, dan kemudian mengirimkannya ke modul nirkabel melalui bus lain (meskipun bus sensor berpotensi digunakan kembali untuk ini juga).
Jawaban:
Jika Anda tidak yakin, dan persyaratan Anda tidak jelas, saya akan memilih I²C.
Perbedaan utama antara SPI dan I²C adalah bahwa SPI membutuhkan jalur pemilihan chip untuk setiap perangkat. I²C menyiarkan alamat periferal pada awal komunikasi, sehingga tidak perlu jalur pilih-chip. Garis pilih chip menjadi rumit setelah beberapa yang pertama.
Di sisi lain, SPI mungkin lebih mudah diimplementasikan dan didebug. Ini bisa menjadi pemenang jika Anda hanya ingin terhubung ke beberapa perangkat.
Saya akan mengesampingkan USB kecuali jika Anda memerlukan kecepatan data tinggi pada jarak yang relatif jauh (m daripada cm). Saya juga mengesampingkan RS-232 kecuali itu masih 1976 dan perangkat Anda memerlukan sinyal besar untuk membedakan sedikit dari kebisingan.
Anda mungkin mempertimbangkan Dallas 1-wire, tapi saya curiga itu tidak biasa seperti I²C, dan bus "1-kawat" yang membutuhkan 2 kabel untuk beroperasi selalu terasa agak mencurigakan bagi saya.
sumber
Karena Anda mengatakan bahwa itu akan menjadi bandwidth rendah saya akan mengalokasikan cukup IO untuk menangani SPI dan I2C. Saya juga akan jika mungkin memiliki saluran CS tambahan sehingga Anda dapat menjalankan beberapa perangkat SPI. Juga jangan lupa melihat bagaimana Anda akan memberi daya pada perangkat. Jika Anda kehabisan baterai untuk mendapatkan masa pakai maksimum, Anda perlu menempatkan perangkat dalam mode daya rendah atau menghilangkan daya saat tidak digunakan. Juga gunakan Anda pengendali modul pengontrol serial jika memungkinkan banyak pengontrol akan mux SPI, I2C dan serial. Jika Anda dapat dan memisahkan nirkabel dari sensor ini membuatnya lebih mudah untuk mematikan perangkat saat tidak digunakan. Juga beberapa sensor memiliki garis yang akan memberitahu pengontrol kapan mereka perlu diservis sehingga Anda juga ingin memiliki IO tambahan yang masuk ke pin idealnya Anda dapat menghasilkan interupsi.
sumber
Pertanyaannya adalah sedikit masalah karena masalah definisi.
Komunikasi serial pada dasarnya adalah apa yang Anda butuhkan jika Anda ingin berkomunikasi dengan beberapa perangkat eksternal tanpa menggunakan beberapa port pada controller Anda. Pada dasarnya setiap metode komunikasi serial membutuhkan jam dan konfigurasi tentang cara menangani koneksi data.
SPI adalah bus 4 kawat. I2C adalah bus 2 kawat.
Masing-masing memiliki karakteristik berbeda. Apa yang perlu Anda jawab adalah seberapa cepat komunikasi Anda perlu, seberapa andalnya komunikasi itu, pilihan apa yang ditawarkan mikrokontroler Anda, dll.
Ini wikipedia artikel dan ini situs referensi menjelaskan lebih jelas daripada yang saya bisa, juga mengikuti referensi untuk belajar lebih banyak lagi!
sumber
Pada dasarnya, Anda harus memilih antara I2C dan SPI.
Terlepas dari bus mana yang Anda gunakan, Anda harus mempertimbangkan tingkat tegangan sensor Anda dan periferal pihak ketiga. Anda dapat melakukan ini dengan membuat konverter Anda sendiri dengan dua MOSFET (Hanya berjalan satu arah - Ambil / tidak ada perubahan atau turun / tidak ada perubahan; hanya masalah jika Anda perlu menjalankan sensor Anda pada 3.3 dan antarmuka dengan 1.8 dan 5V master). Lihat AN10441 NXP [PDF]. Ini juga akan berfungsi untuk SPI (Hanya menghapus pullups). Anda perlu menambahkan garis ke konektor Anda untuk membuat tegangan referensi (jika Anda belum melakukannya.)
Satu kelemahan dari I2C adalah Anda terbatas pada jam paling lambat di bus. Jika satu sensor hanya mampu 100kHz dan Anda ingin berbicara dengan memori Anda pada 400kHz atau 1MHz (keduanya kecepatan valid), perilaku sensor Anda yang lebih lambat tidak ditentukan. Jika Anda menggunakan SPI, jalur pilih chip berarti bahwa sensor yang lebih lambat bahkan tidak akan mendengarkan apa yang ada di bus, dan Anda dapat menjalankan kecepatan yang berbeda untuk sensor yang berbeda.
sumber
Saya akan menggunakan I2C. Pastikan Anda bisa mendapatkan modul nirkabel yang dapat berkomunikasi melalui I2C jika Anda ingin memilikinya di bus yang sama dengan sensor Anda. Sebagian besar perangkat komunikasi yang saya lihat menggunakan SPI bukan I2C.
sumber