當您將微控制器連接到傳感器,顯示器或其他模塊時,您是否考慮過這兩種設備是如何相互通信的?他們到底在說什么?
事實上電子設備之間的通信就像人類之間的交流,雙方都需要說相同的語言。在電子產品中,這些語言稱為通信協議。首先我們將從一些基本概念入手,然后再詳細說明SPI的工作原理。
1
串行VS并行
電子設備通過發送數據位從而實現相互交談。位是二進制的,只能是1或0。通過電壓的快速變化,位從一個設備傳輸到另一個設備。在以5V工作的系統中,“0”通過0V的短脈沖進行通信,而“1”通過5V的短脈沖進行通信。
數據位可以通過并行或串行的形式進行傳輸。 在并行通信中,數據位在導線上同時傳輸。下圖顯示了二進制(01000011)中字母“C”的并行傳輸:
在串行通信中,位通過單根線一一發送。下圖顯示了二進制(01000011)中字母“C”的串行傳輸:
2
SPI總線
SPI是一種常見的設備通用通信協議。它有一個獨特優勢就是可以無中斷傳輸數據,可以連續地發送或接收任意數量的位。而在I2C和UART中,數據以數據包的形式發送,有著限定位數。在SPI設備中,設備分為主機與從機系統。主機是控制設備(通常是微控制器),而從機(通常是傳感器,顯示器或存儲芯片)從主機那獲取指令。一套SPI通訊共包含四種信號線:MOSI (Master Output/Slave Input) – 信號線,主機輸出,從機輸入。MISO (Master Input/Slave Output) – 信號線,主機輸入,從機輸出。SCLK (Clock) – 時鐘信號。SS/CS (Slave Select/Chip Select) – 片選信號。
實際上,從機的數量受系統負載電容的限制,它會降低主機在電壓電平之間準確切換的能力。
工作原理
時鐘信號
每個時鐘周期傳輸一位數據,因此數據傳輸的速度取決于時鐘信號的頻率。 時鐘信號由于是主機配置生成的,因此SPI通信始終由主機啟動。
設備共享時鐘信號的任何通信協議都稱為同步。SPI是一種同步通信協議,還有一些異步通信不使用時鐘信號。 例如在UART通信中,雙方都設置為預先配置的波特率,該波特率決定了數據傳輸的速度和時序。
片選信號
主機通過拉低從機的CS/SS來使能通信。 在空閑/非傳輸狀態下,片選線保持高電平。在主機上可以存在多個CS/SS引腳,允許主機與多個不同的從機進行通訊。
如果主機只有一個片選引腳可用,則可以通過以下方式連接這些從器件:
MOSI和MISO
主機通過MOSI以串行方式將數據發送給從機,從機也可以通過MISO將數據發送給主機,兩者可以同時進行。所以理論上,SPI是一種全雙工的通訊協議。
2. 主機拉低SS / CS引腳,激活從機
3. 主機通過MOSI將數據發送給從機
4. 如果需要響應,則從機通過MISO將數據返回給主機
使用SPI有一些優點和缺點,如果在不同的通信協議之間進行選擇,則應根據項目要求進行充分考量。
優劣
優點
SPI通訊無起始位和停止位,因此數據可以連續流傳輸而不會中斷;沒有像I2C這樣的復雜的從站尋址系統,數據傳輸速率比I2C更高(幾乎快兩倍)。獨立的MISO和MOSI線路,可以同時發送和接收數據。
缺點
SPI使用四根線(I2C和UART使用兩根線),沒有信號接收成功的確認(I2C擁有此功能),沒有任何形式的錯誤檢查(如UART中的奇偶校驗位等)。
UART代表通用異步接收器/發送器也稱為串口通訊,它不像SPI和I2C這樣的通信協議,而是微控制器中的物理電路或獨立的IC。UART的主要目的是發送和接收串行數據,其最好的優點是它僅使用兩條線在設備之間傳輸數據。UART的原理很容易理解,但是如果您還沒有閱讀SPI 通訊協議,那可能是一個不錯的起點。
轉載汽車電子相關文章
轉自汽車電子與軟件