summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-09-11 09:15:32 +0800
committerGitHub <[email protected]>2020-09-11 09:15:32 +0800
commit8ea34bf936afafb2f9ed6955c53064f9e8081680 (patch)
tree29cf67e9e678d397bfe4928260b5b80ddfbd5649 /components
parent6ebab25768ef777d3f0f9f28f4ba5a3e406daa54 (diff)
parent4a654414e3fb346f67a66f829db94a72b9aa27a9 (diff)
Merge pull request #3850 from SimpleInit/master
修复"response+1"导致STM32 HAL库SPI内存非对齐访问的hard fault
Diffstat (limited to 'components')
-rw-r--r--components/drivers/spi/spi_msd.c27
1 files changed, 27 insertions, 0 deletions
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
{