开发中,经常遇到初学者把SOTA和Overlay两个功能搞混淆,因此随便总结总结,有不对的地方大家指出来
1、功能对比
2、SOTA功能描述
核心逻辑:使能SWAP功能,使两块不同的物理区域可以映射到相同逻辑地址
以TC39x为例,该芯片有两种Address map方式:
(1)Standard Address map
(2)Alternate address map
标准地址映射,A0000000-A0BFFFFF 对应物理BANK 为(PF0、1)(简称A)、(PF2、3)(简称B)
备用地址映射,A0000000-A0BFFFFF 对应物理BANK 为(PF2、3)(B)、(PF0、1)(A)
以上述为例,用户使用A000 0000 - A05F FFFF作为工程的运行区(不关心实际对应哪一块物理BANK),用A060 0000 - A0BF FFFF作为OTA升级的程序刷写区;
当需要OTA升级时,将代码写到程序刷写区后,检查当前地址映射模式,配置寄存器切换到另一种地址模式,MCU重启后刷写区对应的物理bank会映射到运行区,开始运行新的程序;后续OTA升级以此类推。
3、Overlay功能描述
核心逻辑:通过配置Overlay寄存器,CPU访问Flash地址,但实际重定向访问RAM中内容
应用场景举例:在汽车制动中,假设制动力大小与制动踏板的数学模型
Y = aX+b
其中,Y是制动力,X是制动踏板开度,a、b为模型系数;
通常情况下,a、b是作为常量存储在Flash
现在标定工程师开发过程中,想要在某个固定制动踏板位置下,修改a、b参数来调节制动力大小,
如果是修改flash,从时间和安全角度是不现实的。
因此需要把a、b的值拷贝到RAM,通过访问修改ram中a、b值来达到上述目的。
Overlay功能举例说明:
假设想把PFlash0(0x8000 1000)(128byte)重定向到CPU0DSPR(0x70011000)
定义一个常量,存储在PF中,如下
定义一个变量,存储在RAM中,如下
Overlay是针对CPU的,由于debug是走bypass,因此如果直接去memory看overlay flash值,必定还是原flash的值。
需要一个中间变量来承接,定为Test_Algo_Update
开启overlay功能,要达到的目的为:通过cpu0去读取被重定向flash里的值,实际读到的应该是RAM中的值
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/djkeyzx/article/details/129681335
|