QSPI读写W25Q256JV使用 Fast Read Quad I/O with 4-Byte Address 只能读取前几个数据,使用其它读指令正常,是什么原因?

STM32CubeIDE使用QSPI读写W25Q256JV。其它指令正常,只有图中红色标记的指令(QSPI4字节读)异常,只能读取前几个数据,后面就是乱码或者flash擦除之后的0xFF。其它功能均正常,为什么会出现这种情况呢?QSPI 4字节模式下读ID和写入都是正常的。Standard SPI 4字节模式下所有指令均正常。

img

例如写入"hello world 12345\r\n", 使用0xEC指令读取的结果是"hello "+乱码。

img

void W25q_QSPI_FastRead4Byte(uint8_t *pData, uint32_t ReadAddr, uint32_t Size)
{
    QSPI_CommandTypeDef Qcmd;
    Qcmd.Instruction = W25q_FastReadQuad4Byte;  // 0xEC
    Qcmd.InstructionMode = QSPI_INSTRUCTION_1_LINE;
    Qcmd.Address = ReadAddr;
    Qcmd.AddressSize = QSPI_ADDRESS_32_BITS;
    Qcmd.AddressMode = QSPI_ADDRESS_4_LINES;
    Qcmd.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
    Qcmd.DummyCycles = 6;
    Qcmd.DataMode = QSPI_DATA_4_LINES;
    Qcmd.NbData = Size;
    Qcmd.DdrMode = QSPI_DDR_MODE_DISABLE;
    Qcmd.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
    HAL_QSPI_Command(&hqspi, &Qcmd, HAL_QSPI_TIMEOUT_DEFAULT_VALUE);
    HAL_QSPI_Receive(&hqspi, pData, HAL_QSPI_TIMEOUT_DEFAULT_VALUE);

    W25q_WaitBusy();
}