版主,在软件资源版本V10.7(2024-08-30)中例程:
V7-029_QSPI读写例程,四线DMA方式,读每秒48MB(V1.1).rar
在驱动文件bsp_qspi_w25q256.c中,
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: QSPI_EraseChip
* 功能说明: 整个芯片擦除
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void QSPI_EraseChip(void)
{
QSPI_CommandTypeDef sCommand={0};
/* 用于命令发送完成标志 */
CmdCplt = 0;
/* 写使能 */
QSPI_WriteEnable(&QSPIHandle);
/* 基本配置 */
sCommand.InstructionMode = QSPI_INSTRUCTION_1_LINE; /* 1线方式发送指令 */
sCommand.AddressSize = QSPI_ADDRESS_32_BITS; /* 32位地址 */
sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; /* 无交替字节 */
sCommand.DdrMode = QSPI_DDR_MODE_DISABLE; /* W25Q256JV不支持DDR */
sCommand.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; /* DDR模式,数据输出延迟 */
sCommand.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; /* 每次传输都发指令 */
/* 擦除配置 */
sCommand.Instruction = BULK_ERASE_CMD; /* 整个芯片擦除命令*/
sCommand.AddressMode = QSPI_ADDRESS_1_LINE; /* 地址发送是1线方式 */
sCommand.Address = 0; /* 地址 */
sCommand.DataMode = QSPI_DATA_NONE; /* 无需发送数据 */
sCommand.DummyCycles = 0; /* 无需空周期 */
if (HAL_QSPI_Command_IT(&QSPIHandle, &sCommand) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/* 等待命令发送完毕 */
while(CmdCplt == 0);
CmdCplt = 0;
/* 等待编程结束 */
StatusMatch = 0;
QSPI_AutoPollingMemReady(&QSPIHandle);
while(StatusMatch == 0);
StatusMatch = 0;
}
擦除芯片指令,地址段参数中的地址模式(AddressMode)应该设置为QSPI_ADDRESS_NONE
而不是QSPI_ADDRESS_1_LINE,不然无法擦除芯片内容。 |