zoukankan      html  css  js  c++  java
  • 蓝牙DA14580开发:固件格式、二次引导和烧写

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

      相比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”。因为固件已经有头部信息,不能再增加引导的头部信息。

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

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/6555468.html
Copyright © 2011-2022 走看看