41 static uint8_t gs_buffer_input[600];
42 static uint8_t gs_buffer_output[600];
43 static const uint32_t gsc_size[] = {0x100000, 0x200000, 0x400000, 0x800000, 0x1000000, 0x2000000};
134 uint32_t addr, step, j;
136 size = gsc_size[type -
W25Q80];
142 for (addr = 0; addr < size; addr += step)
144 for (j = 0; j < 600; j++)
146 gs_buffer_input[j] = rand() %256;
148 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
156 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
164 for (j = 0; j < 600; j++)
166 if (gs_buffer_input[j] != gs_buffer_output[j])
178 addr = (rand() % 10) * 4 * 1024;
188 for (j = 0; j < 256; j++)
190 gs_buffer_input[j] = rand() %256;
212 for (j = 0; j < 256; j++)
214 if (gs_buffer_input[j] != gs_buffer_output[j])
233 for (j = 0; j < 256; j++)
235 if (gs_buffer_input[j] != gs_buffer_output[j])
246 addr = (rand() % 10) * 32 * 1024;
256 for (j = 0; j < 256; j++)
258 gs_buffer_input[j] = rand() %256;
280 for (j = 0; j < 256; j++)
282 if (gs_buffer_input[j] != gs_buffer_output[j])
301 for (j = 0; j < 256; j++)
303 if (gs_buffer_input[j] != gs_buffer_output[j])
314 addr = (rand() % 10) * 64 * 1024;
324 for (j = 0; j < 256; j++)
326 gs_buffer_input[j] = rand() %256;
348 for (j = 0; j < 256; j++)
350 if (gs_buffer_input[j] != gs_buffer_output[j])
369 for (j = 0; j < 256; j++)
371 if (gs_buffer_input[j] != gs_buffer_output[j])
383 memset(gs_buffer_output, 0,
sizeof(uint8_t) * 256);
392 for (j = 0; j < 256; j += 8)
396 gs_buffer_output[j + 0], gs_buffer_output[j + 1], gs_buffer_output[j + 2],
397 gs_buffer_output[j + 3], gs_buffer_output[j + 4], gs_buffer_output[j + 5],
398 gs_buffer_output[j + 6], gs_buffer_output[j + 7]);
413 for (j = 0; j < 256; j++)
415 gs_buffer_input[j] = rand() %256;
433 for (j = 0; j < 256; j++)
435 if (gs_buffer_input[j] != gs_buffer_output[j])
457 for (j = 0; j < 256; j++)
459 gs_buffer_input[j] = rand() %256;
477 for (j = 0; j < 256; j++)
479 if (gs_buffer_input[j] != gs_buffer_output[j])
501 for (j = 0; j < 256; j++)
503 gs_buffer_input[j] = rand() %256;
521 for (j = 0; j < 256; j++)
523 if (gs_buffer_input[j] != gs_buffer_output[j])
533 #if (W25QXX_ENABLE_ERASE_READ_TEST == 1)
568 for (addr = 0; addr < size; addr += step)
570 for (j = 0; j < 600; j++)
572 gs_buffer_input[j] = rand() %256;
574 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
582 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
590 for (j = 0; j < 600; j++)
592 if (gs_buffer_input[j] != gs_buffer_output[j])
604 addr = (rand() % 10) * 4 * 1024;
614 for (j = 0; j < 256; j++)
616 gs_buffer_input[j] = rand() %256;
638 for (j = 0; j < 256; j++)
640 if (gs_buffer_input[j] != gs_buffer_output[j])
659 for (j = 0; j < 256; j++)
661 if (gs_buffer_input[j] != gs_buffer_output[j])
672 addr = (rand() % 10) * 32 * 1024;
682 for (j = 0; j < 256; j++)
684 gs_buffer_input[j] = rand() %256;
706 for (j = 0; j < 256; j++)
708 if (gs_buffer_input[j] != gs_buffer_output[j])
727 for (j = 0; j < 256; j++)
729 if (gs_buffer_input[j] != gs_buffer_output[j])
740 addr = (rand() % 10) * 64 * 1024;
750 for (j = 0; j < 256; j++)
752 gs_buffer_input[j] = rand() %256;
774 for (j = 0; j < 256; j++)
776 if (gs_buffer_input[j] != gs_buffer_output[j])
795 for (j = 0; j < 256; j++)
797 if (gs_buffer_input[j] != gs_buffer_output[j])
809 memset(gs_buffer_output, 0,
sizeof(uint8_t) * 256);
818 for (j = 0; j < 256; j += 8)
822 gs_buffer_output[j + 0], gs_buffer_output[j + 1], gs_buffer_output[j + 2],
823 gs_buffer_output[j + 3], gs_buffer_output[j + 4], gs_buffer_output[j + 5],
824 gs_buffer_output[j + 6], gs_buffer_output[j + 7]);
839 for (j = 0; j < 256; j++)
841 gs_buffer_input[j] = rand() %256;
859 for (j = 0; j < 256; j++)
861 if (gs_buffer_input[j] != gs_buffer_output[j])
883 for (j = 0; j < 256; j++)
885 gs_buffer_input[j] = rand() %256;
903 for (j = 0; j < 256; j++)
905 if (gs_buffer_input[j] != gs_buffer_output[j])
927 for (j = 0; j < 256; j++)
929 gs_buffer_input[j] = rand() %256;
947 for (j = 0; j < 256; j++)
949 if (gs_buffer_input[j] != gs_buffer_output[j])
976 uint32_t addr, step, j;
978 size = gsc_size[type -
W25Q80];
984 for (addr = 0; addr < size; addr += step)
986 for (j = 0; j < 600; j++)
988 gs_buffer_input[j] = rand() %256;
990 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
998 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
1006 for (j = 0; j < 600; j++)
1008 if (gs_buffer_input[j] != gs_buffer_output[j])
1020 addr = (rand() % 10) * 4 * 1024;
1030 for (j = 0; j < 256; j++)
1032 gs_buffer_input[j] = rand() %256;
1054 for (j = 0; j < 256; j++)
1056 if (gs_buffer_input[j] != gs_buffer_output[j])
1067 addr = (rand() % 10) * 32 * 1024;
1077 for (j = 0; j < 256; j++)
1079 gs_buffer_input[j] = rand() %256;
1101 for (j = 0; j < 256; j++)
1103 if (gs_buffer_input[j] != gs_buffer_output[j])
1114 addr = (rand() % 10) * 64 * 1024;
1124 for (j = 0; j < 256; j++)
1126 gs_buffer_input[j] = rand() %256;
1148 for (j = 0; j < 256; j++)
1150 if (gs_buffer_input[j] != gs_buffer_output[j])
1160 #if (W25QXX_ENABLE_ERASE_READ_TEST == 1)
1195 for (addr = 0; addr < size; addr += step)
1197 for (j = 0; j < 600; j++)
1199 gs_buffer_input[j] = rand() %256;
1201 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
1209 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
1217 for (j = 0; j < 600; j++)
1219 if (gs_buffer_input[j] != gs_buffer_output[j])
1231 addr = (rand() % 10) * 4 * 1024;
1241 for (j = 0; j < 256; j++)
1243 gs_buffer_input[j] = rand() %256;
1265 for (j = 0; j < 256; j++)
1267 if (gs_buffer_input[j] != gs_buffer_output[j])
1278 addr = (rand() % 10) * 32 * 1024;
1288 for (j = 0; j < 256; j++)
1290 gs_buffer_input[j] = rand() %256;
1312 for (j = 0; j < 256; j++)
1314 if (gs_buffer_input[j] != gs_buffer_output[j])
1325 addr = (rand() % 10) * 64 * 1024;
1335 for (j = 0; j < 256; j++)
1337 gs_buffer_input[j] = rand() %256;
1359 for (j = 0; j < 256; j++)
1361 if (gs_buffer_input[j] != gs_buffer_output[j])
1385 if (dual_quad_spi_enable != 0)
1410 for (j = 0; j < 256; j++)
1412 gs_buffer_input[j] = rand() %256;
1444 for (j = 0; j < 256; j++)
1446 if (gs_buffer_input[j] != gs_buffer_output[j])
1465 for (j = 0; j < 256; j++)
1467 if (gs_buffer_input[j] != gs_buffer_output[j])
1486 for (j = 0; j < 256; j++)
1488 if (gs_buffer_input[j] != gs_buffer_output[j])
1507 for (j = 0; j < 256; j++)
1509 if (gs_buffer_input[j] != gs_buffer_output[j])
1528 for (j = 0; j < 256; j++)
1530 if (gs_buffer_input[j] != gs_buffer_output[j])
1549 for (j = 0; j < 256; j++)
1551 if (gs_buffer_input[j] != gs_buffer_output[j])
1562 for (j = 0; j < 256; j++)
1564 gs_buffer_input[j] = rand() %256;
1596 for (j = 0; j < 256; j++)
1598 if (gs_buffer_input[j] != gs_buffer_output[j])
1624 for (j = 0; j < 256; j++)
1626 gs_buffer_input[j] = rand() %256;
1658 for (j = 0; j < 256; j++)
1660 if (gs_buffer_input[j] != gs_buffer_output[j])
1679 for (j = 0; j < 256; j++)
1681 if (gs_buffer_input[j] != gs_buffer_output[j])
1700 for (j = 0; j < 256; j++)
1702 if (gs_buffer_input[j] != gs_buffer_output[j])
1721 for (j = 0; j < 256; j++)
1723 if (gs_buffer_input[j] != gs_buffer_output[j])
1742 for (j = 0; j < 256; j++)
1744 if (gs_buffer_input[j] != gs_buffer_output[j])
1763 for (j = 0; j < 256; j++)
1765 if (gs_buffer_input[j] != gs_buffer_output[j])
1776 for (j = 0; j < 256; j++)
1778 gs_buffer_input[j] = rand() %256;
1810 for (j = 0; j < 256; j++)
1812 if (gs_buffer_input[j] != gs_buffer_output[j])
1873 for (addr = 0; addr < size; addr += step)
1875 for (j = 0; j < 600; j++)
1877 gs_buffer_input[j] = rand() %256;
1879 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
1887 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
1895 for (j = 0; j < 600; j++)
1897 if (gs_buffer_input[j] != gs_buffer_output[j])
1919 for (addr = 0; addr < size; addr += step)
1921 for (j = 0; j < 600; j++)
1923 gs_buffer_input[j] = rand() %256;
1925 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
1933 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
1941 for (j = 0; j < 600; j++)
1943 if (gs_buffer_input[j] != gs_buffer_output[j])
1965 for (addr = 0; addr < size; addr += step)
1967 for (j = 0; j < 600; j++)
1969 gs_buffer_input[j] = rand() %256;
1971 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
1979 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
1987 for (j = 0; j < 600; j++)
1989 if (gs_buffer_input[j] != gs_buffer_output[j])
2011 for (addr = 0; addr < size; addr += step)
2013 for (j = 0; j < 600; j++)
2015 gs_buffer_input[j] = rand() %256;
2017 res =
w25qxx_write(&gs_handle, addr, gs_buffer_input, 600);
2025 res =
w25qxx_read(&gs_handle, addr, gs_buffer_output, 600);
2033 for (j = 0; j < 600; j++)
2035 if (gs_buffer_input[j] != gs_buffer_output[j])
driver w25qxx read test header file
uint8_t w25qxx_page_program_quad_input(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint16_t len)
quad page program with quad input
uint8_t w25qxx_get_sfdp(w25qxx_handle_t *handle, uint8_t sfdp[256])
get the sfdp
uint8_t w25qxx_read_security_register(w25qxx_handle_t *handle, w25qxx_security_register_t num, uint8_t data[256])
read the security register
uint8_t w25qxx_program_security_register(w25qxx_handle_t *handle, w25qxx_security_register_t num, uint8_t data[256])
program the security register
uint8_t w25qxx_exit_qspi_mode(w25qxx_handle_t *handle)
exit the qspi mode
uint8_t w25qxx_fast_read_dual_output(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read with dual output in the fast mode
uint8_t w25qxx_octal_word_read_quad_io(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
octal word read with quad io
uint8_t w25qxx_set_read_parameters(w25qxx_handle_t *handle, w25qxx_qspi_read_dummy_t dummy, w25qxx_qspi_read_wrap_length_t length)
set the read parameters
uint8_t w25qxx_enter_qspi_mode(w25qxx_handle_t *handle)
enter the qspi mode
uint8_t w25qxx_fast_read_quad_io(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read with quad io in the fast mode
uint8_t w25qxx_fast_read_dual_io(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read with dual io in the fast mode
uint8_t w25qxx_word_read_quad_io(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
word read with quad io
uint8_t w25qxx_erase_security_register(w25qxx_handle_t *handle, w25qxx_security_register_t num)
erase the security register
uint8_t w25qxx_fast_read_quad_output(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read with quad output in the fast mode
@ W25QXX_QSPI_READ_WRAP_LENGTH_8_BYTE
@ W25QXX_QSPI_READ_DUMMY_4_55MHZ
@ W25QXX_QSPI_READ_DUMMY_6_80MHZ
@ W25QXX_QSPI_READ_DUMMY_2_33MHZ
@ W25QXX_QSPI_READ_DUMMY_8_80MHZ
@ W25QXX_SECURITY_REGISTER_2
@ W25QXX_SECURITY_REGISTER_3
@ W25QXX_SECURITY_REGISTER_1
uint8_t w25qxx_chip_erase(w25qxx_handle_t *handle)
erase the chip
uint8_t w25qxx_only_spi_read(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read only in the spi interface
uint8_t w25qxx_block_erase_32k(w25qxx_handle_t *handle, uint32_t addr)
erase the 32k block
uint8_t w25qxx_set_interface(w25qxx_handle_t *handle, w25qxx_interface_t interface)
set the chip interface
uint8_t w25qxx_page_program(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint16_t len)
page program
uint8_t w25qxx_set_dual_quad_spi(w25qxx_handle_t *handle, w25qxx_bool_t enable)
enable or disable the dual quad spi
w25qxx_type_t
w25qxx type enumeration definition
uint8_t w25qxx_init(w25qxx_handle_t *handle)
initialize the chip
uint8_t w25qxx_info(w25qxx_info_t *info)
get chip's information
uint8_t w25qxx_sector_erase_4k(w25qxx_handle_t *handle, uint32_t addr)
erase the 4k sector
uint8_t w25qxx_deinit(w25qxx_handle_t *handle)
close the chip
uint8_t w25qxx_set_type(w25qxx_handle_t *handle, w25qxx_type_t type)
set the chip type
uint8_t w25qxx_write(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
write data
uint8_t w25qxx_fast_read(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read in the fast mode
w25qxx_interface_t
w25qxx interface enumeration definition
uint8_t w25qxx_set_address_mode(w25qxx_handle_t *handle, w25qxx_address_mode_t mode)
set the chip address mode
uint8_t w25qxx_read(w25qxx_handle_t *handle, uint32_t addr, uint8_t *data, uint32_t len)
read data
uint8_t w25qxx_block_erase_64k(w25qxx_handle_t *handle, uint32_t addr)
erase the 64k block
w25qxx_bool_t
w25qxx bool enumeration definition
@ W25QXX_ADDRESS_MODE_3_BYTE
@ W25QXX_ADDRESS_MODE_4_BYTE
uint8_t w25qxx_interface_spi_qspi_deinit(void)
interface spi qspi bus deinit
uint8_t w25qxx_interface_spi_qspi_init(void)
interface spi qspi bus init
void w25qxx_interface_delay_us(uint32_t us)
interface delay us
uint8_t w25qxx_interface_spi_qspi_write_read(uint8_t instruction, uint8_t instruction_line, uint32_t address, uint8_t address_line, uint8_t address_len, uint32_t alternate, uint8_t alternate_line, uint8_t alternate_len, uint8_t dummy, uint8_t *in_buf, uint32_t in_len, uint8_t *out_buf, uint32_t out_len, uint8_t data_line)
interface spi qspi bus write read
void w25qxx_interface_debug_print(const char *const fmt,...)
interface print format data
void w25qxx_interface_delay_ms(uint32_t ms)
interface delay ms
#define DRIVER_W25QXX_LINK_DELAY_MS(HANDLE, FUC)
link delay_ms function
#define DRIVER_W25QXX_LINK_INIT(HANDLE, STRUCTURE)
initialize w25qxx_handle_t structure
#define DRIVER_W25QXX_LINK_SPI_QSPI_INIT(HANDLE, FUC)
link spi_qspi_init function
#define DRIVER_W25QXX_LINK_DEBUG_PRINT(HANDLE, FUC)
link debug_print function
#define DRIVER_W25QXX_LINK_SPI_QSPI_WRITE_READ(HANDLE, FUC)
link spi_qspi_write_read function
#define DRIVER_W25QXX_LINK_SPI_QSPI_DEINIT(HANDLE, FUC)
link spi_qspi_deinit function
#define DRIVER_W25QXX_LINK_DELAY_US(HANDLE, FUC)
link delay_us function
uint8_t w25qxx_read_test(w25qxx_type_t type, w25qxx_interface_t interface, w25qxx_bool_t dual_quad_spi_enable)
read test
w25qxx handle structure definition
w25qxx information structure definition
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v