From 891479e62a8db32d5a6351e9e3eb9e5dd570ba9c Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 25 Aug 2016 10:42:33 +0200 Subject: [PATCH] esp8266/hspi: Enable duplex operation of hardware SPI Without this, spi.read(1, 0xff) would use 16 clock cycles, first to send 0xff and then to receive one byte, as visible with a logic analyzer. --- esp8266/hspi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esp8266/hspi.c b/esp8266/hspi.c index 7315dc8a12..436fb4f6f4 100644 --- a/esp8266/hspi.c +++ b/esp8266/hspi.c @@ -199,7 +199,11 @@ uint32_t spi_transaction(uint8_t spi_no, uint8_t cmd_bits, uint16_t cmd_data, // This is rather inefficient but allows for a very generic function. // CMD ADDR and MOSI are set below to save on an extra if statement. if (din_bits) { - SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_MISO); + if (dout_bits) { + SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_DOUTDIN); + } else { + SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_MISO); + } } if (dummy_bits) { SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_DUMMY);