SPI通信在嵌入式領域是非常常用的一種通信方式了,相比串口、IIC等等,SPI通信是一種高速、高效率的串行接口技術。
然而最近在新項目開發中使用SPI通信卻遇到了不少問題,過程中還是有挺多技術細節和知識點需要把握住的,那么今天bug菌就結合最近的使用情況和一直以來在SPI通信上踩過的坑進行總結和記錄,一起避坑。 本文為基礎鞏固篇:
1通信形式
SPI是一種全雙工、同步串行的通信方式,全雙工、半雙工等,表示某一時刻,數據的流動形式,全雙工即可雙向同時收發,而半雙工則在一個時刻只能收或者發,通常全雙工具有兩條獨立通信線路,而半雙工則共用同一條線路。
從SPI通信接線圖可以看出,MOSI用于主機數據輸出,從機數據輸入,MISO引腳的數據流則剛好與之相反,所以數據流收發是走的兩條獨立的線路,從而可實現全雙工通信模式,當然你也可以用于只用于單向數據傳輸,比如省略掉MISO僅主機傳輸從機數據等。
SPI通信有一個SCLK時鐘線作為通信的同步信號,用來標定數據在MOSI和MISO引腳上的傳輸情況,SCLK是由主機來控制提供,從機檢測識別,從而同步完成數據傳輸。
片選信號CS引腳,還記得有一次面試問片選信號CS英文是什么?英文直譯即可--Chip Select。
片選信號在大部分數字芯片都有存在,外界給該引腳相應的電平即可選中,相當于一個"總開關",大部分從設備都是低電平被選中(電路圖中通常在CS上劃線標識),如果一直被選中則直接接地即可;當然也有少部分高電平選中則可直接接到VCC,切記不可懸空,以免異常。
這樣看SPI的通信線路非常簡單,沒有繁雜的線路硬件也省了不少事,但很多朋友包括bug菌曾經因為把主機的MOSI接到從機的MISO而折騰得不輕,都是慣性思維惹的禍,一定要記住是對應引腳相連。
2通信線路
SPI是一種主從通信方式,在SPI通信總線上通常只有一個主機,一切通信的開始都是以主機發起,那如果在一條總線上與多個從設備通信呢?下面以兩個從機為例,更多的從機也是類似的。
通過不同的片選引腳來選中不同的從設備,從而完成一對多的通信過程。通常多從機的情況都會采用多余的IO口連接從設備的片選引腳,以便分時控制從設備,達到一主多從機的主從控制方式。
當然如果獨立的IO口引腳有限,可以采用IO口擴展芯片進行選中,也是比較方便的。
3通信數據
SPI通信是一種交換數據的形式,主機根據SCLK時鐘把數據從MOSI引腳按bit位發送的同時,從機也以相同的速率把數據從MISO引腳傳輸,其傳輸數據形式如下:
從SPI通信數據流圖可以看出其發送與接收形成了一個封閉的環,所要傳輸的數據像水在一根管道內循環流動,所以其硬件線路上并沒有像I2C那樣有所謂的應答機制,通信效率上提高不少,但數據可靠性也會有一定的減弱。
前面bug也談到SPI是一種主從通信機制,那么使得“管子”內數據流涌動的源泉一方面需要SPI的SCLK時鐘保持好節奏,另一方面就是需要主機來推動,所以如果master只是想獲取slave的數據,也需要發送空數據來使得整個數據流動起來,從而獲得從機的數據。
細心的朋友應該注意到上圖中MSB和LSB方向了,通常SPI通信都是以MSB來進行發送,但像stm32芯片這樣的芯片可以設置是LSB先發送還是MSB先發送。
所以在分析SPI通信數據的時候這些數據都是需要提前了解的。
4通信電平?
SPI比較麻煩點的就是時鐘極性和時鐘相位的確定了,但再怎么麻煩也就確定了4種模式。
如下是4種模式的時序圖,其中CPOL(Clock Polarity)表示時鐘極性,CPHA(Clock Phase)表示時鐘相位。
從圖中我們可以分析得到:
1、CPOL和CPHA共同決定數據的采集方式。
2、CPOL決定了SCLK默認狀態,當CPOL=0,時鐘空閑時是低電平;當CPOL=1,時鐘空閑時為高電平。
3、CPHA決定了數據在第幾個跳變沿采集,當CPHA=0,在SCLK第一個跳變沿采集穩定數據;當CPHA=1,在SCLK第二個跳變沿采集穩定數據。
每個bit的數據交換,都是在電平穩定的時候進行數據電平采集,在電平變化的時候進行數據發送,一般從設備像高精度ADC等等,出廠就已經是固定了某種模式,我們需要做的就是通過配置可編程的主機SPI外設在相同的一種頻率和模式下通信,否則就是造成數據錯亂。
現在比較流行庫開發,很多外設使用案例直接可以拿過來用,或者嘗試著調整幾個參數就可以了,似乎不需要懂太多的原理,但這樣的學習終究只是把芯片玩起來了,要做到一通百通還是得從最原始的理論出發,只有把握住這些重點才能在項目開發的過程中直面問題并搞定它。
下一篇進階避坑篇,我們再更加深入聊聊SPI。
原文標題:大話SPI通信--基礎鞏固篇
文章出處:【微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
總線
+關注
關注
10文章
2878瀏覽量
88051 -
SPI通信
+關注
關注
0文章
35瀏覽量
11358 -
MOSI
+關注
關注
0文章
5瀏覽量
3984
原文標題:大話SPI通信--基礎鞏固篇
文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論