起因
我在和一个朋友讨论bootloader的时候,他提出了他的设计思路,也就是状态判断的一个设计,这个设计,确实是我没想到的,也就是bootloader得到上一次复位的原因,是掉电复位,看门狗,还是软件复位
复位寄存器
这个寄存器不会因为断电而丢失,STM32中,RCC的寄存器和功能因芯片的不同而不同,但RCC_CSR寄存器是众多STM32种都具有的一个。
但是,rcc_csr寄存器也是在sram中的数据,掉电就会丢失,因为需要有备用电源,就是一般有那种备用电源的设备上面。其实也可以理解,一般有稳定电源的mcu也不会担心掉电问题,备用电源(电池)就是因为要低功耗啊,才可能出现主电池没电问题。
作用
开机的时候,可以根据上一次的行为来知道为什么复位。
- 可以利用看门狗喂狗的功能:跳转app,如果app没喂狗就说明了app有问题,直接复位失败,几次之后就立起来标志位,并发送给云端,说明当前固件错误的问题。
- 利用掉电复位来报警,因为电池的供电本来就是一个不稳的情况,一般mcu在2.2v就能启动了,1.8v就不能工作了,一般都是有pvd中断的,可以结合pvd+掉电复位来报警提醒电量不够。
- 软件复位,可以直接用于ota,软件层面接收到数据,bootloader接收到是软件复位就开始了升级了,也是一个设计。
- 监控mcu状态是否合理,多次复位,肯定是有问题的,可以把复位原因每次都发送云端,这样方便修改和调试,找到问题。
当然功能还是以查询状态,然后针对这个状态,做出一些措施而已。有联网的措施,有本地的措施,有程序自检的措施,主要是看产品设计和定位。
总结
我个人认为还是物联网方面需要这个功能,如果只是一些普通的项目,一般都是没问题的,只要通过了测试,很多问题都是可以的,反而因为需要远程4g或者wifi的fota,这个很可能出现网络问题,传输问题等。而且物联网总是需要实时监控的,有这个功能,也方便管理和及时ota来修复应用层问题。