前言
近段時間因項目需要開始接觸藍牙芯片 nRF52832,官方的文檔和 SDK 確實相當完善和易於上手,最開始是在 nRF5 SDK v15.3.0 做開發,不久前官方更新了 nRF5 SDK v16.0.0,后續文章也會以這個版本做記錄。
開發環境安裝和配置
Keil MDK-ARM 5.29 下載鏈接
nRF Command Line Tools 10.5.0 包含 nRF 開發常用的工具和 J-Link 驅動 下載鏈接
ARM.CMSIS.4.5.0 下載鏈接
NordicSemiconductor.nRF_DeviceFamilyPack.8.27.1 下載鏈接
nRF5 SDK v16.0.0 下載鏈接
下載安裝 Keil 完成后,打開 Keil 中的 Pack Installer 手動導入 ARM.CMSIS.4.5.0 和 NordicSemiconductor.nRF_DeviceFamilyPack.8.27.1
修改 nRF5 SDK v16.0.0 中例程為 nRF_DeviceFamilyPack.8.27.1
SDK v16.0.0 中的例程 examples 依賴於 nRF_DeviceFamilyPack.8.27.0,而這個版本因為有 bug 已被撤回,所以需要手動修改為 nRF_DeviceFamilyPack.8.27.1,以 examples\ble_peripheral\ble_app_template 為例,其中 pca10040 代表 nRF52832,打開 arm5_no_packs
提示安裝 nRF_DeviceFamilyPack.8.27.0 點擊取消
點擊 Select Software Packs
將下面兩項分別修改
確定后會彈出 Manage Run-Time Environment,去掉 Device 中 Startup 的勾並確定
點擊 Manage Run-Time Environment,勾選 Startup 為 8.27.1 並確定,修改完成
Flash 分區的划分
nRF52832 有 512KB 的 Flash 空間,以 4KB 為一個頁,即為分區和擦除的最小單位。按照功能可分為以下幾種:
**不帶協議棧,不帶 bootloader **
分區 | 地址 | 大小 |
---|---|---|
App + Free Space | 0x0001 0000 - 0x0007 FFFF | 508KB |
MBR | 0x0000 0000 - 0x0000 0FFF | 4KB |
**帶協議棧,不帶 bootloader **
分區 | 地址 | 大小 |
---|---|---|
App + Free Space | 0x0002 6000 - 0x0007 FFFF | 360KB |
SoftDevice | 0x0000 1000 - 0x0002 5FFF | 148KB |
MBR | 0x0000 0000 - 0x0000 0FFF | 4KB |
**帶協議棧和 bootloader **
分區 | 地址 | 大小 |
---|---|---|
BL Settings | 0x0007 F000 - 0x0007 FFFF | 4KB |
MBR Params | 0x0007 E000 - 0x0007 EFFF | 4KB |
Bootloader | 0x0007 8000 - 0x0007 DFFF | 24KB |
App + Free Space | 0x0002 6000 - 0x0007 7FFF | 328KB |
SoftDevice | 0x0000 1000 - 0x0002 5FFF | 148KB |
MBR | 0x0000 0000 - 0x0000 0FFF | 4KB |
使用了協議棧 SoftDevice 的項目工程需要燒錄一次 SoftDevice,再燒錄用戶程序,即選擇 flash_s132_nrf52_7.0.1_softdevice 點 Download 燒錄后,再切換回 nrf52832_xxaa 燒錄用戶程序,一般協議棧只需燒錄一次
燒錄協議棧后該區域會被鎖定,出現無法再次下載的錯誤,此時可用 J-Link 驅動中的 SEGGER J-Flash Lite 的 Erase Chip 進行整片擦除