Skip to content

Commit 82b3f54

Browse files
committed
feat(spi_flash): Add config for adding auto check status after suspend to improve performance
1 parent c4bb6a3 commit 82b3f54

File tree

15 files changed

+101
-95
lines changed

15 files changed

+101
-95
lines changed

components/hal/esp32c2/include/hal/spimem_flash_ll.h

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include <sys/param.h> // For MIN/MAX
1919
#include <stdbool.h>
2020
#include <string.h>
21-
21+
#include "hal/misc.h"
2222
#include "soc/spi_periph.h"
2323
#include "hal/spi_types.h"
2424
#include "hal/spi_flash_types.h"
@@ -144,7 +144,7 @@ static inline void spimem_flash_ll_auto_resume_init(spi_mem_dev_t *dev, bool aut
144144
*/
145145
static inline void spimem_flash_ll_suspend_cmd_setup(spi_mem_dev_t *dev, uint32_t sus_cmd)
146146
{
147-
dev->flash_sus_cmd.flash_pes_command = sus_cmd;
147+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_sus_cmd, flash_pes_command, sus_cmd);
148148
}
149149

150150
/**
@@ -156,7 +156,7 @@ static inline void spimem_flash_ll_suspend_cmd_setup(spi_mem_dev_t *dev, uint32_
156156
*/
157157
static inline void spimem_flash_ll_resume_cmd_setup(spi_mem_dev_t *dev, uint32_t res_cmd)
158158
{
159-
dev->flash_sus_cmd.flash_per_command = res_cmd;
159+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_sus_cmd, flash_per_command, res_cmd);
160160
}
161161

162162
/**
@@ -168,7 +168,7 @@ static inline void spimem_flash_ll_resume_cmd_setup(spi_mem_dev_t *dev, uint32_t
168168
*/
169169
static inline void spimem_flash_ll_rd_sus_cmd_setup(spi_mem_dev_t *dev, uint32_t pesr_cmd)
170170
{
171-
dev->flash_sus_cmd.wait_pesr_command = pesr_cmd;
171+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_sus_cmd, wait_pesr_command, pesr_cmd);
172172
}
173173

174174
/**
@@ -205,7 +205,7 @@ static inline void spimem_flash_ll_res_check_sus_setup(spi_mem_dev_t *dev, bool
205205
static inline void spimem_flash_ll_set_read_sus_status(spi_mem_dev_t *dev, uint32_t sus_conf)
206206
{
207207
dev->flash_sus_ctrl.frd_sus_2b = 0;
208-
dev->flash_sus_ctrl.pesr_end_msk = sus_conf;
208+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_sus_ctrl, pesr_end_msk, sus_conf);
209209
}
210210

211211
/**
@@ -236,13 +236,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
236236
* Initialize auto wait idle mode
237237
*
238238
* @param dev Beginning address of the peripheral registers.
239-
* @param auto_waiti Enable/disable auto wait-idle function
239+
* @param per_waiti Enable wait-idle with time delay function after resume.
240+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
240241
*/
241-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
242+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
242243
{
243-
dev->flash_waiti_ctrl.waiti_cmd = 0x05;
244-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
245-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
244+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
245+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
246+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
246247
}
247248

248249
/**
@@ -518,11 +519,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
518519
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
519520
{
520521
dev->user.usr_command = 1;
521-
typeof(dev->user2) user2 = {
522-
.usr_command_value = command,
523-
.usr_command_bitlen = (bitlen - 1),
524-
};
525-
dev->user2.val = user2.val;
522+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
523+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
526524
}
527525

528526
/**

components/hal/esp32c3/include/hal/spimem_flash_ll.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
238238
* Initialize auto wait idle mode
239239
*
240240
* @param dev Beginning address of the peripheral registers.
241-
* @param auto_waiti Enable/disable auto wait-idle function
241+
* @param per_waiti Enable wait-idle with time delay function after resume.
242+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
242243
*/
243-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
244+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
244245
{
245246
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
246-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
247-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
247+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
248+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
248249
}
249250

250251
/**
@@ -520,11 +521,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
520521
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
521522
{
522523
dev->user.usr_command = 1;
523-
typeof(dev->user2) user2 = {
524-
.usr_command_value = command,
525-
.usr_command_bitlen = (bitlen - 1),
526-
};
527-
dev->user2.val = user2.val;
524+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
525+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
528526
}
529527

530528
/**

components/hal/esp32c5/include/hal/spimem_flash_ll.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
243243
* Initialize auto wait idle mode
244244
*
245245
* @param dev Beginning address of the peripheral registers.
246-
* @param auto_waiti Enable/disable auto wait-idle function
246+
* @param per_waiti Enable wait-idle with time delay function after resume.
247+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
247248
*/
248-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
249+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
249250
{
250251
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
251-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
252-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
252+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
253+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
253254
}
254255

