ST意法半导体
直播中

efwedfd

8年用户 1048经验值
擅长:EMC/EMI设计
私信 关注
[问答]

为什么无法在STM32H753的4行指令中使用QuadSPI状态标志轮询模式?

当我尝试使用使用所有四个数据线作为指令的 QuadSPI 命令进行轮询时,我无法使状态标志轮询模式正常工作。在这种模式下使用带有 4 行指令的命令时,它会正确轮询第一个命令,但第二个命令的时钟周期比预期少一个,然后片选再也不会变高。我试过让它与多个配置设置一起使用,但共同点似乎是导致问题的 4 行指令。
  • QSPI_HandleTypeDef hqspi =
  • {
  •   .Instance = QUADSPI,
  •   .Init.ClockPrescaler = 63,
  •   .Init.FifoThreshold = 1,
  •   .Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE,
  •   .Init.FlashSize = 1,
  •   .Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE,
  •   .Init.ClockMode = QSPI_CLOCK_MODE_0,
  •   .Init.FlashID = QSPI_FLASH_ID_1,
  •   .Init.DualFlash = QSPI_DUALFLASH_DISABLE,
  • };
  • QSPI_CommandTypeDef qspiCmd =
  • {
  •   .Instruction = 0x05,
  •   .Address = 0x00000000,
  •   .AlternateBytes = 0x00000000,
  •   .AddressSize = QSPI_ADDRESS_24_BITS,
  •   .AlternateBytesSize = QSPI_ALTERNATE_BYTES_8_BITS,
  •   .DummyCycles = 0,
  •   .InstructionMode = QSPI_INSTRUCTION_4_LINES,
  •   .AddressMode = QSPI_ADDRESS_NONE,
  •   .AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE,
  •   .DataMode = QSPI_DATA_4_LINES,
  •   .NbData = 1,
  •   .DdrMode = QSPI_DDR_MODE_DISABLE,
  •   .DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY,
  •   .SIOOMode = QSPI_SIOO_INST_EVERY_CMD,
  • };
  • QSPI_AutoPollingTypeDef autoPollCfg =
  • {
  •   .Match = 0x12345678, // Don't match, continue polling indefinitely
  •   .Mask = 0xFFFFFFFF,
  •   .Interval = 1,
  •   .StatusBytesSize = 1,
  •   .MatchMode = QSPI_MATCH_MODE_AND,
  •   .AutomaticStop = QSPI_AUTOMATIC_STOP_DISABLE,
  • };
  • HAL_QSPI_Init(&hqspi);
  • HAL_QSPI_AutoPolling(&hqspi, &qspiCmd, &autoPollCfg, HAL_MAX_DELAY);
上面的代码产生以下输出:
(忽略正在读取的实际数据)

仅更改指令行数似乎会产生正确的轮询:
  • .InstructionMode = QSPI_INSTRUCTION_1_LINE,

  • .InstructionMode = QSPI_INSTRUCTION_2_LINES,










回帖(1)

李桂花

2022-12-6 10:06:39
实际上,如果不设置进入四线模式命令,则无法在四线模式下发送任何命令。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分