Name | Date | Size | #Lines | LOC | ||
---|---|---|---|---|---|---|
.. | 21-Aug-2025 | - | ||||
docs/ | 21-Aug-2025 | - | ||||
libraries/ | 21-Aug-2025 | - | ||||
nrf51822/ | 21-Aug-2025 | - | ||||
nrf52832/ | 21-Aug-2025 | - | ||||
nrf52833/ | 21-Aug-2025 | - | ||||
nrf52840/ | 21-Aug-2025 | - | ||||
nrf5340/ | 21-Aug-2025 | - | ||||
tools/ | 21-Aug-2025 | - | ||||
README.md | A D | 21-Aug-2025 | 9.9 KiB | 251 | 155 |
README.md
1# nRF5x BSP 说明 2 3## 简介 4 5 Nordic nRF5x 系列 MCU 应用广泛,且功能齐全、灵活性高,非常适用于 Bluetooth 低功耗蓝牙和 2.4 GHz 超低功耗无线应用。 6 7 基于官方[sdk16.0](http://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v16.x.x/nRF5_SDK_16.0.0_98a08e2.zip)版本的基础上,该BSP将官方的SDK和RT-THREAD生态结合,让开发者可以既可以基于官方的sdk开发自己的应用,也可以使用RT-Thread生态的软件包。 8 9 目前支持硬件平台:`nrf52832(pca10040)`、`nrf52840`(pca10056) 10 11 在搭建bsp的时候,通过参考STM32的架构,预留出支持多种nordic芯片的框架,理论上可以支持更多的nordic的平台,限于目前社区小伙伴手上的开发板有限,如果您手上有相关nordic的开发板,欢迎添加对应的nordic的芯片的bsp。 12 13Nordic nRF5x系列BSP 目前支持情况如下: 14 15| nordic主芯片 | 开发板名称 | bsp所在文件夹 | 备注 | 16| ------------ | ------------------------------------------------------------ | ------------- | ---- | 17| nrf52840 | 官方pca10056 | nrf52840 | | 18| nrf52832 | 官方pca10040 | nrf52832 | | 19| nrf52840 | [青风52840](https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-15118192232.5.46a15d490SURQ9&id=581711815379) | nrf52840 | | 20 21### 主要支持功能 22 23- 支持官方softdevice的sample: ble_app_uart、ble_app_blinky、ble_app_hrs(softdevice是官方nordic的协议栈名称) 24- 支持nimble的软件包及对应的sample 25- 官方softdevice的sample和RT-THREAD驱动框架结合。 26 27 28 29### 目录结构 30 31``` 32nrf5x 33├───docs 34│ └───images // nrf5x文档使用图片 35│ └───nRF5x系列BSP制作教程.md 36├───libraries // nrf5x系列支持BSP 37│ └───drivers // nRF5x 系列设备通用驱动文件 38│ └───templates // 通用设备 BSP 工程模板 39│ │ └───nrf52x // nrf52x 系列 BSP 工程模板 40│ │ └───nrf5x_board_kconfig // 通用 BSP 工程配置文件 41├───nrf52832 // nrf52832 BSP 工程 42│ └───application // 应用代码 43│ │ board // 链接脚本文件,开发板硬件初始化和配置文件 44│ │ package // 软件包目录 45│ │ └───nRF5_SDK // nordic 官方 nRF5x SDK 46│ │ kconfig // 工程配置文件 47│ └───rtconfig.h 48├───nrf52840 // nrf52840 BSP 工程 49└───README.md // nordic 工程整体介绍 50``` 51 52### 如何使用 53 54#### RT-THREAD的使用 55 56 默认的RT-THREAD工程是不带有蓝牙协议栈功能的,方便客户先搭建对应的bsp平台,后续可以选择任意协议栈运行蓝牙。 57 58 默认的BSP是支持UART和GPIO的,烧入即可亮灯。 59 60**准备工作** 61 62需要env环境和keil环境,并且对RT-THREAD使用稍微熟悉一些即可。 63 64- 首先下载代码,`git clone https://github.com/RT-Thread/rt-thread.git` 65- 进入到目录`rt-thread/bsp/nrf5x/nrf52840` 66- 右击进入env命令行模式 67- menuconfig 选择需要加载的BSP配置并且保存 68- 执行`pkgs --update` 下载对应的硬件软件包(这里的HAL库采用软件包的方式,需要客户自行下载) 69- 执行`scons --target=mdk5` 生成keil工程,烧入即可看到LED小灯闪烁 70- 需要注意的是,如果之前板子上已经烧入softdevice的话,烧入可能会出现烧不进的情况,需要将整颗芯片擦除之后再运行rt-thread裸工程 71 72#### Softdevice 的使用 73 74首先可以熟悉上述工程的运行,在上述运行的基础上,我们可以试着跑一下ble_app_beacon(这个在SDK16.0中的peripheral 的sample中) 75 76- menuconfig 进入Hardware Drivers Config, BLE STACK 选择Nordic softdevice 77 78 79 80- menuconfig 进入peripheral libraries and drivers目录中选中nrf5x_sdk 81 82 83 84- 进入目录选择对应的sample 85 86 87 88- 保存配置,然后`pkgs --update`, 执行`scons --target=mdk5` 89- 打开keil 工程,softdevice的工程需要烧入官方的协议栈,所以先要烧入softdevice(如果之前已经烧入SDK16.0的softdevice,可以不用执行这一步),点击softdevice工程,烧入即可 90 91 92 93- 重新选择rtthread工程,进行编译,烧入,通过串口看到如下的输出即代表成功 94 95 96 97- 这个时候我们执行命令 `ble_app_beacon` 不同的sample对应不同的命令,看到如下log代表beacon已经跑起来了 98 99 100 101- 这个时候用nrf connect 来测试可以搜索到对应的beacon 102 103 104 105#### nimble的使用 106 107如果使用nimble就不能选择softdevice了,所以要清空之前的配置,为了防止误操作,可以选择将nrf52840的目录下面的内容全部执行`git reset --hard` 之后重复上述操作,然后执行`git clean -xfd`清理掉无效的文件 108 109- menuconfig进入BLE STACK 选择nimble 110 111- menuconfig选择nimble 112 113 114 115- 进入Controller Configuration 选择nrf52840 116- 进入Bluetooth Samples 选择ble beacon sample 117- 执行`pkgs --update` 下载需要的软件包 118- 执行`scons --target=mdk5` 119- 打开keil工程,勾选GNU extensions 120 121 122 123- 打开keil工程烧入代码,这个时候需要注意的是,如果之前有softdevice存在flash中,需要擦除芯片中的softdevice。 124- 烧入之后执行cmd `ble_ibeacon` 125- 之后用nrf connect 软件可以搜索到对应的beacon设备。 126 127 128 129## 使用RTT-STUDIO开发 130 131RTT-STUDIO V2.2.0及以上版本,支持直接导入BSP创建工程,而可以不用再依赖于基于开发版来创建工程了,这样,我们可以一直体验最新的代码了,是不是很香 132 133 134 135### 导入nRF5x BSP到RTT-STUDIO中 136 1371. 右击资源管理窗口,鼠标右击导入 138 139  140 1412. 选择导入BSP到工作空间,点击下一步 142 143  144 1453. 选择BSP根目录,以及填写工程名称,点击完成 146 147  148 149  150 1514. 通过观察控制台LOG,我们发现,其实当执行该操作时,背后的操作逻辑是,进入指定的BSP目录,执行下面的命令 152 153 ``` 154 先进入指定BSP目录,然后执行下面的额命令 155 scons --dist-ide --project-path=D:\RT-ThreadStudio\workspace/nrf52832_test --project-name=nrf52832_test 156 ``` 157 158  159 160 161 1625. 直接编译工程,发现已经编译成功 163 164  165 1666. 下载程序到开发板,点击下载按钮,发现有如下提示(我目前使用的studio版本是版本: 2.2.3,后续该问题应该可以修复掉) 167 168  169 170 171 172 经过请教施工,解决了上面的问题,解决步骤如下 173 174 6.1 打开导入后的工程目录,打开.settings文件夹中的projcfg.ini文件 175 176  177 178 6.2 添加如下内容`J-Link` 179 180 181 1826.3 打开调试配置界面,填写设备名,设备名具体写什么,可以参考这里[链接](https://www.segger.com/supported-devices/jlink/) 183 184 185 186 187 188 189 190## FAQ: 191 192#### 1. 如果烧入的时候出现如下状况: 193 194 195 196说明板子上已经烧入了softdevice,需要擦除掉,才能烧入不带有softdevice的程序。 197 198下面提供一种擦写softdevice的方法。在keil中选择softdevice Erase的FLASH算法,这个时候就烧写之前可以擦除之前的softdevice。 199 200 201 202 203 204### 2.如果在使用softdevice的时候,连上手机时候出现一些hardfault 205 206如下所示: 207 208``` 209psr: 0x8100000f 210r00: 0x00000000 211r01: 0x200034e6 212r02: 0x00000000 213r03: 0x200034dc 214r04: 0x200034dc 215r05: 0x00000000 216r06: 0x200034e6 217r07: 0xdeadbeef 218r08: 0xdeadbeef 219r09: 0xdeadbeef 220r10: 0xdeadbeef 221r11: 0xdeadbeef 222r12: 0x00000000 223 lr: 0x000369af 224 pc: 0x00036972 225hard fault on handler 226 227``` 228 229这个hardfault发生在SOFTDEVICE内部,由于代码不开源,这边尝试了修改如下函数,可以不触发hardfault。 230 231``` 232rt_hw_interrupt_disable PROC 233 EXPORT rt_hw_interrupt_disable 234 ;MRS r0, PRIMASK 235 ;CPSID I 236 BX LR 237 ENDP 238 239;/* 240; * void rt_hw_interrupt_enable(rt_base_t level); 241; */ 242rt_hw_interrupt_enable PROC 243 EXPORT rt_hw_interrupt_enable 244 ;MSR PRIMASK, r0 245 BX LR 246 ENDP 247``` 248 249 250 251