单片机OTA升级中Bootloader怎么判断APP有没有问题?

原创 无际单片机编程 2025-03-06 08:01

关注公众号,回复“入门资料”获取单片机入门到高级开挂教程

 开发板带你入门,我们带你飞

文 | 无际(微信:2777492857)

全文约1772字,阅读大约需要 分钟

没开发过OTA的工程师,职业生涯是不完整的。因为它能让设备远程更新功能,太方便了,产品有了这个功能,再也不会跟硬件工程师一起背锅了。

          

 

不过,新手玩OTA,搞不好,也会翻车,比如下载过程中网络掉了,新固件不完整,设备可能直接"变砖"了。

          

 

今天就教你,怎么在Bootloader加靠谱的验证机制,这样哪怕网络断了,数据错了,都不会显得这么狼狈。

          

 

在单片机OTA(空中升级)中,Bootloader是个很重要的角色,它得确保新下载的固件(也就是APP)没问题,才能放心加载运行。

          

 

如果APP有毛病,比如下载不全、数据坏了或者被篡改,设备可能会罢工甚至出大乱子。

          

 

所以,Bootloader得有一套办法来检查APP到底靠不靠谱。

          

 

下面我就用尽量通俗的语言,讲讲Bootloader常见的判断方法,顺便加点代码示例帮你更好理解。

          

 

一、为什么要检查APP有没有问题?

简单来说,Bootloader检查APP是为了避免这些麻烦:

数据坏了:下载时信号不好或者存储器出问题,APP内容可能出错。

没下全:网络断了一会儿,APP可能只下了一半。

被人动了手脚:固件被恶意改过,可能会恶意破坏/控制设备。    

版本不对:新APP跟硬件或者Bootloader不搭,跑不起来。

放错地方了:APP没存到该存的地方,Bootloader找不到。

          

 

所以,Bootloader相当于是个"质检员",把APP好好检查一遍。

          

 

          

 

二、Bootloader怎么检查APP?

下面是Bootloader常用的几种方法,咱一个一个来看。

          

 

1. 用校验和或者CRC查数据的“身份证”

啥意思:算个“校验值”跟APP自带的值比对,看数据有没有丢包或者坏掉。

咋做:APP里带个校验值,Bootloader收到后自己再算一遍,比对一下。

代码示例


这是无际单片机项目6的CRC16算法例子。

我们在服务器下载APP固件数据的时候,会把数据分包,比如一帧数据是200-255个字节,每帧数据都会进行CRC16校验。    

CRC16好处:简单,算得快,单片机也能轻松搞定。

缺点:只能查数据坏没坏,挡不住故意篡改。

          

 

          

 

2. 用数字签名验“出身”

啥意思:就像查身份证真假,得确认APP是正宗的,没被改过。

咋做:发送方用私钥给APP“盖章”,Bootloader用公钥验这个章。

代码示例(简单模拟一下):

#define SIGN_ADDR (APP_START + APP_SIZE + 4)  // 签名放的位置uint8_t signature[64];memcpy(signature, (uint8_t *)SIGN_ADDR, 64);  // 取出签名if (!verify_signature(app_data, APP_SIZE, signature)) {  // 假设有验证函数    // 签名不对,可能是假货!    printf("签名挂了,APP不靠谱!\n");}

好处:安全性高,篡改不了。

缺点:算起来费劲,单片机可能有点吃力。

          

 

3. 看版本号对不对

啥意思:检查APP的版本,确保跟硬件和Bootloader能搭上。

咋做:从APP里读出版本号,比对一下。

代码示例

#define MIN_VERSION 0x0200  // 最低版本要求uint16_t app_version = *(uint16_t *)(APP_START + 8);  // 版本号位置if (app_version < MIN_VERSION) {    // 版本太老,不行!    printf("APP版本太低,跑不了!\n");}

好处:简单,能避免版本不匹配。

缺点:只管版本,数据坏不坏它不管。

          

 

          

 

4. 检查APP放的位置对不对

啥意思:确保APP在正确的存储区里。

咋做:看看地址和大小有没有跑偏。

代码示例

#define FLASH_BASE 0x08000000#define FLASH_END  0x08080000if (APP_START < FLASH_BASE || (APP_START + APP_SIZE) > FLASH_END) {    // 位置不对,APP有问题!    printf("APP放错地方了!\n");}


好处:快,能马上发现存错了。

缺点:只管位置,不管内容。

          

 

5. 用个“通关密码”

