天天看點

esp8266 spi slave 驅動調試

最近在ESP8266 上要搞個通訊協定與mcu 通訊 ,8266 做從機,開發的過程以及遇到的問題,記錄下來,供參考。

1,首先根據需求和esp8266的spi說明文檔參見esp8266-technical_reference_cn.pdf,MCU與8266 需要雙向資料互動,且為了程式設計友善,通訊資料采用定長,最後決定采用雙線透傳協定通訊(有現成的例程也是重要原因,能少走彎路)

  1. spi 雙線透傳的例程在NONOS SDK 下,先把它的驅動檔案 spi.c 搬到我的應用裡來,我用的是RTOS SDK, 需要移植。

寫了簡單的測試程式。先初始化,并在接收中斷裡發送消息給任務。

spi_slave_init( SpiNum_HSPI, 32); 32 是資料段長度,也就是一次需要發送34 個位元組才會觸發接收中斷。
           
  1. (不要在中斷處理裡面)加上調試資訊,先确定通訊正常,由于MCU那邊還沒有開發,隻有自己先想辦法自測試了,直接搞了USB轉SPI的調試闆來測,先用邏輯分析儀來驗證調試工具的信号是否滿足條件。如圖1,一共34個位元組,cmd(1)+addr(1)+data(32)
    esp8266 spi slave 驅動調試
    cmd為2 ,表示主機發送,addr 必須為0 ,後面資料依次1-32。 和預期一緻。
    esp8266 spi slave 驅動調試

然後将調試闆和esp8266硬體連接配接,測試列印接受資料發現資料混亂,接收中斷和發送中斷都進去了,檢查代碼,看的眼花,還是先看硬體吧,一看四條線都接了,就是地線沒接,不過看ESP8266 spitest 接線圖也沒寫,加上地線以後,資料就OK了

esp8266 spi slave 驅動調試

4.繼續spi從機發送調試,測試信号發現資料出錯,測試發現還有點 規律-前面幾個是正常的,後面就開始亂了,懷疑是時序問題,spi_slave_init ,增加MISO延時, 資料正常。如下 :

SET_PERI_REG_MASK(SPI_CTRL2(spi_no),(x7&SPI_MISO_DELAY_NUM)<<SPI_MISO_DELA_NUM_S) ;
           
esp8266 spi slave 驅動調試

注意,主機接收時,cmd 為3,ADDR 為0,後面的DATA 任意,隻要長度滿足就可以了。

繼續閱讀