nrf52840 內部 flash 結構

2021-02-14 nixgnauhcuy
前言

不同的 SDK 版本 flash 結構可能不同,以實際 SDK 版本提供的為準。

最近開發用的晶片正好是 Nodic 的 52840,學習過程中,正好對相關的知識做個總結,方便自己後面回顧。

先貼出一張 52840 和 52832 的 flash 結構圖,這個是在網上翻閱資料找到的圖片,當時保存到電腦裡,正好拿出來用。

圖片以 nRF52840 S140 v6 為例,52840 有 1MB 的 flash 和 256Kb RAM, 從上圖可以看出 flash 最下邊是 SoftDevice(藍牙協議棧),中間是 Application(應用層), 再往上是 UserData 和 Bootloader。SoftDevice 下邊還有 MBR(Master Boot Record,主引導記錄)下邊我們在詳細分析它們。

52840 flash 結構解析SoftDevice(藍牙協議棧)

上邊圖中可以知道 SoftDevice 在 Flash 中的映射地址是 0x00000000-0x00026000,總共是 152Kb,但是其中要拆分成 4Kb 的 MBR 和 148Kb 的 Softdevice。

MBR(Master Boot Record,主引導記錄), The main functionality of the MBR is to provide an interface to allow in-system updates of the application, the SoftDevice, and bootloader firmware,MBR 的主要功能是提供一個接口,以允許對應用程式,SoftDevice 和引導加載程序固件進行系統內更新。

Application

Application 存放了我們應用程式代碼,在 Flash 中的映射地址是 0x00026000-0x000ED000,共 796Kb。

UserData

UserData 存放了配置信息,資料中是這樣解釋的:This 28KB section of flash memory is reserved for config settings. It uses an open source file system called Little File System, which is a part of ARM Mbed OpenSource to store bonding data. For example, when you bond the nRF52 with another Central device,用於存儲綁定數據,它在 Flash 中的映射地址是 0x000ED000-0x000F4000,共 28Kb。

Bootloader

Bootloader,總共 48Kb,但是要拆分成三部分,分別是

Bootloader(40Kb,引導程序,0x000F4000-0x000FE000)

Master Boot Record Params(4Kb,主引導記錄參數,0x000FE000-0x000FF000)

Bootloader Settings(4Kb,引導程序設置,0x000FF000-0x00100000)

Bootloader

A bootloader may be used to handle in-system update procedures.

The bootloader has full access to the SoftDevice Application Programming Interface (API) and can be implemented like any application that uses the SoftDevice. In particular, the bootloader can make use of the SoftDevice API for Bluetooth® Low Energy communication.

上邊是官方文檔的原文,bootloader主要用於處理系統內更新程序,主要用途有:

booting into an application

activating new firmware

optionally, entering DFU mode where DFU transports are activated and new firmware can be delivered

feeding the watchdog timer

Master Boot Record Params

官方文檔中沒有找出相關的信息,但是應該和 MBR 相似,存放了程序引導信息。

Bootloader Settings

Bootloader Settings 保存了 bootloader 和 DFU 信息,如:

current firmware - size, CRC-32,當前固件 - 大小,CRC-32。

pending firmware - size, CRC-32,待定的固件--大小,CRC-32。

progress of the firmware update,固件更新的進度。

progress of the firmware activation,激活固件的進度。

current firmware versions (application and bootloader),當前的固件版本(應用程式和引導程序)。

transport-specific data,傳輸特定數據。

其他

除了 flash 中的結構地址映射外,還需要關注 FICR(信息配置寄存器,0x10001000) 和 UICR(用戶信息配置寄存器,0x10000000),

FICR, 存儲了工廠信息配置,是在出廠時預先編程的,用戶不能擦除。這些寄存器包含了晶片特有的信息和配置。

