本帖最后由 nickfox 于 2022-6-22 23:10 编辑
我这里有一个这样的函数.
平台是Y版STM32H743ZI
[C] 纯文本查看 复制代码 QSPI_CommandTypeDef s_command;
uint8_t pData;
s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;
s_command.Instruction = 0x0f; // 不管什么命令都可以
s_command.AddressSize = QSPI_ADDRESS_8_BITS;
s_command.DataMode = QSPI_DATA_1_LINE;
s_command.AddressMode = QSPI_ADDRESS_1_LINE;
s_command.Address = 0xC0; // 只要地址不是0x00 or 0x01,就会发生TEF错误.
s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_1_LINE;
s_command.DummyCycles = 0;
s_command.NbData = 1;
s_command.DdrMode = QSPI_DDR_MODE_DISABLE;
s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
if (HAL_QSPI_Command(&hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
{
while(1)
{
}
}
if (HAL_QSPI_Receive(&hqspi, &pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
{
while(1)
{
}
}
return pData;
考虑设计的时序
如果Address是0x00,0x01就可以正常发送,否则连CLK都没跳变.求助有没有什么解决思路.
与AlternateByteMode无关,尝试过设置和不设置,单步跟踪写入AR寄存器后TEF就置位了,也检查了Flash大小,设置到了最大大小,而这个是SPI NAND,总量4Gb + ECC(4088Mb).
解决了
换2Gb片子,不知道为什么
|