STM32CubeIDE使用QSPI读写W25Q256JV。其它指令正常,只有图中红色标记的指令(QSPI4字节读)异常,只能读取前几个数据,后面就是乱码或者flash擦除之后的0xFF。其它功能均正常,为什么会出现这种情况呢?QSPI 4字节模式下读ID和写入都是正常的。Standard SPI 4字节模式下所有指令均正常。
例如写入"hello world 12345\r\n", 使用0xEC指令读取的结果是"hello "+乱码。
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();
}