嵌入式企鹅圈原创团队成员黄鑫提供。

  相比NRF52832和CC254X,蓝牙单芯片DA14580在OTA和二次引导上要复杂一些,不仅体现在memory map、引导过程等流程上,而且在固件格式、生成和工具链的操作上也稍显繁琐。之前分享的“固件空中升级(OTA)与固件二次引导的原理和设计”说明了DA14580 OTA的原理和过程,本节我们来看看升级过程中涉及的固件相关的知识。

一、DA14580固件分布

这里主要说明的是,sdk编译链接产生的固件都是hex格式的,能够直接通过JLINK下载到RAM执行,但是通过官方的smartsnippets工具下载到flash时是需要增加固件头部信息,否则会引导失败。

以下是针对flash存储的固件分布,可以看出包括:bootloader、image1、image2和OTA固件分布信息product header。而bootloader、image1、image2也分别包括一个头部和相应的固件程序。

二、固件头部格式

DA14580内置ROM启动,其只会引导并运行位于存储起始区域(0地址)的bootloader程序。

Bootloader头部以0x7050开头,头部内容包括Bootloader的长度;

代表应用的image的头部以0x7051开头,头部内容包括image的长度和固件版本;

代表OTA固件分布信息product header以0x7052开头,头部内容包括image1的文件偏移和image2的文件偏移以及产品版本信息。

也就是说,如果最终产品没有OTA功能,那就只需要一个应用的固件,烧写到bootloader所在的地方即可,当然头部也是必不可少的。

三、工具链

官方的smartsnippets工具在烧写固件时只会自动添加0x7050开头的头部,也可以在该工具上构建product header进行烧写。但对于代表应用的image是需要专门的工具链生成的。

1. Smartsnippets烧写bootloader

选择HEX格式的bootloader,烧写offset偏移是0,擦除erase接着烧写burn,选择“YES”,烧写成功后可以看出flash的固件增加了一个0x7050开始的头部。

2. Smartsnippets烧写product header

3. 官方提供的mkimage工具生成应用image

先生成bin:hex2bin -e bin app.hex

制作image:mkimage single app.bin ble_580_sw_version.h app.img

Smartsnippets烧写image,选择对应的偏移,烧写时选择“NO”。因为固件已经有头部信息,不能再增加引导的头部信息。

      关注微信公众号:嵌入式企鹅圈,获得上百篇物联网技术原创。

蓝牙DA14580开发:固件格式、二次引导和烧写的更多相关文章

  1. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...

  2. 迅为4412开发板Linux设备树的镜像烧写和源码简单优化教程

    1 烧写:   烧写和4412默认镜像的烧写类似,使用fastboot. 先更新uboot,用4412默认uboot更新支持设备树的uboot 用支持设备树的uboot烧写. 进入支持设备树的uboo ...

  3. 烧写ARM开发板系统教程----->uboot 、内核以及文件系统

    一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...

  4. [Micropython]TPYBoardV102 Dfu固件烧写教程

    TPYBoardv10x固件烧写一直是大家比较关心的问题,上次教大家用SWD接口烧写TPYBoard的固件,这次教大家用另一种方式烧写我们TPYBoardv10x的固件,直接用dfu模式烧写固件. 用 ...

  5. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写

      很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-bo ...

  6. Hi3516开发笔记(五):通过HiTools使用网口将uboot、kernel、roofts和userdata按照分区表烧写镜像

    前言   前面生成了uboot,kernel,sample,userdata(我们实际修改了ip的),rootfs,现在需要烧写进入核心板.   使用网口烧写镜像(海思烧写必须占用调试串口) 步骤一: ...

  7. iTOP-4412 开发板镜像的烧写

    镜像就是源代码编译并连接以后生成的可执行文件包,把这些镜像文件烧写到开发板的存储芯片里,开机就可以运行了. 烧写方式有两种,通过TF卡烧写以及使用OTG接口烧写 OTG方式:只能在WIN7 或者XP ...

  8. 迅为IMX6Q PLUS开发板烧写Android6.0系统方法

    平台:迅为IMX6Q PLUS开发板工具:MfgTool2 工具 镜像文件在光盘目录“03 镜像_android 6.0.1 文件系统”下.其中商业级核心板为 2G内存镜像,工业级核心板为 1G 内存 ...

  9. 【分享】4412开发板POP烧写ubuntu出错,如何挂载emmc分区解决方法

    本文转自:http://bbs.topeetboard.com 平台:4412精英版系统:ubuntu系统 按照教程烧写ubuntu文件系统,TF卡和EMMC分区都完成(总之之前的操作试了几遍都是没问 ...

随机推荐

  1. doubango(4)--SIP协议栈传输层的启动

    协议栈的默认传输结构 对于一个刚启动的协议栈来说,它需要有一个传输层,支持若干的传输结点.每一个传输结点对应于一个端口,若采用TCP连接,一个传输结点就针对于一个点到点的连接,这个连接负责sip信令的 ...

  2. node源码详解(五) —— 在main函数之前 —— js和C++的边界,process.binding

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.o ...

  3. Git学习之路(1)-Git简介

    ▓▓▓▓▓▓ 大致介绍 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds ...

  4. (一)Redis在windows下的安装和使用

    1.下载redis服务端,地址:https://github.com/MSOpenTech/redis/releases 包含安装程序和源码. 2.解压<Redis-x64-3.2.100.zi ...

  5. ajax入门之建立XHR对象 (1)

    ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...

  6. IOS网络请求之AFNetWorking 3.x 使用

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...

  7. 数字信号处理MATLAB简单序列

    数字信号处理应用的几个基本序列: 1 单位样本序列 function mainImseq() clc clear disp('生成抽样序列'); y=imseq(,,); %调用样本函数,此时序列下标 ...

  8. BZOJ 1004: [HNOI2008]Cards(群论)

    好吧我就是蒟蒻根本没听说过群论(虽说听叉姐说几万年都不会考) 我也讲不太来,直接戳VFK大神的blog啦 = = http://vfleaking.blog.163.com/blog/static/1 ...

  9. [Kafka] - Kafka Java Consumer实现(一)

    Kafka提供了两种Consumer API,分别是:High Level Consumer API 和 Lower Level Consumer API(Simple Consumer API) H ...

  10. WP8.1应用双击返回键退出程序。

    #region 双击退出程序代码 //双击HardwareButtons.BackPressed: //出现退出提示窗口: //“确定”退出,“取消”返回什么也不做: private async vo ...