主题中讨论的其他器件:AWR1843、
您好!
在下面的帖子中、提到 RAM3中的数据将在热复位后保留。
但我不清楚 RAM3的存储器范围是多少? 是下表中的银行3吗? 如果没有、您会解释一下吗?
谢谢。
克里斯
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
James:
组3的范围是0x460000到0x47FFFF。
我尝试了 mmWave_L_SDK_05_04_00_01\examples\drivers\watchdog\watchdog_reset。 加载测试代码后、我将0x460000和0x470000处的值更改为非零。 WDT 演示运行后、我挂起 M4内核、 在 CCS 内存查看器中发现0x460000和0x470000处的值变为零。
您可以帮助再次检查吗?
谢谢。
克里斯
James:
客户发现、如果只调用 SOC_triggerWarmReset API、则可以保留组3存储器内容。
我再次检查了看门狗复位演示 ,并在 handleWdtRst()之前发现, bank3中的值被保留,但在这个 API 之后, bank3中的值将清零。 在 handleWdtRst()之后,RBL 将再次运行以重新加载闪存。 这是否清除了银行3中的值? 0x460000处没有应用代码或数据。 为什么会将其清零?
谢谢。
克里斯
Chris、您好!
很抱歉耽误你的时间。 如果使用常规热复位、则可以在热复位期间保留数据段。 查看示例中的 linker.cmd 文件、并注意代码:
extern uint32_t __LOAD_DATA_START;
extern uint32_t __LOAD_DATA_END;
extern uint32_t __RUN_DATA_START;
/* Copying the data section from load memory to run memory location.*/
uint32_t data_size = ((uintptr_t)&__LOAD_DATA_END - (uintptr_t)&__LOAD_DATA_START);
memcpy((void*)&__RUN_DATA_START,(void*)&__LOAD_DATA_START,data_size);
TIM:
可以。 我也怀疑这会导致清除。 但我试图修改 cmd 文件(见下文)、并让测试应用程序根本不使用组3。 使用新的测试应用程序、组3仍清零。
使用新的热复位测试应用程序(使用以下 cmd 文件)进行测试步骤
1.将映像刻录到闪存
2.打开 EVM 的电源。 在 CCS 中连接 M4。 加载符号。 将0x460000处的值改为0xAAA。
3.继续在 CCS 上运行。 请参阅 CCS 控制台上的打印。
4.打印停止并参阅下面的内容后、在 CCS 中停止 M4内核并检查 0x460000处的值、然后变为0。
您可以帮助检查测试过程中是否漏掉了任何东西吗?
e2e.ti.com/.../1538.linker.cmd
谢谢。
克里斯
Chris、您好!
请阅读以下位置的文档: MMWAVE_L_SDK_05_04_00_01/docs/api_guide_xwrL64xx/ EXAMPLES_DRIVERS_WATCHDOG_RESET_MODE.html
由于 在 SOC_triggerWarmReset ()调用之前 handleWdtRst ()中执行的序列,引导加载程序实际上从闪存执行了整个重新加载。 如果我们不在 handleWdtRst()中执行整个序列,并且只调用 SOC_triggerWarmReset (),那么我们将只执行真正的热复位。
此致、
时间
引导加载程序实际上从闪存执行了完整的重新加载。
、但我试图修改 cmd 文件(见下文)并让测试应用程序完全不使用组3。 [/报价]TIM:
应用映像不使用存储体3、因此我认为即使是 RBL 也将闪存内容复制到 RAM、但也不会清除存储体3、因为它仅会根据段信息将闪存内容复制到内部存储器。
谢谢。
克里斯