karin 发表于 2024-3-2 15:20:33

STM32F4 在APP运行时未知原因导致IAP程序被修改,求解。

IAP程序被修改无法运行,导致过程IAP卡死。已验证该错误发生在APP程序(地址0x08020000)中,仅IAP程序的首地址0x08000000和0x08000004两个数据被改写,且每次复现都是相同的现象(如图),复现概率较低。https://shequ.stmicroelectronics.cn/data/attachment/forum/202402/29/171330a8jj0iqpqwa8wywj.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300请问各位大佬,这种诡异情况是如何发生的?我已经摸不着头脑了,按说如果是软件出问题,跑飞了导致Flash数据被人为修改,那也应该是先将整个扇区的数据擦除,很难出现只修改部分数据的情况,再说每次复现的被修改的数据都一模一样,基本可以排除是干扰等因素导致的了。

eric2013 发表于 2024-3-2 15:59:40

Flash的bit可以从1改成0,不能从0改成1,从0改成1需要擦除。

从截图的情况来看,确实是相应的bit = 1的被修改为0了。

流型 发表于 2024-3-7 15:57:59

(1)可以在烧录IAP程序时,加上verify校验,如果烧录过程的veryfy校验没问题,说明烧录的时候时没有被改写的,一定程度排除芯片Flash本身的问题,怀疑后期被改写。
(2)如果烧录过程的veryfy出错,倾向于怀疑芯片内部Flash自身问题,再看看发生概率,可以把芯片给厂家做失效分析。

流型 发表于 2024-3-7 16:01:38

(3)因为每个程序都会用到0x08000000这个地址,所以换个程序试试看看会不会被改写,如果换其他程序这个地方都不会被改写,那么问题可能更多的和当前出问题的程序本身有关系。如果换其他程序这个地方也会被改写,说明和程序本身无关,更多的怀疑是芯片自身Flash问题。
(4)换个芯片或板子试试。

wtywtykk 发表于 2024-3-8 07:54:50

遇到过同样问题,简单来说,原因是Flash操作被打断+空指针写。Flash不仅在0x08000000,还映射到了0地址。
F4上写0指针不会崩掉程序,会被解释称Flash操作。。。大坑。
https://wtywtykk.github.io/2019/12/15/STM32-Flash-Error.html

CoderXMan 发表于 2024-3-8 09:22:11

wtywtykk 发表于 2024-3-8 07:54
遇到过同样问题,简单来说,原因是Flash操作被打断+空指针写。Flash不仅在0x08000000,还映射到了0地址。
...

{:32:} 牛啊

karin 发表于 2024-3-8 16:34:03

wtywtykk 发表于 2024-3-8 07:54
遇到过同样问题,简单来说,原因是Flash操作被打断+空指针写。Flash不仅在0x08000000,还映射到了0地址。
...

感谢大佬,学习了。{:32:}

eric2013 发表于 2024-3-9 00:51:03

wtywtykk 发表于 2024-3-8 07:54
遇到过同样问题,简单来说,原因是Flash操作被打断+空指针写。Flash不仅在0x08000000,还映射到了0地址。
...

{:8:}

正常应该会触发硬件异常,竟然没触发

2859932063 发表于 2024-3-14 10:27:32

wtywtykk 发表于 2024-3-8 07:54
遇到过同样问题,简单来说,原因是Flash操作被打断+空指针写。Flash不仅在0x08000000,还映射到了0地址。
...

{:8:}大佬
页: [1]
查看完整版本: STM32F4 在APP运行时未知原因导致IAP程序被修改,求解。