255256
/**
@@ -530,11 +531,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
530531
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
531532
{
532533
dev->user.usr_command = 1;
533-
typeof(dev->user2) user2 = {
534-
.usr_command_value = command,
535-
.usr_command_bitlen = (bitlen - 1),
536-
};
537-
dev->user2.val = user2.val;
534+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
535+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
538536
}
539537

540538
/**

components/hal/esp32c6/include/hal/spimem_flash_ll.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
239239
* Initialize auto wait idle mode
240240
*
241241
* @param dev Beginning address of the peripheral registers.
242-
* @param auto_waiti Enable/disable auto wait-idle function
242+
* @param per_waiti Enable wait-idle with time delay function after resume.
243+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
243244
*/
244-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
245+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
245246
{
246247
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
247-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
248-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
248+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
249+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
249250
}
250251

251252
/**
@@ -521,11 +522,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
521522
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
522523
{
523524
dev->user.usr_command = 1;
524-
typeof(dev->user2) user2 = {
525-
.usr_command_value = command,
526-
.usr_command_bitlen = (bitlen - 1),
527-
};
528-
dev->user2.val = user2.val;
525+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
526+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
529527
}
530528

531529
/**
@@ -561,7 +559,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t
561559
static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_t extra_addr)
562560
{
563561
dev->cache_fctrl.usr_addr_4byte = 0;
564-
dev->rd_status.wb_mode = extra_addr;
562+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->rd_status, wb_mode, extra_addr);
565563
}
566564

567565
/**

components/hal/esp32c61/include/hal/spimem_flash_ll.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
242242
* Initialize auto wait idle mode
243243
*
244244
* @param dev Beginning address of the peripheral registers.
245-
* @param auto_waiti Enable/disable auto wait-idle function
245+
* @param per_waiti Enable wait-idle with time delay function after resume.
246+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
246247
*/
247-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
248+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
248249
{
249250
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
250-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
251-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
251+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
252+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
252253
}
253254

254255
/**
@@ -523,11 +524,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
523524
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
524525
{
525526
dev->user.usr_command = 1;
526-
typeof(dev->user2) user2 = {
527-
.usr_command_value = command,
528-
.usr_command_bitlen = (bitlen - 1),
529-
};
530-
dev->user2.val = user2.val;
527+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
528+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
531529
}
532530

533531
/**
@@ -563,7 +561,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t
563561
static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_t extra_addr)
564562
{
565563
dev->cache_fctrl.cache_usr_addr_4byte = 0;
566-
dev->rd_status.wb_mode = extra_addr;
564+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->rd_status, wb_mode, extra_addr);
567565
}
568566

569567
/**

components/hal/esp32h2/include/hal/spimem_flash_ll.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
240240
* Initialize auto wait idle mode
241241
*
242242
* @param dev Beginning address of the peripheral registers.
243-
* @param auto_waiti Enable/disable auto wait-idle function
243+
* @param per_waiti Enable wait-idle with time delay function after resume.
244+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
244245
*/
245-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
246+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
246247
{
247248
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
248-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
249-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
249+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
250+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
250251
}
251252

252253
/**
@@ -542,11 +543,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
542543
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
543544
{
544545
dev->user.usr_command = 1;
545-
typeof(dev->user2) user2 = {
546-
.usr_command_value = command,
547-
.usr_command_bitlen = (bitlen - 1),
548-
};
549-
dev->user2.val = user2.val;
546+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
547+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
550548
}
551549

552550
/**
@@ -582,7 +580,7 @@ static inline void spimem_flash_ll_set_addr_bitlen(spi_mem_dev_t *dev, uint32_t
582580
static inline void spimem_flash_ll_set_extra_address(spi_mem_dev_t *dev, uint32_t extra_addr)
583581
{
584582
dev->cache_fctrl.usr_addr_4byte = 0;
585-
dev->rd_status.wb_mode = extra_addr;
583+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->rd_status, wb_mode, extra_addr);
586584
}
587585

588586
/**

components/hal/esp32p4/include/hal/spimem_flash_ll.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,14 @@ static inline void spimem_flash_set_cs_hold_delay(spi_mem_dev_t *dev, uint32_t c
245245
* Initialize auto wait idle mode
246246
*
247247
* @param dev Beginning address of the peripheral registers.
248-
* @param auto_waiti Enable/disable auto wait-idle function
248+
* @param per_waiti Enable wait-idle with time delay function after resume.
249+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
249250
*/
250-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
251+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
251252
{
252253
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
253-
dev->flash_sus_ctrl.flash_per_wait_en = auto_waiti;
254-
dev->flash_sus_ctrl.flash_pes_wait_en = auto_waiti;
254+
dev->flash_sus_ctrl.flash_per_wait_en = per_waiti;
255+
dev->flash_sus_ctrl.flash_pes_wait_en = pes_waiti;
255256
}
256257

