Skip to content

Commit 13589b1

Browse files
JiriBilekdevyte
authored andcommitted
Fix spi slave timing (library SPISlave) (#6022)
* Fix timing of MISO signal * Fix comment
1 parent feb3988 commit 13589b1

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

libraries/SPISlave/src/hspi_slave.c

+9-5
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,18 @@ void hspi_slave_begin(uint8_t status_len, void * arg)
8585
pinMode(MISO, SPECIAL);
8686
pinMode(MOSI, SPECIAL);
8787

88-
SPI1S = SPISE | SPISBE | 0x3E0;
89-
SPI1U = SPIUMISOH | SPIUCOMMAND | SPIUSSE;
88+
SPI1S = SPISE | SPISBE | 0x3E0; // SPI_SLAVE_REG
89+
SPI1U = SPIUMISOH | SPIUCOMMAND | SPIUSSE; // SPI_USER_REG
9090
SPI1CLK = 0;
91-
SPI1U2 = (7 << SPILCOMMAND);
92-
SPI1S1 = (((status_len * 8) - 1) << SPIS1LSTA) | (0xff << SPIS1LBUF) | (7 << SPIS1LWBA) | (7 << SPIS1LRBA) | SPIS1RSTA;
91+
SPI1U2 = (7 << SPILCOMMAND); // SPI_USER2_REG
92+
SPI1S1 = (((status_len * 8) - 1) << SPIS1LSTA) | (0xff << SPIS1LBUF) | (7 << SPIS1LWBA) | (7 << SPIS1LRBA) | SPIS1RSTA; // SPI_SLAVE1_REG
9393
SPI1P = (1 << 19);
9494
SPI1CMD = SPIBUSY;
9595

96+
// Setting SPIC2MISODM_S makes slave to change MISO value on falling edge on CLK signal as is required for SPIMode 1
97+
// Setting SPIC2MOSIDN_S is probably not critical, all tests run fine with this setting
98+
SPI1C2 = (0x2 << SPIC2MOSIDN_S) | (0x1 << SPIC2MISODM_S);
99+
96100
ETS_SPI_INTR_ATTACH(_hspi_slave_isr_handler,arg);
97101
ETS_SPI_INTR_ENABLE();
98102
}
@@ -114,7 +118,7 @@ void hspi_slave_end()
114118
SPI1P = B110;
115119
}
116120

117-
void hspi_slave_setStatus(uint32_t status)
121+
void ICACHE_RAM_ATTR hspi_slave_setStatus(uint32_t status)
118122
{
119123
SPI1WS = status;
120124
}

0 commit comments

Comments
 (0)