Skip to content

Commit 7126f9f

Browse files
Fix SD card not working issue with TFT_eSPI.
1 parent 1f32802 commit 7126f9f

File tree

5 files changed

+19
-12
lines changed

5 files changed

+19
-12
lines changed

MLX90640.ino

+4-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@
4141
#define USE_TFT_ESPI
4242
/*--------------------------------------------------------------------------------
4343
* TFT_eSPI
44-
* CYD requires a different XPT2046 library and does not work with SD card.
44+
* CYD requires XPT2046 touch screen library.
45+
* See SPI bus assignment in 'boards/Setup_CYD_2432S028R.h' and 'pin_assign.h'.
4546
* https://github.com/Bodmer/TFT_eSPI/discussions/3123
46-
* https://github.com/TheNitek/XPT2046_Bitbang_Arduino_Library
4747
* https://forum.arduino.cc/t/cyd-sd-issues-probably-due-to-touch-pins/1280758/3
48+
* https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/discussions/88
49+
* https://github.com/TheNitek/XPT2046_Bitbang_Arduino_Library
4850
*--------------------------------------------------------------------------------*/
4951
#ifdef ARDUINO_ESP32_2432S028R
5052
#include <XPT2046_Touchscreen.h>

interpolation.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,6 @@ void interpolate_image(float *src, const int src_rows, const int src_cols, const
9191
}
9292
}
9393
}
94+
yield(); // Prevent the watchdog from firing
9495
}
9596
}

pin_assign.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@
4444
#define TOUCH_MISO CYD_TP_MISO // 39
4545
#define TOUCH_CLK CYD_TP_CLK // 25
4646
#define TOUCH_CS CYD_TP_CS // 33
47-
#define TOUCH_SPI_BUS CYD_TP_SPI_BUS // VSPI
47+
#define TOUCH_SPI_BUS HSPI // CYD_TP_SPI_BUS (VSPI) --> HSPI
4848

4949
#define SD_CS CYD_SD_SS // 5
5050
#define SD_MOSI CYD_SD_MOSI // 23
5151
#define SD_MISO CYD_SD_MISO // 19
5252
#define SD_SCK CYD_SD_SCK // 18
53-
#define SD_SPI_BUS CYD_SD_SPI_BUS // VSPI
53+
#define SD_SPI_BUS VSPI // CYD_SD_SPI_BUS (VSPI)
5454
#define SPI_MODE SPI_MODE0 // SPI_MODE0, SPI_MODE2 or SPI_MODE3
5555

5656
// false: Panel driver: ILI9341 (micro-USB x 1 type)

sdcard.hpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
#include "SPI.h"
77

88
/*--------------------------------------------------------------------------------
9-
* SPI bus and Graphics library
9+
* SPI bus assignment for SD
1010
*--------------------------------------------------------------------------------*/
11-
#if defined (_TFT_eSPIH_)
12-
#define SD_CONFIG SD_CS, GFX_EXEC(getSPIinstance()), SPI_SD_FREQUENCY
11+
#if defined (ARDUINO_ESP32_2432S028R)
12+
static SPIClass sd_spi = SPIClass(SD_SPI_BUS);
13+
#define SD_CONFIG SD_CS, sd_spi, SPI_SD_FREQUENCY
1314
#else
14-
#define SD_CONFIG SD_CS, SPI, SPI_SD_FREQUENCY
15+
#if defined (_TFT_eSPIH_)
16+
#define SD_CONFIG SD_CS, GFX_EXEC(getSPIinstance()), SPI_SD_FREQUENCY
17+
#else
18+
#define SD_CONFIG SD_CS, SPI, SPI_SD_FREQUENCY
19+
#endif
1520
#endif
1621

1722
// Temporary buffer size for string manipulation
@@ -312,8 +317,7 @@ bool sdcard_setup(void) {
312317
}
313318

314319
#if defined (ARDUINO_ESP32_2432S028R)
315-
// It works with LovyanGFX but not with TFT_eSPI.
316-
SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
320+
sd_spi.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
317321
#endif
318322

319323
if (SD.begin(SD_CONFIG)) {

touch.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ extern uint16_t lcd_width;
9999
extern uint16_t lcd_height;
100100

101101
/*--------------------------------------------------------------------------------
102-
* Touch panel instance for XPT2046_Touchscreen library
103-
* Assign the CYD touch panel on a different SPI bus from that of the display.
102+
* Instance of XPT2046_Touchscreen library
104103
*--------------------------------------------------------------------------------*/
105104
#if defined (_XPT2046_Touchscreen_h_)
106105
#include "boards/XPT2046_ScreenPoint.h"
@@ -112,6 +111,7 @@ static XPT2046_ScreenPoint sp(TOUCH_CS, TOUCH_IRQ);
112111
* Setup touch manager
113112
*--------------------------------------------------------------------------------*/
114113
bool touch_setup(void) {
114+
115115
#if defined (_XPT2046_Touchscreen_h_)
116116
sp_spi.begin(TOUCH_CLK, TOUCH_MISO, TOUCH_MOSI, TOUCH_CS);
117117
sp.begin(sp_spi, lcd_width, lcd_height, SCREEN_ROTATION);

0 commit comments

Comments
 (0)