女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

nRF5 SDK軟件架構(gòu)及softdevice工作原理

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

wKgZO2hYxSWAJt2sAAFiMpwkKk0969.png

Flash結(jié)構(gòu)圖 RAM結(jié)構(gòu)圖

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

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

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

wKgZPGhYxSWAJqMoAABz86BryhI337.png

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

sd_softdevice_enable(…);

sd_ble_gap_adv_start(…);

sd_flash_write(…);

sd_ppi_channel_assign(…);

Softdevice API有兩種類型:

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

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

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

wKgZO2hYxSaALgLwAADAj_7QTpE611.png

Softdevice API調(diào)用流程如下所示:

wKgZPGhYxSeAG11_AAEzD4gFasc956.png

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

wKgZO2hYxSiAGYgOAAEt15-FhBc203.png

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

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

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

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

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    3

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

    如何調(diào)試nRF5 SDK

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

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

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

    nRF5芯片外設(shè)GPIO和GPIOTE介紹

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

    nRF5 SDK軟件架構(gòu)softdevice工作原理

    本文將介紹Nordic nRF5 SDK軟件架構(gòu)以及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 藍(lán)牙5.0 動能世紀(jì)優(yōu)勢供應(yīng)

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

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

    的,sTm32的架構(gòu)架構(gòu)如有相關(guān)的北歐開發(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支持安全的簽名空中設(shè)備固件升級(OTA-DFU),可增強(qiáng)應(yīng)用升級的安全性,通過使用安全的簽名,在給定設(shè)備上確保使用經(jīng)過驗(yàn)證的可信任來源進(jìn)行應(yīng)用更新,以防止可能有惡意的設(shè)備升級攻擊。
    發(fā)表于 09-05 10:19 ?1657次閱讀

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

    nRF5 SDK日志打印功能是通過nRF_Log模塊實(shí)現(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>的主要調(diào)試手段,以幫助大家快速定位問題

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

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

    如何調(diào)試nRF5 SDK

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