啥意思:APP里有个特定标记,证明它没问题。

咋做:Bootloader下载完后写个标记,启动时检查。

代码示例

#define FLAG_ADDR 0x08007FFC#define FLAG_VALUE 0xA5A5uint32_t flag = *(uint32_t *)FLAG_ADDR;if (flag != FLAG_VALUE) {    // 没通关密码,APP不靠谱!    printf("标记不对,APP有问题!\n");}

好处:简单,检查快。

缺点:容易被仿造,安全性不高。

          

 

三、完整的检查流程    

一般来说,Bootloader不会只用一种方法,而是把几种组合起来,比如:

1.先看看位置对不对。

2.再算算CRC,确认数据没坏。

3.用签名验一下真假。

4.检查版本能不能用。

5.最后看标记对不对。

          

 

每一步都得过关,APP才能算“合格”,不然Bootloader就得用老固件或者停下来。

          

 

四、单片机资源少咋办?

单片机不像电脑那么强,资源有限,所以得有点小聪明:

用硬件帮忙:有的单片机有CRC模块,能省不少力。

分块检查:别一次算太多,分成小块慢慢验。

留条后路:可以划分2个内存区域,分别存老版本和新版本的APP,万一新APP有问题,能退回老版本。

          

 

五、总结一下

Bootloader要判断APP靠不靠谱,常用的招数有校验和/CRC、数字签名、版本检查、位置检查和标记验证。这些方法各有各的强项,搭配起来用,能确保APP没毛病,既安全又好用。希望这些例子和解释能让你明白咋回事儿。

 

end



下面是更多无际原创个人成长经历、行业经验、技术干货

1.电子工程师是怎样的成长之路?10年5000字总结

2.如何快速看懂别人的代码和思维

3.单片机开发项目全局变量太多怎么管理?

4.C语言开发单片机为什么大多数都采用全局变量的形式

5.单片机怎么实现模块化编程?实用程度让人发指!

6.c语言回调函数的使用及实际作用详解

7.手把手教你c语言队列实现代码,通俗易懂超详细!

8.c语言指针用法详解,通俗易懂超详细!


          

 

    