UICR, 可以用於配置用戶特定設置的非易失性存儲器(NVM)寄存器,用於管理 FLASH 區域(0x0-0x80000)中的 NVM 存儲器存儲,一般不建議在這裡面存儲信息,除非不使用 softdevice 則可以通過 fstorage 將數據寫入 UICR (即只能在禁用 softdevice 時使用)。

52840 上電運行流程

上電後,系統先執行 softdevice,softdevice 通過讀取 UICR 一個寄存器的值,來判斷目前系統是否有 BootLoader ,如果沒有 BootLoader ,系統直接跳到 application;如果有 BootLoader,系統先跳到 BootLoader,BootLoader 再根據目前的情況來決定是進入升級模式還是跳往 application。

結尾

本人水平有限,錯誤、疏漏之處在所難免,還請各位多多包涵,如有問題,歡迎評論指導我修正錯誤,也希望本文能給你帶來一些對 52840 flash 映射理解上的幫助!

參考

[1] Master boot record:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s140%2FSDS%2Fs1xx%2Fmbr_bootloader%2Fmbr.html

[2] Bootloader:https://learn.sparkfun.com/tutorials/nrf52840-advanced-development-with-the-nrf5-sdk/building-blinky-for-the-sparkfun-nrf52840-mini-breakout

[3] Bootloader:https://infocenter.nordicsemi.com/topic/sds_s140/SDS/s1xx/mbr_bootloader/bootloader.html

[4] Bootloader Settings:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.0.0%2Flib_bootloader.html

現在的公眾號都沒有留言功能了,早知道就不應該把原先帶留言功能的公眾號註銷重新來過。需要留言的朋友們,可以在左下角查看原文連結,在我的博客內留言,留言記得填寫有效郵箱,這樣才能收到我的回覆郵件!

