嵌入式企鵝圈原創團隊成員黃鑫提供。微信
相比NRF52832和CC254X,藍牙單芯片DA14580在OTA和二次引導上要複雜一些,不只體如今memory map、引導過程等流程上,並且在固件格式、生成和工具鏈的操做上也稍顯繁瑣。以前分享的「固件空中升級(OTA)與固件二次引導的原理和設計」說明了DA14580 OTA的原理和過程,本節咱們來看看升級過程當中涉及的固件相關的知識。app
1、DA14580固件分佈工具
這裏主要說明的是,sdk編譯連接產生的固件都是hex格式的,可以直接經過JLINK下載到RAM執行,可是經過官方的smartsnippets工具下載到flash時是須要增長固件頭部信息,不然會引導失敗。設計
如下是針對flash存儲的固件分佈,能夠看出包括:bootloader、image一、image2和OTA固件分佈信息product header。而bootloader、image一、image2也分別包括一個頭部和相應的固件程序。3d
2、固件頭部格式blog
DA14580內置ROM啓動,其只會引導並運行位於存儲起始區域(0地址)的bootloader程序。ip
Bootloader頭部以0x7050開頭,頭部內容包括Bootloader的長度;flash
表明應用的image的頭部以0x7051開頭,頭部內容包括image的長度和固件版本;產品
表明OTA固件分佈信息product header以0x7052開頭,頭部內容包括image1的文件偏移和image2的文件偏移以及產品版本信息。io
也就是說,若是最終產品沒有OTA功能,那就只須要一個應用的固件,燒寫到bootloader所在的地方便可,固然頭部也是必不可少的。
3、工具鏈
官方的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」。由於固件已經有頭部信息,不能再增長引導的頭部信息。