mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 10:47:19 +02:00
spi_flash: fix cs line setup to make the flash driver more stable
This commit is contained in:
@ -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->user.usr_dummy = dummy_n ? 1 : 0;
|
||||||
dev->user1.usr_dummy_cyclelen = dummy_n - 1;
|
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;
|
||||||
|
}
|
||||||
|
@ -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;
|
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;
|
||||||
|
}
|
||||||
|
@ -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_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_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_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
|
#else
|
||||||
#define spi_flash_ll_reset(dev) spimem_flash_ll_reset((spi_mem_dev_t*)dev)
|
#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)
|
#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_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_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_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
|
#endif
|
||||||
|
@ -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->user.usr_dummy = dummy_n ? 1 : 0;
|
||||||
dev->user1.usr_dummy_cyclelen = dummy_n - 1;
|
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;
|
||||||
|
}
|
||||||
|
@ -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_reset(dev);
|
||||||
spi_flash_ll_set_cs_pin(dev, drv_data->cs_num);
|
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_clock(dev, &drv_data->clock_conf);
|
||||||
|
spi_flash_ll_set_cs_setup(dev, 1);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user