通訊速率
對于SPI通信并沒有規范最高的通信速率,在我的開發經驗中有見過達到50Mbit/s的應用場景,但通常比較常見的還是10Mbit/s左右。
具體選用多快的通信速度,還得在實際項目中根據情況具體設計,比如:
1、當前主從機的主頻和項目的具體應用都與SPI數據的處理能力有著直接關系,一般SPI通信的時鐘頻率都是來源于主頻分頻,這就在一定程度上限制了其通信速率上限。
即使能夠達到較高速的速率,而處理器還需要處理更多的業務邏輯,再去處理SPI數據也是不夠及時的,此時高速率并沒有太大的意義了。
2、SPI硬件PCB布線長度等等影響著線路阻抗,這也同樣限制了通信速率,一般通信距離越長,通信速度越低,否則容易造成通信不穩定。
特別是通信線路經過一些干擾源更是影響其穩定性,所以SPI作為一種相對高速的通信方式,一般都不會用于長距離通信中,而是大量用于微處理器與外部SPI接口的設備之間的通信,比如高速采樣芯片ADC、處理器之間等等。
3、前面說了即使SPI主機能夠達到較高的通信速率,但從機主頻或者數據處理能力不夠,這樣也是沒有太大意義的,當你可以通過配置從機為接收隊列或者DMA等方式進行優化,當然高速率在多機中能夠減少同步延時。
值得注意的是一些芯片標稱的最高通信速率,是在比較好的外界條件下的測試值,超過了該標稱值可能也能用,但并不會很穩定,容易導致通信異常。
所以具體選用多快的通信速度,還需根據實際情況分析確認。
容錯性
SPI不像IIC那樣存在應答機制,也沒有流控制機制,當從機配置較低,如果一個報文還沒處理完,后一個報文又到來,導致傳輸錯亂,其通信過程幾乎都是靠硬件來保證數據的傳輸穩定性,是一種不可靠傳輸。
當然如果是用于多機通信倒是可以通過制定可靠性校驗協議來保證傳輸數據的穩定,但這也在一定程度上會降低通信的有效數據傳輸速度。
像stm32的SPI外設發送和接收都存在獨立的CRC校驗功能,大致的原理就是使用CRC在每個位上進行串行計算,然后在最后一次數據傳輸結束時來傳輸CRC校驗值,接受方接收到CRC以后自動拿著數據和CRC值進行比對,看是與否有數據故障,如果存在傳輸問題就會置位相應的CRC故障標志位告知。
當然如果所選用的芯片SPI外設沒有獨立CRC模塊可以模擬類似的操作進行處理,只是相對比較耗時,畢竟這個CRC得軟件自己處理。
stm32的SPI外設的靈活度遠不止這些,比如配置成雙線單向模式等,可以把MISO和MOSI都向一個方向傳輸,從而提高一倍的傳輸速度,感興趣可以參考一下手冊玩一下。
審核編輯:劉清
-
SPI
+關注
關注
17文章
1722瀏覽量
92139 -
PCB布線
+關注
關注
21文章
463瀏覽量
42134 -
SPI通信
+關注
關注
0文章
35瀏覽量
11432
發布評論請先 登錄
相關推薦
![](https://file1.elecfans.com/web2/M00/BE/E8/wKgaomWvi0uAIyFeAAHfG6JEnoU330.jpg)
關于STM32的SPI主從雙機通訊問題
SPI通訊錯誤問題解決
nrf24l01+和stm32的spi通訊需要設置nrf24l01+的spi波特率嗎
Compact Rio下NI9401如何通過SPI通訊采集加速度信號?
nrf24l01+和stm32的spi通訊要設置nrf24l01+的spi波特率嗎?是在哪段代碼設置的
容錯CAN收發器TJA1054電子資料
硬件SPI與軟件模擬SPI速度區別
兩塊STM32之間SPI通訊進行的注意事項
硬件SPI與軟件模擬SPI速度區別實測
![硬件<b class='flag-5'>SPI</b>與軟件模擬<b class='flag-5'>SPI</b><b class='flag-5'>速度</b>區別實測](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
SPI通訊協議介紹
![<b class='flag-5'>SPI</b><b class='flag-5'>通訊</b>協議介紹](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
該如何提高代碼容錯率、降低代碼耦合度?
![該如何提高代碼<b class='flag-5'>容錯</b><b class='flag-5'>率</b>、降低代碼耦合度?](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
評論