diff --git a/components/drivers/spi/spi_msd.c b/components/drivers/spi/spi_msd.c index a109fd9488..272c21c179 100644 --- a/components/drivers/spi/spi_msd.c +++ b/components/drivers/spi/spi_msd.c @@ -233,6 +233,17 @@ static rt_err_t _send_cmd( } else if (type == response_r2) { + #if defined(__CORTEX_M) && __CORTEX_M == 0 + /* initial message */ + message.send_buf = RT_NULL; + message.recv_buf = recv_buffer; + message.length = 1; + message.cs_take = message.cs_release = 0; + + /* transfer message */ + device->bus->ops->xfer(device, &message); + response[1] = recv_buffer[0]; + #else /* initial message */ message.send_buf = RT_NULL; message.recv_buf = response + 1; @@ -241,9 +252,24 @@ static rt_err_t _send_cmd( /* transfer message */ device->bus->ops->xfer(device, &message); + #endif } else if ((type == response_r3) || (type == response_r7)) { + #if defined(__CORTEX_M) && __CORTEX_M == 0 + /* initial message */ + message.send_buf = RT_NULL; + message.recv_buf = recv_buffer; + message.length = 4; + message.cs_take = message.cs_release = 0; + + /* transfer message */ + device->bus->ops->xfer(device, &message); + response[1] = recv_buffer[0]; + response[2] = recv_buffer[1]; + response[3] = recv_buffer[2]; + response[4] = recv_buffer[3]; + #else /* initial message */ message.send_buf = RT_NULL; message.recv_buf = response + 1; @@ -252,6 +278,7 @@ static rt_err_t _send_cmd( /* transfer message */ device->bus->ops->xfer(device, &message); + #endif } else {