ZHCAFK3 July 2025 AM625 , AM62P
在 MCU Plus SDK 中,某些闪存需要额外的配置才能完全正常工作。混合扇区配置就是例子。这是一个添加此类特性的挂钩,在闪存驱动程序中打开函数的末尾调用此处提到的函数。在 MCU plus SDK 中,该默认函数位于 ~/ /source/board/flash/ospi/flash_nor_ospi.c,名称为 Flash_quirkSpansionUNHYSADisable()。使用此函数添加一些调试信息,以帮助解决与 NOR 闪存相关的问题。使用以下示例,添加寄存器打印,并在驱动器中将 NOR 闪存模式从统一模式更改为混合顶部模式。
注意以下步骤:
void loop_forever()
{
volatile uint32_t loop = 1;
while(loop)
;
}
int32_t Flash_quirkSpansionUNHYSADisable(Flash_Config *config)
{
int32_t status = SystemP_SUCCESS;
uint8_t regData = 0x00;
uint32_t write = 0;
status |= Flash_norOspiRegRead(config, 0x65, 0x00800002, ®Data);
DebugP_log("Value of Configuration Register 1: %u \r\n", regData);
regData = 0x00;
status |= Flash_norOspiRegRead(config, 0x65, 0x00800004, ®Data);
DebugP_log("Value of Configuration Register 3: %u \r\n", regData);
/* Hybrid Sector Disable */
status = Flash_norOspiRegRead(config, 0x65, 0x00800004, ®Data);
if((regData & ((uint8_t)(1 << 3))) == 0)
{
/* Set UNHYSA bit */
regData |= (1 << 3);
write = 1U;
}
else
{
/* No action */
}
if(write)
{
status = Flash_norOspiRegWrite(config, 0x71, 0x04, regData);
}
regData = 0x00;
status = Flash_norOspiRegRead(config, 0x65, 0x00800000, ®Data);
if(regData!=0)
{
DebugP_log("ERROR!!!!!! Need Reset board, State Register1 !=0. Value of State Register 1: %u \r\n", regData);
loop_forever();
}
return status;
}
打开闪存驱动程序后,将打印调试信息。