- 主题:请教stm32h7内部flash扇区故障跑飞
flash这么容易坏吗?STM32 ST-LINK Utility里面擦掉再写点数据测试一下吧
八成是你写flash的代码有问题
【 在 wbw4 (wbw4) 的大作中提到: 】
: 想请教一个问题,使用内部flash的一个扇区存储一些参数,上电启动后读取这个扇区内的参数,发现这个扇区坏了,无法读取此扇区,导致程序死掉。有什么方法能在遇到坏扇区时跳出来继续往后执行么?谢谢
--
FROM 43.224.44.*
flash读写完了校验一下?
【 在 wbw4 (wbw4) 的大作中提到: 】
: 测试过,确实是坏的,至于为什么坏,是我原来程序有问题,操作flash过程中看门狗重启,大部分设备没问题,少部分导致数据丢失但是可以重新读写,个别几个扇区无法读写。我现在主要想解决遇上无法读的坏扇区怎么跳出来而不是跑飞的问题。
: :flash这么容易坏吗?STM32 ST-LINK Utility里面擦掉再写点数据测试一下吧
: :八成是你写flash的代码有问题
: ...................
--
FROM 43.224.44.*
跟踪吧,看看是HAL的库函数里面飞的,还是自己代码飞的
【 在 wbw4 (wbw4) 的大作中提到: 】
: 现在是一读坏区就飞了,还没到读完。。。问题我读之前也不知道它是否是坏区
: :flash读写完了校验一下?
: :【 在 wbw4 (wbw4) 的大作中提到: 】
: ...................
--
FROM 43.224.44.*
是HAI的代码,还是自己的代码?
【 在 wbw4 (wbw4) 的大作中提到: 】
: 就是按地址指针取数的循环里飞的
: :跟踪吧,看看是HAL的库函数里面飞的,还是自己代码飞的
: :【 在 wbw4 (wbw4) 的大作中提到: 】
: ...................
--
FROM 124.64.19.*
查一下文档,看看是不是触发了什么异常,
如果HAL有相应的callback函数,可能会跳到那里去,然后死循环
或者你跟踪一下,看看跳到固定位置,还是随机乱跳
我最近也要用这个功能,所以比较关心
【 在 wbw4 (wbw4) 的大作中提到: 】
: 自己写的
: buff[i]=*(_IO u8*)(addr+i);
: :是HAI的代码,还是自己的代码?
: ...................
--
FROM 124.64.19.*
接着查代码,这一段前后是什么代码,对应的C源代码是什么
【 在 wbw4 (wbw4) 的大作中提到: 】
: b infinite_loop
: 会直接跳转到这里
: :查一下文档,看看是不是触发了什么异常,
: ...................
--
FROM 124.64.19.*
这不是反汇编窗口的输出吗?上面下面的代码是啥
keil里面看trace记录,哪里跳过来的
【 在 wbw4 (wbw4) 的大作中提到: 】
: 从读数据直接就到这了
: :接着查代码,这一段前后是什么代码,对应的C源代码是什么
: :【 在 wbw4 (wbw4) 的大作中提到: 】
: ...................
--
FROM 124.64.19.*
是硬件异常应该能触发中断,我猜代码应该能够接管
你这个infinite_loop总有个地址吧,是多少?
会不会写个中断处理函数,或者弱回调函数,在里面想办法处理一下
【 在 wbw4 (wbw4) 的大作中提到: 】
: flash双重检测错误标志dbeccerr置位,故障分析器显示总线存储器管理或使用失败,直接跳转到infinite_loop
: :是HAI的代码,还是自己的代码?
: :【 在 wbw4 (wbw4) 的大作中提到: 】
: ...................
--
FROM 124.64.19.*
stm32f4xx_hal_flash.c里面有如下说明:
(#) Interrupts and flags management functions:
(++) Handle FLASH interrupts by calling HAL_FLASH_IRQHandler()
(++) Callback functions are called when the flash operations are
finished :
HAL_FLASH_EndOfOperationCallback() when everything is ok,
otherwise
HAL_FLASH_OperationErrorCallback()
(++) Get error flag status by calling HAL_GetError()
自己定义一个回调函数:
HAL_FLASH_OperationErrorCallback
在里面做个死循环,看看能不能跳到这里
【 在 wbw4 (wbw4) 的大作中提到: 】
: flash双重检测错误标志dbeccerr置位,故障分析器显示总线存储器管理或使用失败,直接跳转到infinite_loop
: :是HAI的代码,还是自己的代码?
: :【 在 wbw4 (wbw4) 的大作中提到: 】
: ...................
--
FROM 124.64.19.*