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でいろんなワードで検索したけどズバリ説明しているドキュメントは見つけられなかった。ググって参考になった記事は少しだけあった。
- Need more details about HSPI and VSPI
- ESP32 の SPI_MODE が修正。HSPI , VSPI , 複数SPIデバイス制御 , SPI高速化などについて - 2 の「VSPI や HSPI とは」の項
SPIでTFT液晶を動かすことについて
ググって出て来た記事はこの辺り。
- TFT LCD(ILI9341)+アナログセンサ
- ESP32, TFT ILI9341 DISPLAY テスト編
- ESP32(ESP-WROOM-32)でLチカ (WindowsでArduino IDE使用)
- Demos for ILI9341-based TFT displays using the Espressif ESP32
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が何の略で何者なのかが結局わからなかった。