藍牙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.binble_580_sw_version.h app.img

Smartsnippets燒寫image,選擇對應的偏移,燒寫時選擇“NO”。因爲固件已經有頭部信息,不能再增加引導的頭部信息。


關注微信公衆號:嵌入式企鵝圈,獲得上百篇物聯網原創技術分享!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章