> For the complete documentation index, see [llms.txt](https://cavedu.gitbook.io/linkit-7697/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cavedu.gitbook.io/linkit-7697/linkit-7697-arduinoide/kai-fa-zhi-nan/spi.md).

# SPI

LinkIt 7697 支援 SPI Master 運作模式。

### 使用 SPI 裝置時的注意事項 <a href="#spi-shi-yong-spi-zhuang-zhi-shi-de-zhu-yi-shi-xiang" id="spi-shi-yong-spi-zhuang-zhi-shi-de-zhu-yi-shi-xiang"></a>

雖然 MT7697 晶片支援硬體 SPI 運作，但由於架構設計的緣故，無法完全相容於 Arduino 定義的 SPI API，因此 LinkIt 7697 BSP 內建的 SPI 函式庫是透過呼叫 GPIO API 完成實作的 (亦即為軟體 SPI)，不過這對大多數 Arduino 的應用情境並不造成影響。若要使用 LinkIt 7697 的硬體 SPI 功能，請參考 LinkIt SDK [相關文件](http://labs.mediatek.com/api/mt7687/group___s_p_i___m_a_s_t_e_r.html)說明。

### 連接 SPI 裝置 <a href="#spi-lian-jie-spi-zhuang-zhi" id="spi-lian-jie-spi-zhuang-zhi"></a>

下圖為 LinkIt 7697 透過 SPI 介面與 [BMP183 氣壓高度計](https://www.adafruit.com/product/1900)連接的示意圖與使用方法：

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FJFAVxDBqvntzMkVcEbfl%2Fbmp183.png?alt=media\&token=e02cd7d4-1825-45d7-ab67-209bea85acdc)

1. 將開發板與 BMP183 感應器如圖示連接。
2. 下載 [Adafruit Unified Sensor Driver](https://github.com/adafruit/Adafruit_Sensor) 與 [Adafruit BMP183 函式庫](https://github.com/adafruit/Adafruit_BMP183_Library)的 ZIP 壓縮檔。
3. 在 Arduino IDE 裡開啟 **Sketch / Include Library / Add .Zip Library** 並選取在上一步驟中下載的兩個 ZIP 壓縮檔 (**Adafruit\_Sensor-master.zip** 與 **Adafruit\_BMP183\_Library-master.zip**)。
4. 在使用者自定義函式庫目錄裡開啟 **Adafruit\_BMP183.cpp** 檔案。
5. 在第 **25** 行的位置，加入 `_delay_ms()` 函式定義的程式碼如下：

   ```
   #include <SPI.h>
   #define _delay_ms(t) delay(t)
    
   Adafruit_BMP183::Adafruit_BMP183(int8_t SPICS ) {
   ```
6. 將第 **46** 行的程式碼註解掉，並替換為下例第 **47** 行的 `SPISettings()` 初始化方式：

   ```
   boolean Adafruit_BMP183::begin(bmp183_mode_t mode) { 
       if (_clk == -1) { 
           SPI.begin(); 
           //SPI.setDataMode(SPI_MODE0);
           SPI.beginTransaction(SPISettings(7000000, MSBFIRST, SPI_MODE0)); 
       #ifdef __AVR__ 
           SPI.setClockDivider(SPI_CLOCK_DIV16);
   ```
7. 儲存編輯的檔案。
8. 點選 IDE 的 **Upload** 按鈕進行編譯以及上傳程式至開發板。
9. 上傳完成後，開啟 Serial Monitor (將 baud rate 設定為 **9,600**) 就能看到 BMP183 的輸出如下：

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FYDZxPubpm7EgbRTPqwhu%2Fbmp183_output.png?alt=media\&token=97e4cd86-d9e4-4cbd-a857-5b6472ef1592)

註：也可至 MediaTek Labs 的 [GitHub repo](https://github.com/MediaTek-Labs/linkit-7697-peripheral-drivers-for-arduino) 下載此修改過後的程式碼。
