Edited at

メモ:ESP32のSPIについて混乱していることの整理

More than 1 year has passed since last update.


SPIでググるといろんなものがでてくる

SPIでもSPI、VSPI、HSPIの表記があってどれがどれかわからない。

Switch Scienceさんの https://trac.switch-science.com/wiki/esp32_tips#SPI%E9%80%9A%E4%BF%A1 がわかりやすかった。SPI、VSPI、HSPIの3つのモジュールがそれぞれ実装されているとのこと。特に何もしなければVSPIのモジュールが使われるとのこと。


  • SPIは内蔵FLASHとの接続に使われている

  • HSPI - SCK,MISO,MOSI,SS = 14,12,13,15

  • VSPI - SCK,MISO,MOSI,SS = 18,19,23,5

ググると出てくるスケッチや配線図が尽く異なるピンを使ってるのはGPIOマトリックス機能で入れ替えたり、そのスケッチがドサクサに紛れてソフトウェアでSPI通信しているものが混在しているのが混乱の元になっていた。


VSPIとHSPIとはなんなのか?

Googleでいろんなワードで検索したけどズバリ説明しているドキュメントは見つけられなかった。ググって参考になった記事は少しだけあった。


SPIでTFT液晶を動かすことについて

ググって出て来た記事はこの辺り。

Demos for ILI9341-based TFT displays using the Espressif ESP32 が一番参考になった。graphicstest_mod.inoの部分でピンアサインが指定されている。

#define TFT_CS   22  // SS(Slave Select)と表記されたり、CS(Chip Select)と表記されたりするやつ

#define TFT_DC 21 // ググラビリティが悪くて何者か調べてもわからなかったやつ
#define TFT_MOSI 23 // SPIのMOSI(Master Out Slave In)
#define TFT_CLK 19 // SPIのSCLKと表記されたり、CLKを表記されるやつ
#define TFT_RST 18 // LCDのリセット用(SPI関係ない)
#define TFT_MISO 25 // SPIのMISO(Master In Slave Out)
#define TFT_LED 5 // バックライトのON/OFF(SPI関係ない)

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

これはデフォルトの↓のピン配置から変更されているが、繋ぎ変えてあげることはできる。

- HSPI - SCK,MISO,MOSI,SS = 14,12,13,15

- VSPI - SCK,MISO,MOSI,SS = 18,19,23,5

Adafruit_ILI9341のコンストラクタでTFT_MOSI, TFT_CLK, TFT_MISO3つを受け取らないものがあり、そちらに書き換えた場合はVSPIのものに繋ぎ変えてあげると動いた。


疲れたこと

VSPIやHSPIの一次情報にたどり着けず、SPIのDCが何の略で何者なのかが結局わからなかった。