产品固件烧写方案

 1、前言

     一成熟的量产的嵌入式产品,软件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。

     因此,在发布固件的时候,会存在BootLoader固件和App固件;此时我们期望是将BootLoader固件和App固件合并成为一个固件,这样在量产时只需烧录一次即可。

2. HEX和bin的区别

    一般而言,是将HEX文件烧入MCU中,其中BIN文件数据烧到单片机的FLASH中,STM32具体地址是0x8000000。

    hex指Intel标准的HEX文件,文件内容都是ASCII编码,HEX文件中同时包含数据和地址信息,所以在烧写或下载HEX文件的时候,不需要用户指定地址。Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)
   HEX基本格式:
<0x3a>
[数据长度1Byte]
[数据地址2Byte]
[数据类型1Byte]
[数据nByte]
[校验1Byte]
<0x0d>
<0x0a>

     二进制文件,一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用.bin作为后缀,但并不意味着所有.bin文件都是虚拟光驱文件。
    BIN文件只有纯粹的数据(代码)信息,并不包含地址,所以烧写BIN时就需要指定烧写地址,一般可以在烧写工具上修改。

很直观的可以看到BIN文件只是HEX文件中的数据区域。

3.合并bootloader app

 1、生成app bootliader的bin文件

  配置keil或其工具生成app bootliader对应的bin文件。

   2.将bootloader填充到固定大小

     一般我都希望将bootloader后面的app烧写到固定位置,但是生成的bootloader大小肯定是变化的,这是后我们需要预设bootloader的最大尺寸,将剩余的位置填充oxff,保证app烧写在固定的flash位置。

   bootloader的bin文件填充分为两部分。

#include "stdafx.h"
#include <stdlib.h>#define  VERSION                "V1.01.161225"int _tmain(int argc, _TCHAR* argv[])
{if (argc < 3){printf("err! argc < 3.\n");return -1;}long   len = (long)strtol(argv[2], NULL, 16);printf("fz append. %s\n",VERSION);printf("file:%s, size:0x%x\n",argv[1],len);FILE	*fp;long	off;long    append = 0;//test file is exist and calculate file size//"..\\test\\aa.bin"if ((fp = fopen(argv[1], "rb"))==NULL){printf("Can not open file\n");return -1;}fseek(fp,0,SEEK_END);off=ftell(fp);fclose(fp);if (off >= len){printf("file size is too large. %d > %d\r", off, len);return -1;}else{append = len - off;}//append data 0xFFif ((fp = fopen(argv[1], "ab+"))==NULL){printf("Can not open file\n");return -1;}fseek(fp,0,SEEK_END);printf("open sucess.append size %d append %d\r\n",off,append);while(append--){fputc('\xff',fp);}fclose(fp); return 0;
}

上面的代码可用Microsoft Visual Studio的IDE编译生成AppendFixSize.exe 。为填充代码,下面的为填充脚本。

@echo off
@AppendFixSize.exe     Boot.bin    0x4000
@echo   append finish
copy /b .\Boot.bin + .\App.bin Firmware.bin 
srec_cat.exe Firmware.bin -Binary -offset 0x8000000 -o Firmware.hex -Intel
del Firmware.bin
@pause

后续将Fireware.hex 烧入MCU中即可

参考文档:

  如何将BootLoader与APP合并成一个固件

  hex文件与bin文件的区别以及如何在keil中生成bin文件_bin文件hex文件-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Mockjs模拟(假数据)接口(axios)

一、什么是MockJs Mock.js官网 Mock.wiki.git mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 二、安装mockjs npm install mockjs 三、 MockJs使用 简单使用&#xff1a; // 使用…

JFrog----常见的开源协议以及应用注意点

文章目录 1. MIT 许可证2. GPL&#xff08;通用公共许可证&#xff09;3. LGPL&#xff08;较宽松的通用公共许可证&#xff09;4. Apache 许可证 2.05. BSD 许可证开源协议的选择和注意点结论 开源软件近年来在软件开发中变得越来越流行。使用开源软件可以节省时间和资源&…

Unity优化——加速物理引擎1

大家好&#xff0c;这里是七七&#xff0c;今天开始更新物理引擎相关的优化部分了&#xff0c;本文介绍的是物理引擎内部工作情况。 Unity技术有两种不同的物理引擎&#xff1a;用于3D物理的Nvidia的PhysX和用于2D物理的开源项目Box2D。然而&#xff0c;Unity对它们的实现是高…

Nginx rewrite 参数

目录 常用的Nginx 正则表达式 rewrite 和 location的区别 location location 大致分三类&#xff1a; location 常用的匹配规则&#xff1a; location 优先级&#xff1a; rewrite rewrite跳转实现 rewrite 执行顺序如下 语法格式 flag标记说明 rewrite实际操作 基…

【虹科干货】使用Netropy广域网模拟器测试简化SD-WAN测试

