ESP8266 跟時間賽跑 SPI 篇
本文將出自於最重要的兩篇官方的參考文件,
esp8266 non os sdk api reference,
esp8266 technical reference,
因為參考資料在 SPI 的章節下寫得有點亂,所以作個整理。
依筆者當前的判斷,應是初期官方意欲使用 GPIO 12/13/14/15 來當 ext flash 的傳輸通道,加上 non os sdk 初期及後來在 spi 的部份有再改版過/由不同人重寫重定義。從而對界定晶片本身支援的幾種 SPI 並不那麼明確,例如 SPI 與 HSPI 名稱的混用或又有 overlap 這個詞來攪局。
也因如此(亂)筆者不敢保證所整理出來的內容是正確的。
說穿了,“可能”能夠跑 80MHz 的 SPI,當然“要能夠上場”來跟時間賽跑。
最重要的,也因如此,筆者不敢保證能夠整理出什麼有用的東西出來。或,就目前看到的文章就是這麼有頭無尾。
- 與其照官方所說 esp8266 所支援 spi 的種類,不如我們按照 multi-function gpios 中的劃分來針對 spi 分類。
- 我們針對 group A,gpios 6/7/8/9/10/11 為一類,group B,gpios 12/13/14/15 為另一類。
- 其中,group B 就稱為 HSPI。
- group A 就稱為 SPI。
- 而 group A,又有另一 function 為 SDIO 模式,故我們便說,group A,支援 SDIO spi 相容模式,及通用 SPI 模式兩種。
- 同時,group A 又支援 overlap 模式,即一個 master 可接數個 slaves,於此處的 overlap 支援接三個;而通常而言,SPI 的定義下本就支援這裏所謂的 overlap,故此可說就是以硬體支援這樣的 overlap,即片選腳位 CS,是固定指定的且運作上由硬體直接做掉;換言之,本就可,若接四個 slave,我們那第四個 cs 由軟體控制自選定的 gpio 即可。
- 而 SDIO 模式,專用於,boot up 時,由 bootstrap pins 引導進入 SDIO 模式,此時 esp8266 為 slave,由 master/其他 MCU,將程式線上下載至 esp8266 的 ram 內又或寫入 flash 以備後續。而只有此模式可使用 DMA/linked-list DMA。
- 此外,市面上的 esp8266 模組,應全都是以 gpio 6/7/8/9/10/11 接到 ext flash;而 esp8285 雖是內嵌 flash,但應也是如前的狀態。當然這些腳位也都能夠復用或共用/接多個 spi devices。
- 其中,master 模式支援最高 80MHz,slave 支援最高 20MHz,而這也是筆者最感興趣的部份。當然實際不可能跑這麼快因程式執行本身所受限住。而硬體也有提供(in sram, fixed address) 64 bytes/16 words/word-alignment buffer。
並支援可規劃的 polarity/high-low edge access/MSB-LSB/high-byte or low-byte buffer transfer/selected multi-interrupt in a transfer。 - 格式:
- master:
command(must),1 to 16 bits
address(optional),0 to 32 bits
data(optional),0 to 16 words - slave:
command(must),3 to 16 bits。010(receive),011(transmit),110(bi-dir)。
address(must),1 to 32 bits
data(optional),0 to 16 words
目前 non os sdk 支援/規定出 command 7 bits,address 1 bit,data 8 bit 合 16 bits。 - 以上,應該就是分清楚了。