你好,
当我将两个 SDK 示例“frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33”和“frdmimxrt1186_flexspi_nor_polling_transfer_cm33”组合在一起时,执行函数“FLEXSPI_SoftwareReset(base);”后最终导致硬故障。我还注意到“基址”0x445E0000 发生了变化。我使用的是 FRDM-RT1186 EVA 套件。造成这种情况的原因可能是什么?
我使用的是 MCUXpressoIDE_25.6.136。
感谢您的反馈。
嗨,Pablo,
感谢您与我联系。
我使用的是 SDK 26.03.00 (928 2026-03 , 清单版本 3.15.0 )。
我以“frdmimxrt1186_lwip_ipv4_ipv6_echo_freertos_cm33”开始。
这种情况经常发生,没有特定条件。
我从示例“frdmimxrt1186_flexspi_nor_polling_transfer_cm33”中导入文件;
board/hardware_init_Flash.c
drivers/fsl_flexspi.c
drivers/fsl_flexspi.h
source/appFlash/flexspi_nor_flash_ops.c
source/appFlash/flexspi_nor_polling_transfer.c
board/app.h// 这包含 app.h
source/lwip_ipv4_ipv6_echo_freertos.c // 这包含两个函数调用:
int main(void)
{
BOARD_InitHardware();
BOARD_InitHardware_Flash();
main_Flash();
void BOARD_InitHardware_Flash(void)
{
BOARD_CommonSetting();
// BOARD_ConfigMPU(); // bord.c= identisch mit Lwip prj
// BOARD_InitBootPins(); // pin_mux.c""
BOARD_InitFLASHPins();
// BOARD_InitBootClocks(); // clock_config.c""
// BOARD_InitDebugConsole(); // board.c""
}
int main_Flash(void)
{
uint32_t i = 0;
status_t status;
uint8_t vendorID = 0;
// BOARD_InitHardware_Flash();
...
返回 1;
/*
当(1)
{
}
*/
}
我想就是这样了。
提前谢谢您。
格尔德
嗨@GerdMartin ,
请问您能否详细说明一下您是如何将这两个 SDK 示例结合起来的?
做了哪些改动?
你以哪个例子作为出发点?
您目前使用的是哪个SDK版本?
另外,您提到在执行 FLEXSPI_SoftwareReset(base) 后最终会发生硬故障。每次调用该函数时都会发生这种情况,还是只在特定条件下才会发生?
此致,
巴勃罗
嗨,Pablo,我想知道你是否了解我的问题。
非常感谢
格尔德
您好,我有一个更新。我忘记从示例 flexspi 中复制文件夹 linkscript 了。现在,我遇到了另一个硬故障初始化 lwip,但 flexspi 初始化工作正常。
格尔德
嗨@GerdMartin ,
我成功重现了该行为,经过一些测试后,我观察到以下情况:
在你合并的前两个示例中,flexspi_nor_polling_transfer_cm33 会擦除和写入内存区域。默认情况下,此示例使用的区域是组合项目图像的一部分。
我们可以计算出示例访问的扇区。在这个例子中,使用了扇区 20,扇区大小为 4k。
因此,FlexSPI 示例修改了以下地址:
20 × 4k + FlexSPI2_AMBA_BASE = 0x4014000
如果我们检查调用 main_FLASH() 前后的内存内容,可以看到项目映像的一部分被覆盖了。
Pablo_Ramos_0-1787777815010.pngPablo_Ramos_0-1787777815010.pngPablo_Ramos_0-1787777815010.png
Pablo_Ramos_1-1787777823697.pngPablo_Ramos_1-1787777823697.pngPablo_Ramos_1-1787777823697.png
能否修改 FlexSPI 示例使用的内存区域,使其不与项目映像重叠?
做出此项更改后,问题是否仍然存在?
此致,
巴勃罗