无际单片机编程 单片机编程、全栈孵化。
评论 (0)
  • 递交招股书近一年后,曹操出行 IPO 进程终于迎来关键节点。从 2024 年 4 月首次递表,到 2025 年 4 月顺利通过中国证监会境外发行上市备案,并迅速更新招股书。而通过上市备案也标志着其赴港IPO进程进入实质性推进阶段,曹操出行最快有望于2025年内完成港股上市,成为李书福商业版图中又一关键落子。行路至此,曹操出行面临的挑战依然不容忽视。当下的网约车赛道,早已不是当年群雄逐鹿的草莽时代,市场渐趋饱和,竞争近乎白热化。曹操出行此时冲刺上市,既是背水一战,也是谋篇布局。其招股书中披露的资金
    用户1742991715177 2025-05-10 21:18 57浏览
  • 【拆解】+CamFi卡菲单反无线传输器拆解 对于单反爱好者,想要通过远程控制自拍怎么办呢。一个远程连接,远程控制相机拍摄的工具再合适不过了。今天给大伙介绍的是CamFi卡菲单反无线传输器。 CamFi 是专为数码单反相机打造的无线传输控制器,自带的 WiFi 功能(无需手机流量),不但可通过手机、平板、电脑等设备远程连接操作单反相机进行拍摄,而且还可实时传输相机拍摄的照片到 iPad 和电视等大屏设备进行查看和分享。 CamFi 支持大部分佳能和尼康单反相机,内置可充电锂离子电池,无需相机供电。
    zhusx123 2025-05-11 14:14 89浏览
  • ‌磁光克尔效应(Magneto-Optic Kerr Effect, MOKE)‌ 是指当线偏振光入射到磁性材料表面并反射后,其偏振状态(偏振面旋转角度和椭偏率)因材料的磁化强度或方向发生改变的现象。具体表现为:1、‌偏振面旋转‌:反射光的偏振方向相对于入射光发生偏转(克尔旋转角 θK)。2、‌椭偏率变化‌:反射光由线偏振变为椭圆偏振(克尔椭偏率 εK)。这一效应直接关联材料的磁化状态,是表征磁性材料(如铁磁体、反铁磁体)磁学性质的重要非接触式光学探测手段,广泛用于
    锦正茂科技 2025-05-12 11:02 88浏览
  •   基于 2025 年行业权威性与时效性,以下梳理国内知名软件定制开发企业,涵盖综合型、垂直领域及特色技术服务商:   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转型、新能源软件、光伏软件、汽车软件,ERP,系统二次开发,CRM等领域有很多成功案例。   五木恒润科技有限公司:是一家专业的部队信
    华盛恒辉l58ll334744 2025-05-12 16:13 69浏览
  •   定制软件开发公司推荐清单   在企业数字化转型加速的2025年,定制软件开发需求愈发多元复杂。不同行业、技术偏好与服务模式的企业,对开发公司的要求大相径庭。以下从技术赛道、服务模式及行业场景出发,为您提供适配的定制软件开发公司推荐及选择建议。   华盛恒辉科技有限公司:是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。在部队政企开发、建设到运营推广领域拥有丰富经验,在教育,工业,医疗,APP,管理,商城,人工智能,部队软件、工业软件、数字化转
    华盛恒辉l58ll334744 2025-05-12 15:55 96浏览
  • 体积大小:14*11*2.6CM,电气参数:输入100V-240V/10A,输出16V24A。PCB 正面如下图。PCB 背面如下图。根据实际功能可以将PCB分成几部分:EMI滤波,PFC电路,LLC电路。EMI滤波区域,两级共模电感,LN各用了保险丝加压敏电阻,继电器(HF32FV-G)用来切除NTC的,为了提高效率点,如下图。PFC电路区域,如下图。LLC电路区域,如下图。详细分析一下该电源用的主要IC还有功率器件。AC侧采用了两颗整流桥进行并联,器件增加电流应力,如下图。共模电感都有放电针
    liweicheng 2025-05-10 20:03 39浏览
  • 在印度与巴基斯坦的军事对峙情境下,歼10C的出色表现如同一颗投入平静湖面的巨石,激起层层涟漪,深刻印证了“质量大于数量”这一铁律。军事领域,技术优势就是决定胜负的关键钥匙。歼10C凭借先进的航电系统、强大的武器挂载能力以及卓越的机动性能,在战场上大放异彩。它能够精准捕捉目标,迅速发动攻击,以一敌多却毫不逊色。与之形成鲜明对比的是,单纯依靠数量堆砌的军事力量,在面对先进技术装备时,往往显得力不从心。这一现象绝非局限于军事范畴,在当今社会的各个领域,“质量大于数量”都已成为不可逆转的趋势。在科技行业
    curton 2025-05-11 19:09 175浏览
  • 【拆解】+自动喷香机拆解 家里之前买了从PDD买了一个小型自动喷香机放在厕所里。来增加家里的温馨感,这东西看着确实小巧,精致。可是这东西吧,耗电就是快,没过几天就没电了。今个就让我拆开看看什么在捣鬼。如下是产品的实物和宣传图: 由于螺丝孔太小和限位很深。对于我的螺丝刀套装没用。只能使用那种螺丝刀细头,同时又长的小螺丝刀进行拆解 拧下三颗螺丝钉,用一字螺丝刀撬开外壳,内部结构就呈现在眼前。 内部构造相当简单,部件没多少。就是锂电池供电,通过MCU实现按键控制,段码屏控制,LE
    zhusx123 2025-05-10 19:55 53浏览
  • 在 AI 浪潮席卷下,厨电行业正经历着深刻变革。AWE 2025期间,万得厨对外首次发布了wan AiOS 1.0组织体超智能系统——通过AI技术能够帮助全球家庭实现从健康检测、膳食推荐,到食材即时配送,再到一步烹饪、营养总结的个性化健康膳食管理。这一创新之举并非偶然的个案,而是整个厨电行业大步迈向智能化、数字化转型浪潮的一个关键注脚,折射出全行业对 AI 赋能的热切渴求。前有标兵后有追兵,万得厨面临着高昂的研发成本与技术迭代压力,稍有懈怠便可能被后来者赶
    用户1742991715177 2025-05-11 22:44 70浏览
  •         信创产业含义的“信息技术应用创新”一词,最早公开信息见于2019年3月26日,在江苏南京召开的信息技术应用创新研讨会。本次大会主办单位为江苏省工业和信息化厅和中国电子工业标准化技术协会安全可靠工作委员会。        2019年5月16日,美国将华为列入实体清单,在未获得美国商务部许可的情况下,美国企业将无法向华为供应产品。       2019年6
    天涯书生 2025-05-11 10:41 125浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