SPI 函式庫
引用 SPI 函式庫可使得 86Duino 成為 SPI Master 的通訊設備
SPI 簡介
串列週邊介面(SPI)使微處理器能與一個以上近距離周邊設備進行同步串列資料協定通訊;也可以應用於兩個微處理器之間的通訊。
Master設備控制SPI通訊串列上的周邊設備。這些設備都具有下列四支通訊腳位:
- MISO (Master In Slave Out) – Slave 設備傳送資料到 Master 設備的腳位。
- MOSI (Master Out Slave In) – Master 設備傳送資料到 Slave 設備的腳位。
- SCK (Serial Clock) – 由 Master 設備產生同步訊號,連接至每個周邊設備的腳位。
- SS (Slave Select) – Master 選擇要連結的周邊設備的腳位。
Slave 偵測到 Slave Select 為低電位時,會接收 Master 傳送的資料 ; Slave 偵測到 Slave Select 為高電位時會忽略 Master。這樣的機制使得 Master 連接多個 SPI 設備時可以共用 MISO、MOSI 與 SCK。
撰寫使用 SPI 與設備通訊的程式碼要注意下列事項:
- 資料傳送的順序是先送高位元還是低位元?資料傳送的順序可以用
SPI.setBitOrder()
函式設定。 - 資料傳送 clock 等待時為高或低電位?資料取樣為 clock 上緣或下緣觸發?以上可由
SPI.setDataMode()
函式設定。 - SPI 資料傳送速率如何設定?可由
SPI.setClockDivider()
函式設定。
SPI 的標準較寬鬆,造成每個設備的實施的方式有點差異。撰寫 SPI 設備應用程式前必須查閱設備的數據表選用參數。
一般而言,有四種轉輸模式。這些模式規劃傳送數據與 clock 之間的關係例如數據在 clock 上緣或下緣取樣(稱為時脈相位)。非傳送數據時 clock 維持在高或低電位(稱為時脈極性)。根據時脈與極性可組合四種模式如下表所示:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) |
SPI_MODE0 |
0 | 0 |
SPI_MODE1 |
0 | 1 |
SPI_MODE2 |
1 | 0 |
SPI_MODE3 |
1 | 1 |
SPI.setDataMode()
函式可依上表設定時脈相位與極性。
每個 SPI 設備允許的最高速率不同,使用 SPI.setClockDivider()
設定 SPI 的時脈速率,使 SPI 裝置正常運作。撰寫 SPI 週邊程式碼除了要設定 SPI 參數外,也要依 SPI 設備的 data sheet,按所需功能設定暫存器。
在 Wiki 上可以看到更多的資訊。
連接埠
不同版本的 86Duino SPI 對映腳位如下表所示
86Duino Board | MOSI | MISO | SCK | SS |
Zero | SPIDO | SPIDI | SPICLK | SPICS |
One | SPIDO | SPIDI | SPICLK | SPICS |
Educake | – | – | – | – |
注意:設計 SPI 專案時可參考下圖 MISO、MOSI、SCK 及 SS 腳位都在 SPI 接頭上。
函式
- begin()
- end()
- setBitOrder()
- setClockDivider()
- setDataMode()
- setSS()
- transfer()
範例
Arduino 的 SPI 函式庫教程,可在 86Duino 執行(但要注意範例中的 Arduino 的 SPI 腳位與 86Duino 不同)
- BarometricPressureSensor:SPI 使用 SPI 介面讀取感測器的壓力及溫度
- SPIDigitalPot:使用 SPI 介面設定數位電位計
See also
- shiftOut()
- shiftIn()
The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.