/// Clock out 80 cycles (10 bytes) before GO_IDLE command\r
static void go_idle_clockout(int slot)\r
{\r
- uint8_t data[10];\r
+ //actually we need 10, declare 12 to meet requirement of RXDMA\r
+ uint8_t data[12];\r
memset(data, 0xff, sizeof(data));\r
spi_transaction_t t = {\r
- .length = sizeof(data) * 8,\r
+ .length = 10*8,\r
.tx_buffer = data,\r
.rx_buffer = data,\r
};\r
static esp_err_t poll_busy(int slot, spi_transaction_t* t)\r
{\r
uint8_t t_rx;\r
- uint8_t rd_data;\r
*t = (spi_transaction_t) {\r
.tx_buffer = &t_rx,\r
- .rx_buffer = &rd_data,\r
+ .flags = SPI_TRANS_USE_RXDATA, //data stored in rx_data\r
.length = 8,\r
};\r
esp_err_t ret;\r
\r
for (int i = 0; i < SDSPI_RETRY_COUNT; i++) {\r
t_rx = SDSPI_MOSI_IDLE_VAL;\r
- rd_data = 0;\r
+ t->rx_data[0] = 0;\r
ret = spi_device_transmit(spi_handle(slot), t);\r
if (ret != ESP_OK) {\r
return ret;\r
}\r
- if (rd_data != 0) {\r
+ if (t->rx_data[0] != 0) {\r
if (i < SDSPI_RETRY_COUNT - 2) {\r
i = SDSPI_RETRY_COUNT - 2;\r
}\r
static esp_err_t poll_response_token(int slot, spi_transaction_t* t)\r
{\r
uint8_t t_rx;\r
- uint8_t rd_data;\r
*t = (spi_transaction_t) {\r
.tx_buffer = &t_rx,\r
- .rx_buffer = &rd_data,\r
+ .flags = SPI_TRANS_USE_RXDATA,\r
.length = 8,\r
};\r
esp_err_t ret;\r
\r
for (int retry = 0; retry < SDSPI_RETRY_COUNT; retry++) {\r
t_rx = SDSPI_MOSI_IDLE_VAL;\r
- rd_data = 0;\r
+ t->rx_data[0] = 0;\r
ret = spi_device_transmit(spi_handle(slot), t);\r
if (ret != ESP_OK) {\r
return ret;\r
}\r
- if ((rd_data & TOKEN_RSP_MASK) == TOKEN_RSP_OK) {\r
+ if ((t->rx_data[0] & TOKEN_RSP_MASK) == TOKEN_RSP_OK) {\r
break;\r
}\r
- if ((rd_data & TOKEN_RSP_MASK) == TOKEN_RSP_CRC_ERR) {\r
+ if ((t->rx_data[0] & TOKEN_RSP_MASK) == TOKEN_RSP_CRC_ERR) {\r
return ESP_ERR_INVALID_CRC;\r
}\r
- if ((rd_data & TOKEN_RSP_MASK) == TOKEN_RSP_WRITE_ERR) {\r
+ if ((t->rx_data[0] & TOKEN_RSP_MASK) == TOKEN_RSP_WRITE_ERR) {\r
return ESP_ERR_INVALID_RESPONSE;\r
}\r
if (retry == SDSPI_RETRY_COUNT - 1) {\r