Skip to content

Commit 37796b2

Browse files
authored
Merge pull request #89 from kaidegit/master
支持Fast Read
2 parents 0efaa1f + e45224f commit 37796b2

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

sfud/inc/sfud_cfg.h

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
#define SFUD_USING_SFDP
3535

36+
// #define SFUD_USING_FAST_READ
37+
3638
#define SFUD_USING_FLASH_INFO_TABLE
3739

3840
enum {

sfud/inc/sfud_def.h

+13
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ if (!(EXPR)) \
118118
#define SFUD_CMD_READ_DATA 0x03
119119
#endif
120120

121+
#ifndef SFUD_CMD_FAST_READ_DATA
122+
#define SFUD_CMD_FAST_READ_DATA 0x0B
123+
#endif
124+
121125
#ifndef SFUD_CMD_DUAL_OUTPUT_READ_DATA
122126
#define SFUD_CMD_DUAL_OUTPUT_READ_DATA 0x3B
123127
#endif
@@ -175,6 +179,15 @@ if (!(EXPR)) \
175179
#define SFUD_DUMMY_DATA 0xFF
176180
#endif
177181

182+
/* dummy data count for fast read data and etc */
183+
#ifndef SFUD_READ_DUMMY_BYTE_CNT
184+
#ifdef SFUD_USING_FAST_READ
185+
#define SFUD_READ_DUMMY_BYTE_CNT 1
186+
#else
187+
#define SFUD_READ_DUMMY_BYTE_CNT 0
188+
#endif
189+
#endif
190+
178191
/* maximum number of erase type support on JESD216 (V1.0) */
179192
#define SFUD_SFDP_ERASE_TYPE_MAX_NUM 4
180193

sfud/src/sfud.c

+11-1
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,9 @@ static sfud_err software_init(const sfud_flash *flash) {
404404
sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t *data) {
405405
sfud_err result = SFUD_SUCCESS;
406406
const sfud_spi *spi = &flash->spi;
407-
uint8_t cmd_data[5], cmd_size;
407+
uint8_t cmd_data[5 + SFUD_READ_DUMMY_BYTE_CNT];
408+
uint8_t cmd_size;
409+
uint8_t i;
408410

409411
SFUD_ASSERT(flash);
410412
SFUD_ASSERT(data);
@@ -429,9 +431,17 @@ sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t
429431
} else
430432
#endif
431433
{
434+
#ifdef SFUD_USING_FAST_READ
435+
cmd_data[0] = SFUD_CMD_FAST_READ_DATA;
436+
#else
432437
cmd_data[0] = SFUD_CMD_READ_DATA;
438+
#endif
433439
make_address_byte_array(flash, addr, &cmd_data[1]);
434440
cmd_size = flash->addr_in_4_byte ? 5 : 4;
441+
for (i = 0; i < SFUD_READ_DUMMY_BYTE_CNT; i++) {
442+
cmd_data[cmd_size] = SFUD_DUMMY_DATA;
443+
cmd_size++;
444+
}
435445
result = spi->wr(spi, cmd_data, cmd_size, data, size);
436446
}
437447
}

0 commit comments

Comments
 (0)