I cannot get Quad DDR reads to work on the Cypress chip. The max read rate should be 8x: Quad DDR (4x2), but the best I can achieve is 4x: Dual DDR(2x2).
The command sequence I have for Quad DDR:
[QSPI_LUT_SEQ_DEFAULT_READ + 0] =
QSPI_ENCODE_LUT_ENTRY(
QSPI_ENCODE_INSTRUCTION(I_CMD, ONE_DATA_PIN, C_DDR_QUAD_IO_READ),
QSPI_ENCODE_INSTRUCTION(I_ADDR_DDR, FOUR_DATA_PINS, QSPI_ADDRESS_WIDTH)),
[QSPI_LUT_SEQ_DEFAULT_READ + 1] =
QSPI_ENCODE_LUT_ENTRY(
QSPI_ENCODE_INSTRUCTION(I_MODE_DDR, FOUR_DATA_PINS, 1),
QSPI_ENCODE_INSTRUCTION(I_DUMMY, FOUR_DATA_PINS, 6)),
[QSPI_LUT_SEQ_DEFAULT_READ + 2] =
QSPI_ENCODE_LUT_ENTRY(
QSPI_ENCODE_INSTRUCTION(I_READ_DDR, FOUR_DATA_PINS, 64),
QSPI_ENCODE_INSTRUCTION(I_JMP_ON_CS, FOUR_DATA_PINS, 0)),
(See Cypress S25FL128S datasheet, page 51 for MODE and DUMMY values. Latency Code is factory default: 00)
When I read using this sequence I get 0xCCCC...CCCC instead of 0xFFFF...FFFF (virgin flash). This looks like each nibble is losing 2 bits. So data lines 0 and 1 were okay, but data lines 2 and 3 were zero. What gives?!