Просмотр исходного кода

Merge branch 'bugfix/spi_flash_cs_setup_v4.1' into 'release/v4.1'

spi_flash: fix cs line setup to make the flash driver more stable(backport v4.1)

See merge request espressif/esp-idf!13964
Michael (XIAO Xufeng) 4 лет назад
Родитель
Сommit
fd1a67dd61

+ 6 - 0
components/soc/esp32/include/hal/spi_flash_ll.h

@@ -359,3 +359,9 @@ static inline void spi_flash_ll_set_dummy(spi_dev_t *dev, uint32_t dummy_n)
     dev->user.usr_dummy = dummy_n ? 1 : 0;
     dev->user1.usr_dummy_cyclelen = dummy_n - 1;
 }
+
+static inline void spi_flash_ll_set_cs_setup(spi_dev_t *dev, uint32_t cs_setup_time)
+{
+    dev->user.cs_setup = (cs_setup_time > 0 ? 1 : 0);
+    dev->ctrl2.setup_time = cs_setup_time - 1;
+}

+ 5 - 0
components/soc/esp32s2beta/include/hal/gpspi_flash_ll.h

@@ -321,3 +321,8 @@ static inline void gpspi_flash_ll_set_dummy(spi_dev_t *dev, uint32_t dummy_n)
     dev->user1.usr_dummy_cyclelen = dummy_n - 1;
 }
 
+static inline void gpspi_flash_ll_set_cs_setup(spi_dev_t *dev, uint32_t cs_setup_time)
+{
+    dev->user.cs_setup = (cs_setup_time > 0 ? 1 : 0);
+    dev->ctrl2.cs_setup_time = cs_setup_time - 1;
+}

+ 2 - 0
components/soc/esp32s2beta/include/hal/spi_flash_ll.h

@@ -66,6 +66,7 @@ typedef union  {
 #define spi_flash_ll_set_addr_bitlen(dev, bitlen)            gpspi_flash_ll_set_addr_bitlen((spi_dev_t*)dev, bitlen)
 #define spi_flash_ll_set_address(dev, addr)                  gpspi_flash_ll_set_address((spi_dev_t*)dev, addr)
 #define spi_flash_ll_set_dummy(dev, dummy)                   gpspi_flash_ll_set_dummy((spi_dev_t*)dev, dummy)
+#define spi_flash_ll_set_cs_setup(dev, cs_setup_time)        gpspi_flash_ll_set_cs_setup((spi_dev_t*)dev, cs_setup_time)
 #else
 #define spi_flash_ll_reset(dev)                              spimem_flash_ll_reset((spi_mem_dev_t*)dev)
 #define spi_flash_ll_cmd_is_done(dev)                        spimem_flash_ll_cmd_is_done((spi_mem_dev_t*)dev)
@@ -88,4 +89,5 @@ typedef union  {
 #define spi_flash_ll_set_addr_bitlen(dev, bitlen)            spimem_flash_ll_set_addr_bitlen((spi_mem_dev_t*)dev, bitlen)
 #define spi_flash_ll_set_address(dev, addr)                  spimem_flash_ll_set_address((spi_mem_dev_t*)dev, addr)
 #define spi_flash_ll_set_dummy(dev, dummy)                   spimem_flash_ll_set_dummy((spi_mem_dev_t*)dev, dummy)
+#define spi_flash_ll_set_cs_setup(dev, cs_setup_time)        spimem_flash_ll_set_cs_setup((spi_mem_dev_t*)dev, cs_setup_time)
 #endif

+ 6 - 0
components/soc/esp32s2beta/include/hal/spimem_flash_ll.h

@@ -353,3 +353,9 @@ static inline void spimem_flash_ll_set_dummy(spi_mem_dev_t *dev, uint32_t dummy_
     dev->user.usr_dummy = dummy_n ? 1 : 0;
     dev->user1.usr_dummy_cyclelen = dummy_n - 1;
 }
+
+static inline void spimem_flash_ll_set_cs_setup(spi_mem_dev_t *dev, uint32_t cs_setup_time)
+{
+    dev->user.cs_setup = (cs_setup_time > 0 ? 1 : 0);
+    dev->ctrl2.cs_setup_time = cs_setup_time - 1;
+}

+ 1 - 0
components/soc/src/hal/spi_flash_hal_common.inc

@@ -40,6 +40,7 @@ esp_err_t spi_flash_hal_device_config(spi_flash_host_driver_t *host)
     spi_flash_ll_reset(dev);
     spi_flash_ll_set_cs_pin(dev, drv_data->cs_num);
     spi_flash_ll_set_clock(dev, &drv_data->clock_conf);
+    spi_flash_ll_set_cs_setup(dev, 1);
     return ESP_OK;
 }