日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

nRF51822之BootLoader

發布時間:2025/3/21 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nRF51822之BootLoader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一)nRF51822程序加載順序

1)SoftDevice加載;
2)SoftDevice初始化藍牙協議棧;
3)SoftDevice檢查0x10001014處是否保存有有效的BootLoader地址,?如果不是跳轉到0x14000處的APP執行,流程結束.
4)SoftDevice跳轉到BootLoader
5)BootLoader進行他的業務處理工作;
6)BootLoader跳轉到0x14000處的APP執行,流程結束.

二)實現步驟

1)修改SoftDivice.hex
看NRF_UICR_Type結構,有一個BOOTLOADERADDR字段,??這個就是指向的BootLoader地址

typedef struct {/*!< UICR Structure*/__IO uint32_t CLENR0; /*!< Length of code region 0.*/__IO uint32_t RBPCONF; /*!< Readback protection configuration.*/__IO uint32_t XTALFREQ; /*!< Reset value for CLOCK XTALFREQ register.*/__I uint32_t RESERVED0;__I uint32_t FWID; /*!< Firmware ID.*/__IO uint32_t BOOTLOADERADDR;/*!< Bootloader start address.*/ } NRF_UICR_Type;

默認情況下,SoftDivice.hex沒有指定BootLoader地址;
我們需要在SoftDivice.hex中插入一行

:0410140000300100A7 參考HEX文件說明

這里修改0x10001014地址的數據為"00300100"就是0x13000,?這個地址根據BootLoader的實際位置修改.

2)編寫BootLoader
BootLoader本身是一個普通的程序,只是在跳轉到APP執行時需要特殊處理

static void interrupts_disable(void) {uint32_t interrupt_setting_mask = NVIC->ISER[0];for (uint8_t irq=0; irq < 32; irq++) {if (interrupt_setting_mask & (1 << irq)) {NVIC_DisableIRQ((IRQn_Type) irq);}} }__asm void StartApplication(uint32_t start_addr){LDR R2, [R0] ; Get App MSP.MSR MSP, R2 ; Set the main stack pointer to the applications MSP.LDR R3, [R0, #0x00000004] ; Get application reset vector address.BX R3 ; No return - stack code is now activated only through SVC and plain interrupts.ALIGN }/*** 跳轉到APP執行*/ static void bootloader_app_start(uint32_t app_addr) {sd_softdevice_disable();interrupts_disable();sd_softdevice_forward_to_application();StartApplication(app_addr); }

把BootLoader寫入我們上面定義的地址?0x13000

3)編寫APP
APP跟沒有BootLoader時是一樣的,依然放在?0x14000?處

nRF51822之BootLoader

總結

以上是生活随笔為你收集整理的nRF51822之BootLoader的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。