近段時間因項目須要開始接觸藍牙芯片 nRF52832,官方的文檔和 SDK 確實至關完善和易於上手,最開始是在 nRF5 SDK v15.3.0 作開發,不久前官方更新了 nRF5 SDK v16.0.0,後續文章也會以這個版本作記錄。git
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.1github
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_packswindows
提示安裝 nRF_DeviceFamilyPack.8.27.0 點擊取消app
點擊 Select Software Packs工具
將下面兩項分別修改spa
肯定後會彈出 Manage Run-Time Environment,去掉 Device 中 Startup 的勾並肯定.net
點擊 Manage Run-Time Environment,勾選 Startup 爲 8.27.1 並肯定,修改完成blog
nRF52832 有 512KB 的 Flash 空間,以 4KB 爲一個頁,即爲分區和擦除的最小單位。按照功能可分爲如下幾種:ip
**不帶協議棧,不帶 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 進行整片擦除