- 我想知道SPI和I2C通信協議哪一個是 更快?我在一篇文章中看到SPI的速度更快,但他們爲什麼沒有給出解釋呢?這是否是因爲與I2C相比,SPI的開銷更低(如開始,確認,停止)?
- 哪一個更好?我已經看到,ADC主要是SPI 是首選,但爲什麼?對於Flash來說,我也主要使用SPI 協議,但對於SPI和I2C傳感器。現在,是什麼使得 決定一個外設我應該去SPI和 另一個I2C是首選?
回答
更好的問題是我什麼時候應該使用I2C以及何時應該使用SPI。與工程總是一樣,兩種協議都有不同的優缺點。我將它們在下面進行了比較,以便您能夠評估什麼更符合您的要求。
我自己的快速比較:
補充說明:
- SPI通常用於從設備,其中速度事項例如ADC外圍設備,FLASH存儲器等。
- I2C通常用於從屬設備,這些從設備在I2C速度約束條件下很好,或者像傳感器那樣慢,可能需要較長時間才能獲得測量結果。帶I2C的流行溫度和溼度傳感器HTU21-D執行3-16 [ms]之間的測量(此時間取決於所選的測量分辨率)。
- Post explaining I2C Bus Length constrains.
- Post explaining why SPI is faster than I2C
PS:
- 最快的ADC外設不使用I2C或SPI。他們使用並行I/O。
- 請記住,對於簡單的(愛好)項目它通常沒有關係,你會沒事的任何一個。
超過1米的I2C也很差(容易出錯,或者需要額外的工作來防止它),我不會使用I2C超過20釐米。 – 12431234123412341234123
好點。校驗和或至少奇偶校驗位總是有用的,對於更長的距離更是如此。 –
@KrystianSakowski:我曾經參與過一個項目,該項目使用SPI遠距離傳輸,並且錯誤被認爲是來自系統中重負載的干擾,團隊添加了錯誤檢查和重試協議層,並且仍然不可靠。最後所有的錯誤都由軟件引入;一旦SPI驅動程序中的基本錯誤得到修復,錯誤檢查/重試內容就變得多餘了。所以我的觀點是,在添加代碼以處理信號完整性和干擾問題之前,在電氣良好的環境中對其進行短距離測試。 – Clifford
- 1. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 2. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 3. 什麼時候應該使用sed,什麼時候應該使用awk
- 4. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 5. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 6. 什麼時候應該使用datagrid,何時應該使用datagridview?
- 7. 什麼時候應該使用$(object),何時應該使用$ object?
- 8. 什麼時候應該使用AWS,什麼時候不使用
- 9. 什麼時候應該使用async/await,什麼時候不用?
- 10. 什麼時候應該使用FSharpFunc.Adapt?
- 11. 什麼時候應該使用_aligned_malloc()?
- 12. 什麼時候應該使用`use`?
- 13. 什麼時候應該使用$ rootScope?
- 14. 什麼時候應該使用$(document).ready?
- 15. 什麼時候應該使用html5 sessionStorage?
- 16. 什麼時候應該使用OWIN Katana?
- 17. 什麼時候應該使用流?
- 18. 什麼時候應該使用Promises?
- 19. 什麼時候應該使用setScriptTimeout?
- 20. 什麼時候應該使用助手?
- 21. 什麼時候應該使用Datomic?
- 22. 什麼時候應該使用XS?
- 23. 什麼時候應該使用const?
- 24. 什麼時候應該使用退貨?
- 25. 什麼時候應該使用getElementById?
- 26. 什麼時候應該使用Solandra
- 27. 什麼時候應該使用@android:id /?
- 28. 什麼時候應該使用geom_map?
- 29. 什麼時候應該使用scala.util.DynamicVariable?
- 30. 什麼時候應該使用RESTful?
關於I2C的其他壞處,它使用只有3mA的開路集電極,而SPI使用全推輓,這使得SPI更少出錯。 – 12431234123412341234123
您可能通過問「有什麼區別......」而不是哪個更好,保存了這個問題。有點問題,他們仍然會更合適,你似乎迷路了;這是這個問題的錯誤地點;請嘗試http://electronics.stackexchange.com/ – Clifford
當外設具有I2C和SPI並且具有SPI時,可以使用I2C。如果它不是性能關鍵(例如LCD顯示器),那麼它可能支持在同一芯片上。或者有一個版本和另一個版本。對於需要表現的事情,他們會有spi。 –