使用QSPI的自动轮询模式时,当flash寄存器与Mask运算之后,在设定时间内不能和Match一致时,
此时qspi仍然会持续轮询,直到二者匹配,请问就是这么设计的还是使用出错,按常理不应该超时就停止轮询吗?
[C] 纯文本查看 复制代码 uint8_t AutoPollingMemReady(uint32_t Timeout)
{
QSPI_CommandTypeDef s_command = {0};
QSPI_AutoPollingTypeDef s_config = {0};
/* 配置自动轮询模式等待存储器准备就绪 */
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
s_command.Instruction = W25Q128_READ_STATUS_REGISTER1;
s_command.AddressMode = QSPI_ADDRESS_NONE;
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
s_command.DataMode = QSPI_DATA_1_LINE;
s_command.DummyCycles = 0;
s_config.Match = 0x01;
s_config.Mask = 0x01;
s_config.MatchMode = QSPI_MATCH_MODE_AND;
s_config.StatusBytesSize = 1;
s_config.Interval = 0x10;
s_config.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE;
if(HAL_QSPI_AutoPolling(&hqspi, &s_command, &s_config, Timeout) != HAL_OK)
{
printf("QSPI_AutoPollingMemReady Error\r\n");
return HAL_ERROR;
}
return HAL_OK;
}
如这段代码,如果我就是想要当存储器为busy时执行一些代码,但是一旦其开始轮询后也不能执行其他指令,因为busy永远不会为1导致程序卡死。
还有关于SIOOMode参数的配置究竟影响的是什么功能,刚开始我以为是用在自动轮询模式下只需要发一次指令,然后flash会持续输出当前寄存器状态,
但是用逻辑分析仪观察并不是。
求大佬们指教。
|