diff options
| author | SimpleInit <[email protected]> | 2020-08-26 21:00:23 +0800 |
|---|---|---|
| committer | SimpleInit <[email protected]> | 2020-08-26 21:03:15 +0800 |
| commit | 4a654414e3fb346f67a66f829db94a72b9aa27a9 (patch) | |
| tree | b110f39771c2e4f0cd8f353987823e9232bde456 /components | |
| parent | 5b3ec9490c72eda3fa6b70e3070b635bc78b0150 (diff) | |
修复"response+1"导致STM32 HAL库SPI内存非对齐访问的hard fault
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/spi/spi_msd.c | 27 |
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 { |
