ソースを参照

[spi]修复spi总线挂载多设备通信可能失败问题

yangpeng 1 年間 前
コミット
1919ad0748
2 ファイル変更18 行追加9 行削除
  1. 9 0
      components/drivers/spi/qspi_core.c
  2. 9 9
      components/drivers/spi/spi_core.c

+ 9 - 0
components/drivers/spi/qspi_core.c

@@ -15,6 +15,15 @@ rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configu
     RT_ASSERT(device != RT_NULL);
     RT_ASSERT(cfg != RT_NULL);
 
+    /* reset the CS pin */
+    if (device->parent.cs_pin != PIN_NONE)
+    {
+        if (cfg->parent.mode & RT_SPI_CS_HIGH)
+            rt_pin_write(device->parent.cs_pin, PIN_LOW);
+        else
+            rt_pin_write(device->parent.cs_pin, PIN_HIGH);
+    }
+
     /* If the configurations are the same, we don't need to set again. */
     if (device->config.medium_size       == cfg->medium_size &&
         device->config.ddr_mode          == cfg->ddr_mode &&

+ 9 - 9
components/drivers/spi/spi_core.c

@@ -91,15 +91,6 @@ rt_err_t rt_spi_bus_configure(struct rt_spi_device *device)
 {
     rt_err_t result = -RT_ERROR;
 
-    /* reset the CS pin */
-    if (device->cs_pin != PIN_NONE)
-    {
-        if (device->config.mode & RT_SPI_CS_HIGH)
-            rt_pin_write(device->cs_pin, PIN_LOW);
-        else
-            rt_pin_write(device->cs_pin, PIN_HIGH);
-    }
-
     if (device->bus != RT_NULL)
     {
         result = rt_mutex_take(&(device->bus->lock), RT_WAITING_FOREVER);
@@ -134,6 +125,15 @@ rt_err_t rt_spi_configure(struct rt_spi_device        *device,
     RT_ASSERT(device != RT_NULL);
     RT_ASSERT(cfg != RT_NULL);
 
+    /* reset the CS pin */
+    if (device->cs_pin != PIN_NONE)
+    {
+        if (cfg->mode & RT_SPI_CS_HIGH)
+            rt_pin_write(device->cs_pin, PIN_LOW);
+        else
+            rt_pin_write(device->cs_pin, PIN_HIGH);
+    }
+
     /* If the configurations are the same, we don't need to set again. */
     if (device->config.data_width == cfg->data_width &&
         device->config.mode       == (cfg->mode & RT_SPI_MODE_MASK) &&