1
0
Эх сурвалжийг харах

修复"response+1"导致STM32 HAL库SPI内存非对齐访问的hard fault

SimpleInit 4 жил өмнө
parent
commit
4a654414e3

+ 27 - 0
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
     {