一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

nRF5 SDK軟件架構及softdevice工作原理

jf_14701710 ? 來源:jf_14701710 ? 作者:jf_14701710 ? 2025-06-23 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文將介紹Nordic nRF5 SDK軟件架構以及softdevice工作原理,以加深大家對Nordic產(chǎn)品開發(fā)的理解,這樣開發(fā)過程中碰到問題時,大家也知道如何去調試。

如果你剛開始接觸nRF5 SDK,建議先看一下這篇文章“Nordic nRF5 SDK和softdevice介紹”,以建立Nordic nRF5 SDK的一些基本知識。

首先說明一下,Nordic nRF5系列產(chǎn)品都是使用Flash存儲器的,確切說,是嵌入式可執(zhí)行代碼的Flash存儲器,也就是說,代碼是可以直接在上面運行的,這個跟很多其他BLE廠商是不一樣的(他們使用的是nand Flash,代碼是不能直接在nand Flash中運行的,必須先裝載到RAM中才能跑,所以你會發(fā)現(xiàn)這些廠商的RAM都非常大)。Nordic Flash是帶cache機制的,以保證大部分代碼執(zhí)行速度可以達到64MHz,在cache失敗的時候,等待周期也只有1個cycle,可以說Flash的執(zhí)行速度和效率都是非常不錯的。另外,Nordic芯片是純Flash產(chǎn)品,里面沒有其他NVM,所有非易失性數(shù)據(jù)都放在Flash中,包括藍牙協(xié)議棧,這也是為什么Nordic藍牙協(xié)議棧也可以OTA的根本原因所在。

Nordic nRF5 SDK將芯片的存儲器劃分成如下格局:

wKgZO2hYxSWAJt2sAAFiMpwkKk0969.png

Flash結構圖 RAM結構圖

從上圖可知,F(xiàn)lash存儲器最下面放的是softdevice(softdevice就是藍牙協(xié)議棧,圖中的MBR也屬于softdevice的一部分),中間是application,最上面是bootloader(可選,只有需要OTA的時候,才需要下載bootloader)。這里需要特別指出的是,softdevice是以二進制形式提供給大家的,它占據(jù)了Flash的一塊固定空間,起始地址為0,結束地址為APP_CODE_BASE。softdevice同時占用了RAM的一塊固定空間,起始地址為0x20000000,結束地址為APP_RAM_BASE。Softdevice占用的Flash空間是固定不變的,運行時不可調節(jié),也就是說APP_CODE_BASE是一個固定值,而softdevice占用的RAM空間是動態(tài)可調的,跟softdevice配置和藍牙服務的多少有直接關聯(lián),所以APP_RAM_BASE一定要根據(jù)應用的實際情況進行調整。

