本帖最后由 linyu0395 于 2020-12-12 16:02 编辑
本周的垂直应用主题为功能安全,学习链接为
https://www.stmcu.com.cn/ecosystem/app/function-safety
STM32的全系列产品内置的安全属性如下图,也终于看到了H7系列附带了ECC校验的SRAM,算是一个突破吧。
项目开发中,不仅仅写好代码就可以了,还要考虑各种因素,比如强磁辐射干扰带来的代码跑飞。所以我侧重点看了AN1015关于学习提高微控制器的EMC性能这篇文档,里面针对各种现象和处理,都值得我们细细拜读一下。
在设计阶段,面向EMC的软件设计,能增加安全性和可靠性,也可以节省硬件和开发成本,EMC干扰引发的问题会导致单片机没有响应、程序计数器失控、意想不到的指令执行、以及IO口的控制失调等。
看门狗是最有效的工具,可以确保MCU恢复,他的原理很简单,就是一个定时器,生成一个MCU计数结束的时候重置,一旦运行起来,唯一能防止的办法就是不断重置开门狗定时器。但是在使用的过程中,我们也要小心应用,我相信也不少人会把看门狗重置放在中断中,这是最不可取的,因为程序一旦跑飞,中断有可能还在工作,这时候看门狗就没办法复位了,程序也就进入假死状态。
不可取的看门狗示例图:
建议看门狗运行的示例图:
除此之外,还要保护未使用的程序内存区域,因为在大多数的应用程序中,程序内存空间不是完全由用户代码填充的,安全起见,请用代码填充未使用的内存位置,确保程序计数器跑飞后跳转到未知区域,而不会产生意想不到的后果。所以也建议大家从代码中删除一些非法的和关键字节的代码。
管理未使用的中断向量也可以提高EMC的性能。为了避免意外的中断事件(无论其来源是什么)引起的问题,建议通过设置一个有效的中断来管理所有可能的中断源。
冗余数据的存储和交换。存储在内部或者外部内存数据都有可能因为极端条件下的电磁干扰而损坏,在不相邻存储器中存储互补值,通过检查奇偶校验位或者ECC都是很好的办法,帮助识别和纠正数据,更多的信息可以参考AN4435文档。
我们不仅仅要作为一个合格的程序员,要通过不断摸索,不断学习来提高更多的技能,成为一个合格的工程师。在项目开发中没有健壮的程序保护,后果可想而知,借此,大家可以细细研读一下AN1015以及AN4435的文档,绝对有帮助。最后附上这两份文档。
|