257258
/**
@@ -531,11 +532,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
531532
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
532533
{
533534
dev->user.usr_command = 1;
534-
typeof(dev->user2) user2 = {
535-
.usr_command_value = command,
536-
.usr_command_bitlen = (bitlen - 1),
537-
};
538-
dev->user2.val = user2.val;
535+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
536+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
539537
}
540538

541539
/**

components/hal/esp32s2/include/hal/spimem_flash_ll.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,13 @@ static inline void spimem_flash_ll_res_check_sus_setup(spi_mem_dev_t *dev, bool
209209
* Initialize auto wait idle mode
210210
*
211211
* @param dev Beginning address of the peripheral registers.
212-
* @param auto_waiti Enable/disable auto wait-idle function
212+
* @param per_waiti Enable wait-idle with time delay function after resume.
213+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
213214
*/
214-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
215+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
215216
{
216-
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05); // Set the command to send, to fetch flash status reg value.
217-
dev->flash_waiti_ctrl.waiti_en = auto_waiti; // enable auto wait-idle function.
217+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
218+
dev->flash_waiti_ctrl.waiti_en = (per_waiti | pes_waiti); // enable auto wait-idle function.
218219
}
219220

220221
/**
@@ -460,11 +461,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
460461
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
461462
{
462463
dev->user.usr_command = 1;
463-
typeof(dev->user2) user2 = {
464-
.usr_command_value = command,
465-
.usr_command_bitlen = (bitlen - 1),
466-
};
467-
dev->user2.val = user2.val;
464+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
465+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
468466
}
469467

470468
/**

components/hal/esp32s3/include/hal/spimem_flash_ll.h

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -264,14 +264,15 @@ static inline uint32_t spimem_flash_ll_get_tsus_unit_in_cycles(spi_mem_dev_t *de
264264
* Initialize auto wait idle mode
265265
*
266266
* @param dev Beginning address of the peripheral registers.
267-
* @param auto_waiti Enable/disable auto wait-idle function
267+
* @param per_waiti Enable wait-idle with time delay function after resume.
268+
* @param pes_waiti Enable wait-idle with time delay function after suspend.
268269
*/
269-
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool auto_waiti)
270+
static inline void spimem_flash_ll_auto_wait_idle_init(spi_mem_dev_t *dev, bool per_waiti, bool pes_waiti)
270271
{
271-
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05); // Set the command to send, to fetch flash status reg value.
272-
dev->flash_waiti_ctrl.waiti_en = auto_waiti; // enable auto wait-idle function.
273-
dev->flash_sus_cmd.flash_per_wait_en = 1;
274-
dev->flash_sus_cmd.flash_pes_wait_en = 1;
272+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->flash_waiti_ctrl, waiti_cmd, 0x05);
273+
dev->flash_waiti_ctrl.waiti_en = (per_waiti | pes_waiti); // enable auto wait-idle function.
274+
dev->flash_sus_cmd.flash_per_wait_en = per_waiti;
275+
dev->flash_sus_cmd.flash_pes_wait_en = pes_waiti;
275276
}
276277

277278
/**
@@ -538,11 +539,8 @@ static inline void spimem_flash_ll_set_mosi_bitlen(spi_mem_dev_t *dev, uint32_t
538539
static inline void spimem_flash_ll_set_command(spi_mem_dev_t *dev, uint32_t command, uint32_t bitlen)
539540
{
540541
dev->user.usr_command = 1;
541-
typeof(dev->user2) user2 = {
542-
.usr_command_value = command,
543-
.usr_command_bitlen = (bitlen - 1),
544-
};
545-
dev->user2.val = user2.val;
542+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_value, command);
543+
HAL_FORCE_MODIFY_U32_REG_FIELD(dev->user2, usr_command_bitlen, (bitlen - 1));
546544
}
547545

548546
/**

components/hal/include/hal/spi_flash_hal.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ typedef struct {
5757
#define SPI_FLASH_HOST_CONTEXT_SLICER_FLAG_DTR BIT(0) ///< Slice data according to DTR mode, the address and length must be even (A0=0).
5858
int freq_mhz; /// Flash clock frequency.
5959
uint8_t tsus_val; ///< Tsus value of suspend (us)
60+
bool auto_waiti_pes; ///< True for auto-wait idle after suspend command. False for using time delay.
6061
} spi_flash_hal_context_t;
6162
ESP_STATIC_ASSERT(sizeof(spi_flash_hal_context_t) == 48, "size of spi_flash_hal_context_t incorrect. Please check data compatibility with the ROM");
6263

@@ -90,7 +91,8 @@ typedef struct {
9091
esp_flash_io_mode_t default_io_mode; ///< Default flash io mode.
9192
int freq_mhz; ///< SPI flash clock speed (MHZ).
9293
int clock_src_freq; ///< SPI flash clock source (MHZ).
93-
uint8_t tsus_val; ///< Tsus value of suspend (us)
94+
uint8_t tsus_val; ///< Tsus value of suspend (us).
95+
bool auto_waiti_pes; ///< True for auto-wait idle after suspend command. False for using time delay.
9496
} spi_flash_hal_config_t;
9597

9698
/**

0 commit comments

Comments
 (0)