Skip to content

Commit fd4215a

Browse files
committed
CS is now software controlled. Otherwise ESP has problems with receiving data over SPI
1 parent 4626a9d commit fd4215a

File tree

4 files changed

+17
-14
lines changed

4 files changed

+17
-14
lines changed

Diff for: libraries/SPI/HSPI.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ void HSPI::begin()
1111
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_HSPIQ_MISO); // gpio12
1212
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_HSPID_MOSI); // gpio13
1313
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_HSPI_CLK); // gpio14
14-
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_HSPI_CS0); // gpio15
15-
16-
uint32_t regvalue = SPI_FLASH_DOUT;
17-
regvalue |= SPI_DOUTDIN | SPI_CK_I_EDGE;
18-
regvalue &= ~(BIT2 | SPI_FLASH_USR_ADDR | SPI_FLASH_USR_DUMMY | SPI_FLASH_USR_DIN | SPI_USR_COMMAND);
19-
20-
SET_PERI_REG_MASK(SPI_FLASH_USER(hspi_port), regvalue);
2114

2215
// SPI clock=CPU clock/8
2316
WRITE_PERI_REG(SPI_FLASH_CLOCK(hspi_port),
@@ -26,6 +19,12 @@ void HSPI::begin()
2619
((1&SPI_CLKCNT_H)<<SPI_CLKCNT_H_S)|
2720
((3&SPI_CLKCNT_L)<<SPI_CLKCNT_L_S)); //clear bit 31,set SPI clock div
2821

22+
uint32_t regvalue = SPI_FLASH_DOUT;
23+
regvalue |= SPI_DOUTDIN | SPI_CK_I_EDGE;
24+
regvalue &= ~(BIT2 | SPI_FLASH_USR_ADDR | SPI_FLASH_USR_DUMMY | SPI_FLASH_USR_DIN | SPI_USR_COMMAND);
25+
26+
WRITE_PERI_REG(SPI_FLASH_USER(hspi_port), regvalue);
27+
WRITE_PERI_REG(SPI_FLASH_CTRL1(hspi_port), 0);
2928
}
3029

3130
void HSPI::end()

Diff for: libraries/SPI/include/HSPI.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class HSPI : public SPIImpl
2727
uint32_t _clkDiv;
2828
uint32_t *spi_fifo;
2929
const uint32_t hspi_port = 1;
30-
const uint32_t hspi_fifo_size = 32;
30+
const uint32_t hspi_fifo_size = 16;
3131

3232
private:
3333
inline void hspi_wait_ready(void){while (READ_PERI_REG(SPI_FLASH_CMD(hspi_port))&SPI_FLASH_USR);}

Diff for: libraries/TFT_Touch_Shield_V2/TFTv2.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626

2727
void TFT::TFTinit (void)
2828
{
29+
pinMode(2, OUTPUT);
30+
pinMode(4, OUTPUT);
31+
pinMode(15, OUTPUT);
2932
SPI.begin();
33+
SPI.setClockDivider(2);
3034

3135
TFT_CS_HIGH;
3236
TFT_DC_HIGH;

Diff for: libraries/TFT_Touch_Shield_V2/TFTv2.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ Modified by Sermus for ESP8266
8181
#define XP 21 // can be a digital pin, this is A3
8282

8383
#else
84-
#define TFT_CS_LOW //ESP8266 hspi has hardware controlled CS
85-
#define TFT_CS_HIGH
86-
#define TFT_DC_LOW pinMode(2, 0);
87-
#define TFT_DC_HIGH pinMode(2, 1);
88-
#define TFT_BL_OFF pinMode(0, 0);
89-
#define TFT_BL_ON pinMode(0, 1);
84+
#define TFT_CS_LOW digitalWrite(15, 0);
85+
#define TFT_CS_HIGH digitalWrite(15, 1);
86+
#define TFT_DC_LOW digitalWrite(2, 0);
87+
#define TFT_DC_HIGH digitalWrite(2, 1);
88+
#define TFT_BL_OFF digitalWrite(4, 0);
89+
#define TFT_BL_ON digitalWrite(4, 1);
9090

9191
#define YP A2 // must be an analog pin, use "An" notation!
9292
#define XM A1 // must be an analog pin, use "An" notation!

0 commit comments

Comments
 (0)