ESP32-WROOM-32 で ILI9341 に SDから読みだした PNG画像を連続描画【遅い】

回路

f:id:bamch0h:20210107223349j:plain

ソース

#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_RST 16
#define TFT_DC 17
#define TFT_CS 5

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

static uint8_t data1[120 * 320];
static uint8_t data2[120 * 320];

void testOriginalData() {
  byte c;
  uint16_t g;

  tft.startWrite();
  tft.setAddrWindow(0, 0, 320, 240);
  for(int y = 0;y < 120; y++) {
    for(int x = 0;x < 320; x++) {
      c = data1[y * 320 + x];
      g = (c>>3)<<11 | (c>>2)<<5 | c>>3;
      tft.SPI_WRITE16(g);
    }
  }
  for(int y = 0;y < 120; y++) {
    for(int x = 0;x < 320; x++) {
      c = data2[y * 320 + x];
      g = (c>>3)<<11 | (c>>2)<<5 | c>>3;
      tft.SPI_WRITE16(g);
    }
  }
  tft.endWrite();  
}

bool readFile(fs::FS &fs, const char * path){
    File file = fs.open(path);
    if(!file){
        Serial.println("Failed to open file for reading");
        return false;
    }

    file.read(data1, 120 * 320);
    file.read(data2, 120 * 320);
    file.close();
    return true;
}

SPIClass SPI2(HSPI);
#define HSPI_SCK  14
#define HSPI_MISO 35
#define HSPI_MOSI 13
#define HSPI_SS   15

void setup() {
  tft.begin();
  tft.setRotation(1);
  
  SPI2.begin(HSPI_SCK, HSPI_MISO, HSPI_MOSI, HSPI_SS);

  Serial.begin(115200);
  delay(100);

  if(!SD.begin(HSPI_SS, SPI2, 12000000L)){
      Serial.println("Card Mount Failed");
      return;
  }
}

void loop() {
  tft.fillScreen(ILI9341_BLACK);
  char buf[255];
  unsigned long old_time;
  for(int i = 1; i <= 100; i++) {
    sprintf(buf, "/output/%04d.dat", i);
    old_time = millis();
    Serial.println(buf);
    if(readFile(SD, buf)) {
      // put your main code here, to run repeatedly:
      testOriginalData();
    }
    Serial.print((float)1/(millis()-old_time)*1000);
    Serial.println(" fps");
  }
}

課題

4.5 fps しか出てないのでどうにかしたい。