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

  相比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. springmvc java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z

    在hibernate spring springMVC整合的时候出现下面的情况: WARNING: Exception encountered during context initializatio ...

  2. 为什么python适合写爬虫?(python到底有啥好的?!)

    我用c#,java都写过爬虫.区别不大,原理就是利用好正则表达式.只不过是平台问题.后来了解到很多爬虫都是用python写的.因为目前对python并不熟,所以也不知道这是为什么.百度了下结果: 1) ...

  3. 关于在VI中查看BIN文件二进制值不对的问题

    通常,我们在vim中,可以使用命令 %!xxd 来查看文件对应的二进制值.但是最近发生了一个事情,查看到的BIN文件二进制值和直接用hexdump打印出来的不一样. 经过检查定位,发现是因为vimrc ...

  4. CodeForces 722B

    B. Verse Pattern time limit per test:1 second memory limit per test:256 megabytes input:standard inp ...

  5. HDU2063(二分图最大匹配)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. 模拟java的split函数,分割字符串,类似于java的split方法

    /*自定义oracle的分割函数*//*定义一个type,用户接收返回的数据集合类型*/create or replace type splitType as table of varchar2(40 ...

  7. 谈谈getElementsByClassName()

    HTML5中新增的一个方法getElementsByClassName(),但是并非所有浏览器有支持 因此我们构造一个方法兼容这个方法 <script type="text/javas ...

  8. CSS3知识点整理(二)----CSS3选择器

    总结各种CSS3选择器的介绍及具体语法 (一)属性选择器 在CSS2中引入了一些属性选择器,而CSS3在CSS2的基础上对属性选择器进行了扩展,新增了3个属性选择器,使得属性选择器有了通配符的概念,这 ...

  9. php解析

    vim /usr/local/apache/conf/httpd.conf     ##修改apache的网页配置文件  →  解析php文件 /usr/local/apache/bin/apache ...

  10. Extjs grid 组件

    表格面板类Ext.grid.Panel 重要的配置参数 columns : Array 列模式(Ext.grid.column.Columnxtype: gridcolumn) 重要的配置参数 tex ...