文章速览&#xff1a; 为什么需要WAN模拟器&#xff1f;什么是WAN模拟器&#xff1f;用WAN模拟器测试SD-WANSD-WAN损伤测试 现如今大家都在使用SD-WAN产品节省网络成本&#xff0c;但是也面临着一些复杂的算发问题&#xff0c;那么如何简化SD-WAN系统的测试和评估&#xff1f;…

Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

一、前言 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版&#xff0c;使用离线安装方式部署。…

总结6种@Transactional注解的失效场景

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 引言 昨天有粉丝咨询了…

超卓航科引领冷喷涂增材制造革新,推动先进核反应堆发展

近日&#xff0c;超卓航科凭借其卓越的冷喷涂增材制造技术&#xff0c;成为推动核能领域创新的重要力量。该公司利用冷喷涂工程技术&#xff0c;或为核反应堆的制造和修复开辟了全新的道路。 冷喷涂技术是一种颇具前景的固态粉末沉积方法&#xff0c;可用于涂层制造、增材制造和…

GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

目录 一、前期准备 二、调试详细步骤 1.VS中新建项目 2.复制源码至项目文件夹 3.将源码中“.c”文件和“.h”文件添加至项目指定位置 4.修改项目属性&#xff1a; (1)【 配置属性 -> C/C ->预处理器 ->预处理器定义】添加如下 (2)【配置属性->链接器->调…

《C++ Primer》第12章 动态内存(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 12.1.5 unique_ptr&#xff08;P417&#xff09; unique “拥有”它所指向的对象&#xff0c;某个时刻只能有一个 unique_ptr 指向一个给定对象。 当我们定义一个 unique_ptr 时&#xff0c;需要将其绑定到…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在&#xff0c;那么地图视角是如何让实现的呢&#xff1f; 这一期教大家制作一个简易的小地图。 &#x1f496;点关注&#xff0c;不迷路。 老样子&#xff0c;我们还…

Leetcode 131 分割回文串

题意理解&#xff1a; 分割回文子串&#xff0c;可以看作是划分连续的字幕组合——所以也可以用回溯的方法来解决 每个位置选与不选——该位置切割|不切割 对于每一段子串——>判断是否是回文串&#xff1a; 是&#xff1a; 继续切割 不是&#xff1a; 剪枝 解题方法…

Ubuntu Destktop 22.04 设置 ssh 超时时间

Ubuntu Destktop 22.04 使用 ssh 连接服务器时&#xff0c;发现一段时间不操作就会自动断开连接&#xff0c;解决方法如下&#xff1a; 打开 /etc/ssh/ssh_config 文件&#xff1a; sudo vim /etc/ssh/ssh_config在文件最后添加&#xff1a; # ssh 客户端会每隔 30 秒发送一…

在线免费制作各种证件照,有需要的收藏

现在很多场合都需要一寸证件照&#xff0c;比如办理身份证、出国签证等。以往&#xff0c;我们都需要到专门的照相馆拍摄&#xff0c;但是现在&#xff0c;有了随时照微信小程序&#xff08;抖音和支付搜索亿鸣证件照哦&#xff09;&#xff0c;你可以足不出户就能够制作一寸证…

MySQL InnoDB Replication部署方案与实践

1. 概述 MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品&#xff0c;用来帮助用户快速部署和管理主从复制&#xff0c;在数据库层仍然使用的是主从复制技术。 ReplicaSet 主要包含三个组件&#xff1a;MySQL Router、MySQL Server 以及 MySQL Shell 高级客户…

12 位多通道国产芯片ACM32F403/F433 系列,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理&#xff0c;支持单精度FPU处理浮点数据&#xff0c;同时还支持Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的…

PyTorch张量:内存布局

你可能对 torch 上的某些函数感到困惑&#xff0c;它们执行相同的操作但名称不同。 例如&#xff1a; reshape()、view()、permute()、transpose() 等。 这些函数的做法真的不同吗&#xff1f; 不&#xff01; 但为了理解它&#xff0c;我们首先需要了解一下张量在 pytorch 中…

1 CPU实现的基本框图

汇编语言 && 指令格式 CPU设计的框架&#xff1a;三级流水线 ROM存放指令和数据&#xff0c;大端模式&小端模式&#xff0c;地址对齐 取指 译码&#xff1a; 执行&#xff1a; 汇编语言 & 指令格式 流水线实现工作机制 模块功能划分&接口信号 参考…

strict-origin-when-cross-origin

严格限制同源策略 &#xff08;1&#xff09;允许服务器的同源IP地址访问 &#xff08;2&#xff09;允许Referer --- 后端服务器要配置

linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行

sed系列文章 linux常用命令(9)&#xff1a;sed命令(编辑/替换/删除文本)linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行 文章目录 sed系列文章一、sed删除某一行内容/删除最后一行二、sed删除多行三、扩展3.1、-i命令 本文主要讲解如何删除txt文件中的某一行内…