Skip to content

Commit 6bc73df

Browse files
danieldegrassedleach02
authored andcommitted
drivers: flash: flash_mcux_flexspi: add support for W25Q512JV
Add support for the W25Q512JV with the FLEXSPI, using a custom LUT table. Signed-off-by: Daniel DeGrasse <[email protected]>
1 parent 527c1f5 commit 6bc73df

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

drivers/flash/flash_mcux_flexspi_nor.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,37 @@ static int flash_flexspi_nor_check_jedec(struct flash_flexspi_nor_data *data,
977977
}
978978
/* Still return an error- we want the JEDEC configuration to run */
979979
return -ENOTSUP;
980+
case 0x40ef:
981+
/* W25Q512JV flash, use 4 byte read/write */
982+
flexspi_lut[READ][0] = FLEXSPI_LUT_SEQ(
983+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_4READ_4B,
984+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 32);
985+
/* Flash needs 6 dummy cycles (at 104MHz) */
986+
flexspi_lut[READ][1] = FLEXSPI_LUT_SEQ(
987+
kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 6,
988+
kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04);
989+
/* Only 1S-1S-4S page program supported */
990+
flexspi_lut[PAGE_PROGRAM][0] = FLEXSPI_LUT_SEQ(
991+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_PP_1_1_4_4B,
992+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32);
993+
flexspi_lut[PAGE_PROGRAM][1] = FLEXSPI_LUT_SEQ(
994+
kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x4,
995+
kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x0);
996+
/* Update ERASE commands for 4 byte mode */
997+
flexspi_lut[ERASE_SECTOR][0] = FLEXSPI_LUT_SEQ(
998+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_SE_4B,
999+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32);
1000+
flexspi_lut[ERASE_BLOCK][0] = FLEXSPI_LUT_SEQ(
1001+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xDC,
1002+
kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 32),
1003+
/* Read instruction used for polling is 0x05 */
1004+
data->legacy_poll = true;
1005+
flexspi_lut[READ_STATUS_REG][0] = FLEXSPI_LUT_SEQ(
1006+
kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, SPI_NOR_CMD_RDSR,
1007+
kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x01);
1008+
/* Device uses bit 1 of status reg 2 for QE */
1009+
return flash_flexspi_nor_quad_enable(data, flexspi_lut,
1010+
JESD216_DW15_QER_VAL_S2B1v5);
9801011
case 0x25C2:
9811012
/* MX25 flash, use 4 byte read/write */
9821013
flexspi_lut[READ][0] = FLEXSPI_LUT_SEQ(

0 commit comments

Comments
 (0)