打印
[应用相关]

【STM32垂直应用挑战第五周+远程固件升级】

[复制链接]
711|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WoodData|  楼主 | 2020-12-20 22:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    本周学习的是云连接应用。云连接主要包含三个部分:联网硬件,软件网络通信协议,云平台。主要重点学习内容
STM32的云连接应用第三讲
远程固件升级。
连接:https://www.stmcu.com.cn/ecosystem/app/cloud3





      我觉得在网络云链接应用中,网络固件升级即FOTA非常重要。FOTA的全称是:Firmware Over-The-Air。就是利用无线技术,利用云服务来实现远程的设备固件更新。
        以前产品出厂后,如果需要升级程序,要么是通过预留的调试接口,要么通过串口,USB等普通通信接口利用事先写好的bootloader程序进行更新。总之都需要直接连线到板子上。这样带来的问题就是:不光需要安排人员到现场,升级的时候还需要打开机器外壳,取出主板,连接上位机才能升级。现在物联网产品,已经具备了上网的能力,我们完全可以利用这个功能,实现远程的设备固件更新,不用到现场,不用开盖,设备自动升级。有了这个功能后,可以对已经买出去的产品,修复bug,升级更稳定的软件版本等。远程固件升级的功能,可以节省人力,提高效率。
      而要实现FOTA这个功能,硬件设备也需要一个BOOTLOADER,通过网络连接读取远程云端需要升级的固件,写入设备flash更新设备程序。
      升级方式:从存储器的划分角度可以分为:原位升级,乒乓升级,冗余升级;从升级文件的构成可以分为:全片升级,部分升级,差分升级等。不过每种升级方式都有各自的优缺点,需要参考设备实际情况选择合适的升级方式。
      原位升级主要占用flash空间小,但是如果升级过程失败,容易造成用户程序无法运行。所以一般要在flash比较小的设备时选用。
      乒乓升级是在MCU上同时存在两个用户程序区域,分别存放不同版本的两个程序。MCU运行的时候,就在这两个用户程序区域间切换。这样的好处是下载更新固件不影响正在运行的固件,非常方便,就是需要占用flash很大,需要两套程序。
      冗余升级需要额外的空间来存储固件的备份。所以需要的存储空间更大。但是冗余升级的Bootloader功能更简单,它不需要实现网络功能,仅执行本地固件更新(将程序从备份的位置,拷贝到片内的执行位置),以及上电跳转到用户程序的功能。用户程序除了其他的产品功能外,还要实现网络通信以及固件下载的功能。从云端下载的程序,放在规划好的片上或片外存储器的相应位置。它可以像第二种方式一样,下载不影响正常的程序运行,同时又不需要MCU的flash双bank。这种方式还有一个好处,Bootloader跟网络下载无关,如果不换MCU,应用层的变化都对bootloader没有影响,不需要频繁更新bootloader。如果MCU的存储空间够大,而应用程序又小,也可以将这三部分都放到片上flash中。建议存储空间flash不缺的选择这种冗余升级方式。
      


      最后要说的就是固件更新要注意关键的固件安全。1.如何保证固件不被窃取,对知识产权的保护;2.如何保证下载下来的文件,是真正要下载的文件。保证文件的完整性,以及对程序运行安全的保护。我的想法就是上传到云端的固件最好是加密的,在设备端进行解密升级更新。并且固件内部带自校验,升级过程中要进行验证固件完整性和安全性。在网络通信过程中使用加密的通信协议保证不被别人获取到真正的固件文件。




利用MQTT及云存储实现STM32远程无线升级.pdf (1.42 MB)       


使用特权

评论回复
沙发
x史可法| | 2020-12-20 22:49 | 只看该作者
加密的问题就可以结合第一周的安全知识了

使用特权

评论回复
板凳
正圆椭圆| | 2020-12-20 23:02 | 只看该作者
现在一般flash的空间都是有余的吧 用冗余还行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

119

主题

4601

帖子

27

粉丝