這里說明一下, Softdevice不是以庫的形式提供給大家,而是以二進制文件(hex文件)的形式提供給大家,這種方式可以帶來很多好處。首先二進制形式可以保證藍牙BQB認證的版本和發(fā)布給客戶的版本一模一樣(因為庫形式的版本每次編譯都會產(chǎn)生少許差異?。?。其次softdevice不需要跟你的應用一起編譯或者鏈接,大大節(jié)省調試時間,更主要的是,Softdevice運行在固定的Flash空間中,使用固定的RAM空間,從而與你的應用完全隔離開,實現(xiàn)了真正的模塊分離,從而出現(xiàn)問題時,可以迅速定位是協(xié)議棧的問題還是應用的問題。再次二進制形式的 Softdevice開啟了保護機制,應用代碼是不能對其進行訪問的,以保證Softdevice的安全性,防止應用代碼誤訪問或者誤擦除某些softdevice區(qū)域。最后這種多bin形式使得OTA變得非常靈活,你可以只OTA應用,也可以OTA協(xié)議棧和bootloader,或者三者同時OTA。

上面是站在芯片存儲器角度來看nRF5 SDK的結構劃分。如果站在軟件架構角度,nRF5 SDK可以劃分成如下結構圖:

wKgZPGhYxSWAJqMoAABz86BryhI337.png

由上圖可知,最下面是芯片本身,然后是ARM公司的CMSIS庫,再往上就是協(xié)議棧softdevice和設備驅動,最后就是application和標準的藍牙service了。softdevice是以二進制文件形式提供給大家的,除此之外,其他所有的SDK代碼都是開源的,以方便大家開發(fā)。應用程序,包括SDK代碼,都是通過softdevice API來與softdevice進行交互的,所有softdevice API都是以sd_打頭的,比如:

sd_softdevice_enable(…);

sd_ble_gap_adv_start(…);

sd_flash_write(…);

sd_ppi_channel_assign(…);

Softdevice API有兩種類型:

與BLE協(xié)議有關的API,比如sd_ble_gap_connect(),sd_ble_gatts_hvx()等。

外設操作API,比如sd_flash_write(),sd_power_gpregret_set()等。由于softdevice會使用到某些外設,應用程序也需要訪問這些外設時,不能通過普通的外設驅動API去訪問,必須通過softdevice API去訪問。

如前所述,softdevice是以二進制文件形式提供給大家的,那么應用是如何做到可以成功調用softdevice API的?其實,softdevice是通過SVC中斷和軟中斷來實現(xiàn)與應用程序交互的。每一個softdevice API對應一個SVC異常號(softdevice API是非阻塞的),也就是說,每當應用程序調用softdevice API,其實是產(chǎn)生一個SVC異常,然后進入到softdevice協(xié)議棧,由softdevice的SVC handler進行相應處理。示例代碼如下所示:

wKgZO2hYxSaALgLwAADAj_7QTpE611.png

Softdevice API調用流程如下所示:

wKgZPGhYxSeAG11_AAEzD4gFasc956.png

每當softdevice完成相關重要操作,都會以事件形式通知應用程序的,比如與手機連接成功,softdevice就會把BLE_GAP_EVT_CONNECTED事件告知應用程序,那softdevice是如何把相關事件告知給應用程序的?這個是通過軟中斷來實現(xiàn)的。每當softdevice完成相關操作,就會把對應的事件放入一個隊列中,然后觸發(fā)一個軟中斷,以重新回到應用程序環(huán)境中,應用程序在相關軟中斷handler中查詢該隊列,一旦發(fā)現(xiàn)有事件在里面,就回調相關函數(shù),比如ble_evt_handler,從而達到通知應用程序相關事件的目的。事件通知流程如下所示:

wKgZO2hYxSiAGYgOAAEt15-FhBc203.png

為了達到各個軟件模塊松耦合的目的,每個軟件模塊,比如廣播模塊,可以單獨注冊自己的BLE事件回調處理函數(shù),然后在自己的事件回調處理函數(shù)里面只處理跟本模塊有關的事件,與本模塊無關的事件不進行處理而直接返回。這里需要注意兩點:一雖然每個BLE事件回調處理函數(shù)只處理跟本模塊有關的事件,但是它是可以捕獲所有BLE事件的,你可以讓整個應用程序只有一個BLE事件回調處理函數(shù),但這樣會讓各個模塊緊密地耦合在一起,因此Nordic SDK沒有這么做,尤其是SDK14以后,各個模塊都自己注冊自己的藍牙事件回調處理函數(shù),完全跟用戶代碼切割開,同樣如果用戶代碼需要捕獲BLE事件的話,只需注冊自己的BLE事件回調處理函數(shù)即可。二BLE事件是異步的,所以有時BLE事件回調處理函數(shù)會同時收到多個BLE事件,也就是BLE事件回調處理函數(shù)有可能在很短的時間內被調用多次(BLE事件回調處理函數(shù)每次只處理一個事件case,然后返回,所以短時間內會被調用多次),這個在開發(fā)的時候需要注意一下。

從上面nRF5 SDK軟件架構的講解過程中,我們可以看到,當我們開發(fā)Nordic平臺的BLE應用時,主要需要做兩件事:

第1件事:初始化。為了簡化初始化工作,Nordic SDK所有模塊初始化時,只需要將相應API輸入結構體參數(shù)清0即可完成初始化工作,也就是說,只要你保證初始化參數(shù)為0,藍牙協(xié)議棧就可以工作起來,這對很多Nordic初學者來說,大大減輕了開發(fā)工作量。

第2件事:寫藍牙事件回調處理函數(shù)。一般來說,你的應用邏輯都是放在藍牙事件回調處理函數(shù)中,所以寫好回調處理函數(shù)代碼,你的開發(fā)工作就完成了大半了。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • nRF5 SDK
    +關注

    關注

    0

    文章

    3

    瀏覽量

    2091
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Nordic Semiconductor批量生產(chǎn)nRF52840 SoC可全面支持藍牙5以及藍牙Mesh和Thread,為市場帶來量產(chǎn)級的最先進多協(xié)議無線

    高端nRF52840 SoC結合Nordic最新的nRF5 SDK和S140 協(xié)議棧(RF協(xié)議棧),使開發(fā)人員充分可以利用藍牙5的性能優(yōu)勢。nRF
    的頭像 發(fā)表于 03-28 12:28 ?9237次閱讀

    nRF Connect SDK(NCS)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    編碼如何解讀?NCS可不可以進行單bank升級?可不可以把一個nRF5 SDK應用升級到NCS應用?MCUboot拷貝操作中的swap和overwrite有什么區(qū)別?為什么說MCUboot升級永遠都不
    的頭像 發(fā)表于 05-09 14:14 ?1796次閱讀
    <b class='flag-5'>nRF</b> Connect <b class='flag-5'>SDK</b>(NCS)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    如何調試nRF5 SDK

    本文將講述Nordic nRF5 SDK的主要調試手段,以幫助大家快速定位問題,并解決問題。一般來說,你可以通過打log方式,IDE的debug模式,SDK自帶的app_error_check函數(shù)
    發(fā)表于 04-26 23:13

    NRF51822試用體驗】環(huán)境搭建與 Blink_example

    MDK---用于寫代碼咯。2、nrf51_sdk_v5_2_0_39364.msi這個是官方的sdk安裝包,安裝路徑默認在:C:\Program Files (x86)\Keil\ARM\Device
    發(fā)表于 06-10 14:04

    nRF5芯片外設GPIO和GPIOTE介紹

    ,別的IO產(chǎn)生的port event就會被忽略。為此,在處理port event中斷的時候,nRF5 SDK app_button模塊將每個port event的極性設為toggle,也就是每進入一次
    發(fā)表于 02-22 16:38

    nRF5 SDK軟件架構softdevice工作原理

    本文將介紹Nordic nRF5 SDK軟件架構以及softdevice工作原理,以加深大家對N
    發(fā)表于 03-07 11:40

    nRF51822如何開發(fā)

    。S110_SoftDevice_Specification_v1.2.pdf (2.04 MB )nrf51_sdk_v5_2_0_39364.msi (26.39 MB )s110_nrf51822_6.0.0.zip (2
    發(fā)表于 05-21 04:35

    nrf52840 藍牙5.0 動能世紀優(yōu)勢供應

    的Nordic nRF5軟件開發(fā)套件(SDK),這是一款支持nRF52840 SoC的完整外設驅動程序的生產(chǎn)級開發(fā)工具。此外,nRF5284
    發(fā)表于 12-30 15:26

    使用RTT-STUDIO開發(fā)?Nordic nRF5x系列MCU說明

    的,sTm32的架構架構如有相關的北歐開發(fā)板,歡迎添加北歐的芯片的bsp。Nordic nRF5x系列BSP目前支持的情況如下:主要支持功能支持官方softdevice的示例:ble_app_uart
    發(fā)表于 07-25 13:00

    怎么解決studio編譯nrf52832 bsp示例程序啟動softdevice錯誤的問題呢?

    /../../../../arm-none-eabi/bin/ld.exe: ./packages/nrf5x_sdk-v16.1.0/components/softdevice/common/nrf_sdh.o:D:\\SJ
    發(fā)表于 01-10 16:56

    怎么解決studio編譯nrf52832 bsp示例程序啟動softdevice錯誤的問題呢?

    /../../../../arm-none-eabi/bin/ld.exe: ./packages/nrf5x_sdk-v16.1.0/components/softdevice/common/nrf_sdh.o:D:\\SJ
    發(fā)表于 01-10 16:56

    Nordic Semiconductor最新nRF5 SDK推出安全的簽名空中固件升級功能

    Nordic Semiconductor宣布其最新發(fā)布的nRF5 SDK v12.0支持安全的簽名空中設備固件升級(OTA-DFU),可增強應用升級的安全性,通過使用安全的簽名,在給定設備上確保使用經(jīng)過驗證的可信任來源進行應用更新,以防止可能有惡意的設備升級攻擊。
    發(fā)表于 09-05 10:19 ?1657次閱讀

    講述Nordic nRF5 SDK的主要調試手段,以幫助大家快速定位問題

    nRF5 SDK日志打印功能是通過nRF_Log模塊實現(xiàn)的(上面展示的日志都是通過nRF_Log打印出來的),SDK包含的大部分例子都自帶打
    的頭像 發(fā)表于 04-15 15:38 ?1.3w次閱讀
    講述Nordic <b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>的主要調試手段,以幫助大家快速定位問題

    nRF52開發(fā)工具包用戶指南免費下載

    nRF5 SDK v14.1.0開始,SDK支持為nRF52810開發(fā),包括一個模擬nRF52810的示例項目。此項目位于PCA1004E子
    發(fā)表于 12-02 08:00 ?33次下載
    <b class='flag-5'>nRF</b>52開發(fā)工具包用戶指南免費下載

    如何調試nRF5 SDK

    本文將講述Nordic nRF5 SDK的主要調試手段,以幫助大家快速定位問題,并解決問題。一般來說,你可以通過打log方式,IDE的debug模式,SDK自帶的app_error_check函數(shù)
    的頭像 發(fā)表于 06-24 08:59 ?197次閱讀
    如何調試<b class='flag-5'>nRF5</b> <b class='flag-5'>SDK</b>