ESP8266 SPI 開發之軟硬基礎分析


 一 什么是SPI接口?

  SPI是一種高速、高效率的串行接口技術。通常由一個主模塊和一個或多個從模塊組成,主模塊選擇一個從模塊進行同步通信,從而完成數據的交換。SPI是一個環形結構,通信時需要至少4根線(事實上在單向傳輸時3根線也可以)
。SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的設備共有的,它們是MISO(主設備數據輸入)、MOSI(主設備數據輸出)、SCLK(時鍾)、CS(片選)。
(1)MISO– Master Input Slave Output,主設備數據輸入,從設備數據輸出;
(2)MOSI– Master Output Slave Input,主設備數據輸出,從設備數據輸入;
(3)SCLK – Serial Clock,時鍾信號,由主設備產生;
(4)CS – Chip Select,從設備使能信號,由主設備控制。
   其中,CS是從芯片是否被主芯片選中的控制信號,也就是說只有片選信號為預先規定的使能信號時(高電位或低電位),主芯片對此從芯片的操作才有效。這就使在同一條總線上連接多個SPI設備成為可能。
接下來就負責通訊的3根線了。通訊是通過數據交換完成的,這里先要知道SPI是串行通訊協議,也就是說數據是一位一位的傳輸的。這就是SCLK時鍾線存在的原因,由SCLK提供時鍾脈沖,SDI,SDO則基於此脈沖完成數據傳輸。數據輸出通過 SDO線,數據在時鍾上升沿或下降沿時改變,在緊接着的下降沿或上升沿被讀取。完成一位數據傳輸,輸入也使用同樣原理。因此,至少需要8次時鍾信號的改變(上沿和下沿為一次),才能完成8位數據的傳輸。
         SCLK信號線只由主設備控制,從設備不能控制信號線。同樣,在一個基於SPI的設備中,至少有一個主控設備。這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的串行通訊不同,普通的串行通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,因為SCLK時鍾線由主控設備控制,當沒有時鍾跳變時,從設備不采集或傳送數據。也就是說,主設備通過對SCLK時鍾線的控制可以完成對通訊的控制。SPI還是一個數據交換協議:因為SPI的數據輸入和輸出線獨立,所以允許同時完成數據的輸入和輸出。不同的SPI設備的實現方式不盡相同,主要是數據改變和采集的時間不同,在時鍾信號上沿或下沿采集有不同定義,具體請參考相關器件的文檔。
            最后,SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。
 

二 硬件接口

    ESP8266對SPI支持的特別好,可以支持HSPI,也就是高速SPI,最高速率可達80M。這個數據,直接碾壓stm32 f407了。

它占用的pin腳如下所示:

 

 這里面有6個管教,其實,正常使用的時候,一般需要前4個即可工作,單向的話三個就行了。

 

三 工作流程

   根據官方提供的例子,我分析了一下他們的工作流程:具工作流程如下所示:

 

A 首先SPI的硬件相關接口配置:

 

spi_init

 

B 其次,是SPI的傳輸控制配置,這里的配置主要是地址位和cmd

函數:

spi_trans(HSPI_HOST, trans);

 

C 數據讀寫:這里的數據讀寫使用了兩個線程,保證兩個互不干擾,非常的nice.

    // create spi_slave_write_master_task
    xTaskCreate(spi_slave_write_master_task, "spi_slave_write_master_task", 2048, NULL, 10, NULL);

    // create spi_slave_read_master_task
    xTaskCreate(spi_slave_read_master_task, "spi_slave_read_master_task", 2048, NULL, 10, NULL);

我這個是以slave模式為例子的,master的配置要稍微復雜一些。有興趣的同學可以做一下分析。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM