嵌入式 IAP 在线升级-程序设计
flowchart TB
%%{init: { "flowchart": { "curve": "basis" } } }%%
A1(引导程序之流程)-->B1(......)-->C1(跳转至应用程序)
A2(应用程序之流程)-->B2(......)-->C2(跳转至引导程序)
flowchart TB
%%{init: { "flowchart": { "curve": "basis" } } }%%
A1(引导程序之流程)-->B1(......)-->C1(跳转至应用程序)
A2(应用程序之流程)-->B2(......)-->C2(跳转至引导程序)
flowchart LR
%%{init: { "flowchart": { "curve": "basis" } } }%%
full_update(全量差分包)
diff_update(增量差分包)
app(大程序)
iap(小程序)
dnload(数据暂存区)
backup(数据暂存区)
runapp(程序运行区)
decode(数据解码区)
full_update-->app
full_update-->iap
diff_update-->app
diff_update-->iap
app-->dnload
iap-->dnload
dnload--跳转至小程序-->backup
backup-.㈣<br>回滚旧程序.->runapp
backup--㈠<br>解码升级包-->decode
decode--㈢<br>写入新程序-->runapp
runapp--㈡<br>备份旧程序-->backup
flowchart LR
%%{init: { "flowchart": { "curve": "basis" } } }%%
A(先取下芯片)--->B(再烧录程序)--->C(后装回板卡)
flowchart LR
%%{init: { "flowchart": { "curve": "basis" } } }%%
A("在电路编程<br>(ICP)")--->B("在系统编程<br>(ISP)")--->C("在应用编程<br>(IAP)")
最近在使用电压比较器时发现硬件滤波电路会出现失效的情况,经分析是其采样频率过高所致。

参考手册中绘制的是理想条件下的波形,真实情况并非如此,INP 在逼近 INM 时会伴随着噪声/抖动。我们可以使用硬件滤波电路来消除这种抖动,图中绿色线段表示各采样点,其频率即为采样频率。
采样频率较低时,滤波电路可以正常工作,但是随着采样频率的升高,其可靠性反而会降低。
通过调试发现每次运行至 M4_SYSREG->PWR_PWRC2 赋值时程序就会跑飞😶

en_result_t PWC_HS2LS(void) |
瞅了一眼《参考手册 Rev1.2.1》好像也没啥问题,又看了《参考手册 Rev1.3》后,我得发…🙄!
两版手册竟然不一样!
最近又把 MCU 给干废了,现象如下:
Load "main.axf" |
事情经过是这样的,某款产品第一版硬件的时钟源选用的是 6MHz 的外部晶振,内部倍频至 128MHz 作为系统主频,而第二版则改成了 24MHz 的外部晶振,第二版硬件出来后,将第一版程序直接烧录进第二版硬件后 MCU 无法正常启动且无法被识别。
初步推测,应该是外部晶振频率提高,但是程序没有进行适当地分频,导致系统主频远远超过数据手册中规定的频率上限(200MHz)。
后面通过调试,证实程序的确是在 M4_SYSREG->CMU_CKSWR_f.CKSW = enTargetSysSrc; 处出现异常。
上述操作其实就是「超频」,只是超得有点猛,导致芯片直接宕机。这种情况借助小华的离线下载器重新烧录程序即可恢复正常。