相關焦點

  • 藍牙Nrf52832的架構和開發
    相比TI的CC254X、DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架構和開發商都有自己獨特的地方。
  • (6)nRF52840配置定時器和計數器
    NordicnRF52840晶片有5個32位的Timer外設,這些Timer外設可以工作在定時器模式或計數器模式,並且可以設置Timer的時鐘頻率和位寬。軟體開發前準備:開發板:Nordic官方開發板nRF52840-DK(PCA10056)編譯器:SEGGEREmbedded Studio v4.22SDK版本:nRF5_SDK_15.2.0_9412b96定時器模式實驗1、在定時器模式下
  • (4)nRF52840配置串口數據收發
    晶片內部集成了一個UART外設模塊,用於雙向異步串口通信。nRF52840晶片的UART模塊在引腳管理上比很多單片機靈活,可以通過引腳配置寄存器,把TXD,RXD,CTS,RTS這四個控制信號映射到48個引腳中的任何一個物理引腳。由於nRF52840晶片只有一個UART模塊,因此,不能把同一個引腳都映射為不同的信號,例如,不能同時把P0.06引腳同時映射為TXD和RXD。
  • 一款強大的晶片nRF52840及利用藍牙5.0實現數據遠程採集
    一、nRF52840藍牙晶片簡介 自從nordic在2018年強勢推出nRF52840這顆重磅級晶片後,藍牙5.0技術開始在業界流行起來,隨後藍牙5.0技術開始成為了各大品牌的旗艦手機標配功能。nRF528401.
  • 對nRF52840片上系統的硬體調試與漏洞研究(part2)
    在第1部分描述了APPROTECT攻擊之後,這篇文章會介紹如下內容:· 利用基於nRF52840的真實產品提取固件並重新激活SWD。· 重現對其他nRF52 SoC的攻擊,以確認所有nRF52版本中的漏洞。
  • Nordic Semiconductor宣布nRF52840和nRF52832 SoC及其支持軟體已為藍牙5準備就緒
    Nordic Semiconductor宣布可提供藍牙5 (Bluetooth®5)軟體堆棧和藍牙5 SDK,提供藍牙5增強的距離和數據傳輸速度,使得Nordic客戶能夠利用Nordic支持藍牙5的最新nRF52840系統晶片的業界領先特點構建應用。Nordic還為其流行的nRF52832 SoC提供軟體支持,使其具有藍牙5的高速(2Mbps)傳輸特點。
  • nRF Connect for Desktop初探
    五年前就接觸了Nordic的NRF51822, 然後相繼接觸了nRF52832,52833,52840,我發現我還在用五年前的下載軟體
  • nRF52832入門教程 開發環境搭建
    到手機應用商店裡面下載nRF tools,直接打nrf就可以搜索出來了。如圖所示,是從網上下載的資料包。注意觀察文件的結構,心率計是一個periphral的例子,BLE(音Billy?YouTube視頻上NORDIC的工程師讀出來是billy)有四種角色。Periphral的意思是設備作為外設,這時候手機作為主機。S132與前面選擇S132的協議棧版本相對應。3.
  • Nordic Semiconductor批量生產nRF52840 SoC可全面支持藍牙5以及藍牙Mesh和Thread
    nRF52840 SoC還支持共存的Thread協議操作、藍牙Mesh,並帶有片上Arm CryptoCell加密子系統,可理想地應用於智能家居和工業方面。除了nRF52840,nRF52系列還提供經典nRF52832和入門級nRF52810 SoC器件。憑藉豐富的功能和外設,nRF52840 SoC提供了出色功能和靈活性以支持面向可穿戴設備、遊戲、VR / AR以及家庭和工業IoT應用的多種網絡連接產品。
  • ZJ-SDK(RT-Thread+nRF52) nRF52832工程發布(文末有柿餅UI培訓彩蛋)
    的工程支持:    nRF52840工程支持:    文檔    nRF52840和nRF52832工程轉換移植步驟:晶片選擇Flash和RAM配置宏(S140<->S132/NRF52840_XXAA<->NRF52832_XXAA )
  • 如何利用紅旭無線的nRF52840 Dongle進行SIG MESH和BLE抓包
    對抓取到的數據包進行協議分析,所以我們此時還需要對上述下載的nRF Sniffer for Bluetooth LE進行配置,操作如下所示:在Sniffer_Software/extcap/文件夾中打開CMD並安裝相應的依賴包,以下是小編的路徑:F:\Bluetooth\Nordic\Sniffer\nrf_sniffer_for_bluetooth_le
  • nRF52832-MDK: 物聯網開源項目
    先上圖~這是一款完全開源、基於 Nordic 新一代高性能低功耗藍牙系統級晶片 nRF52832、面向物聯網嵌入式應用的開發套件。希望給開發者帶來不同於以往的 開發體驗 ! nRF52832-MDK 是一個開源項目,所有硬體設計資料、原始碼、開發文檔完全開源,項目託管在 GitHub 上,由社區共同維護。
  • 【Nordic視頻系列】nRF52833 DK介紹
    nRF52833 DK是一款通用的單板開發套件,適用於使用nRF52833 SoC的藍牙低功耗,藍牙Mesh,Thread,Zigbee
  • 【每日新品速遞】 Nordic推出nRF52833先進多協議系統級晶片(SoC)
    Nordic Semiconductor宣布推出nRF52833先進多協議系統級晶片(SoC),這是其廣受歡迎且驗證通過的nRF52系列的第五個新成員。nRF52833是一款功耗超低的低功耗藍牙(Bluetooth® Low Energy /Bluetooth LE)、Thread、Zigbee和2.4 GHz私有無線連接解決方案,包含藍牙5.1測向功能的無線電,並且可以在-40至105°C溫度範圍內有效運作。
  • 利用nRF51822模塊製作BLE抓包器
    此圖在ST-Link端連接有錯誤,不過標註是正確的固件燒寫先將Hex文件轉為bin,在bin文件所在目錄下,一條命令完成燒寫:openocd -f interface/stlink-v2-1.cfg -f target/nrf51