Nordic nRF5x 系列 MCU 应用广泛,且功能齐全、灵活性高,非常适用于 Bluetooth 低功耗蓝牙和 2.4 GHz 超低功耗无线应用。
目前 RT-Thread BSP 中已经存在 nrf51822
和 nrf52832
两个 nRFx 系列设备 BSP ,不过其功能实现较为简单,且工程结构定义不合理,不利于底层功能的完善和更多 nRF5x 系列设备的添加,也不利于基于该 BSP 的应用开发。为此,本活动希望搭建和完善 nRF5x 系列设备 BSP 框架,接入部分常用 nRF5x 系列设备,并完善 BSP 底层驱动和上层应用。
硬件平台:nrf52832(pca10040)
、nrf52840
(pca10056)
项目将分为如下几个部分,分别为:
框架搭建需要确定 BSP 目录结构,可以参考 STM32 BSP 框架目录结构。
目标:列出 nRF5x BSP 框架目录结构,并给出对应目录介绍。
Nordic 官方提供的 nRF5 SDK 功能齐全,适用于多种 nRF51 和 nRF52 系列开发板,SDK 包括不同类型设备的外设驱动、固件升级(DFU)功能、蓝牙低功耗配置、使用示例等,SDK 下载地址。
目标:移植 nRF5 SDK 并以软件包形式对外提供,主要用于 nRFx BSP 框架中,支持 nRF 系列开发板类型配置,支持对应模块外设驱动配置。
在整理的 nRF5_SDK 基础上,在 nrf52832 、nrf52840 设备上移植 RT-Thread,包括:
- 实现中断开关、系统调度、 systick 时钟节拍以及异常处理方式 ;
- 编写链接脚本文件;
- 通过 scons 脚本编译生成工程文件;
- 添加 UART 驱动适配;
- 处理固件烧录问题;
目标:nrf52832、nrf52840 设备上正常运行 RT-Thread 系统,正常运行串口 FinSH 控制台 。
模块移植完成,需要给 BSP 框架添加更多驱动支持,驱动添加时需要考虑对不同设备的兼容处理,尽量确保驱动通用与多中类型设备。nrf52832、nrf52840 设备上需要添加的驱动有:GPIO、SPI、Flash、TIMER、WDT、PWM、RTC、I2C、USB 等。
目标:完成上述驱动适配,并通过测试框架测试相关驱动。
主要是基于BLE 蓝牙功能的应用开发,包括蓝牙 profile 支持,如:BAS(电池服务)、HRS(心率服务)、BLS(血压服务)、DIS(设备信息服务)、CTS(当前时间服务)等,以及针对不同服务的示例开发。
目标:蓝牙 profile 支持以软件包形式给出,支持配置添加不同类型 profile,profile 服务可在不同 nRFx 系列设备上通用。
- nrf52832 BSP 使用:熟悉 rt-thread nrf52832 BSP工程,并正常运行使用;
- nrf5x BSP 框架搭建:搭建基础 BSP 框架,并给出目录结构介绍;
- nrf5_sdk 软件包整理:熟悉 nrf5_sdk 目录结构和功能;
- nrf5x_sdk 软件包整理:整理 nrf 官方 sdk,以软件包形式给出,默认开启基础外设支持,默认支持 nrf52832 和 nrf52840 设备;
- nrf52840 BSP 添加:基于最新 nrf5x BSP 框架添加 nrf52840 BSP 工程;
- 完善 nrf5x 框架:暂时删除 BSP 工程中蓝牙相关功能和代码,使整个 BSP 外设驱动正常运行;尽量使用系统默认 main 函数启动;
- nrf5x_sdk 软件包完善:软件包到 nRF5_SDK_16.0.0 版本,完善软件包外设配置选项;
- BSP 外设驱动添加:UART、GPIO、SPI、FLASH、I2C 外设驱动添加;
- 分配掉所有BSP外设模块任务
- 讨论之后的协议栈支持方式,优先支持softdevice,后续nimble做备选
- 在外设和蓝牙添加都做完之后,开始做BLE SAMPLE
- 添加低功耗和easyflash等log措施来完善。
- guohp1128分享GPIO驱动如何实现。
- xckhmf 最近出差,项目比较急,暂缓,
- 在外设和蓝牙添加都做完之后,开始做BLE SAMPLE, sample app 任务已经分配。
- 下一步,先熟悉相应的sample。
- 驱动继续完善。
-
thomas分享“ble 广播以及扫描 ” 分享蓝牙基本功能
-
thomas完成nrf52832的led小灯的完成并提交PR
-
thomas PWM提交PR
- ylz0923 分享Watchdong驱动的编写,并提交PR
- 提供技术支持给大家,如何快速使用官方的nordic的sdk
- 提供指导方案,如何快速熟悉profile和理解代码
- guohp112提交ADC的PR
- guohp112分享ADC驱动 https://www.bilibili.com/video/BV1F64y1F7iv/
- 分享markdown书写规则。
- 各自分配翻译profile的任务。
- cheng分享和讨论rtc驱动的编写
- guohp分享bas的profile的分享
- yang分享dis的profile的分享
- thomas分享和分配接下来的任务
-
guohp分享ble_app_blinky
-
yang工领取任务NFC
-
cheng分享ble_app_uart 透传,实现console功能
-
xckhmf 领取任务I2C和修复SPI,以及修复UART
-
thomas完成readme文档的编写
- xckhmf 分享I2C移植经验
- 讨论开始着手写BSAL的应用
- cheng领取任务BSAL_BLE_APP_UART
- xckhmf 领取任务BSAL_BLE_APP_HRS
- guohp领取任务BSAL_BLE_APP_BLINKY
项目大致分为以下几个阶段:
- 【已完成】nrf5x_sdk 软件包整理;@Thomas
- 【已完成】nrf52840 BSP 工程添加;@Thomas
框架功能完善
- 【已完成】完善 nrf5x BSP 工程中对蓝牙相关功能依赖关系;@xckhmf(4.20)
- 【已完成】使用系统默认 main 函数(RT_USING_MAIN)启动;@xckhmf(4.20)
- 完善 nrf52832/nrf52840 工程 README 文档(参考 STM32 BSP README 文档);
框架功能完善
- 【已完成】添加softdevice软件包,完成ble_app_beaconsample;@thomas(7.28)
- 【正在进行】抽象接口;
softdevice的example进行完善
- 【正在进行】完成各个sample的menuconfig脚本,完善文件。
- 【正在进行】需要各个负责人完善sample和rtthread的bsp的连接;
已经提交
mesh_example | ||
---|---|---|
light_switch_server | ||
light_switch_client | ||
外设驱动添加和测试
外设驱动 | 申请人 | 预计完成时间 | 外设驱动 | 申请人 | 预计完成时间 |
---|---|---|---|---|---|
UART | @xckhmf | 已完成(需要完善多串口) | TIMER | @chen | |
GPIO | @guohp112 | 已完成 | WDT | @Yang | 已完成 |
SPI | @Thomas | 已完成 | PWM | @Thomas | 已完成 |
@Thomas | 已完成 | RTC | @chen | 已完成 | |
I2C | @xckhmf | 已完成 | ADC | @guohp1128 | 已完成 |
BLE SoftDevice | @Thomas | 已完成ble_app_beacon | ble open stack | nimble | 已完成 |
USB | I2S |
软件包功能完善
-
【正在进行】nrfx 软件包整理添加;@xckhmf (4.18)
-
【已完成】同步更新软件包到 nRF5_SDK_16.0.0 版本;@Thomas(7.28)
-
【蓝牙接口】将sample抽象接口;
-
【完善sample】;
BLE 功能支持完善和应用开发
等待完善。主要处理BLE APP的应用
BLE SAMPLE
APP | 申请人 | 预计完成时间 |
---|---|---|
ble_app_beacon | @thomas | |
ble_app_bas | @guohp1128 | |
ble_app_hrs | @xckhmf | |
ble_app_uart | @cheng | |
ble_app_dis | @Yang | |
ble_app_blinky | @guohp1128 | |
熟悉nrf5x的资料。 外设驱动添加和测试。
GPIO 已完成
ADC 已完成
bas profile 分享已完成
ble_app_bas 对接adc驱动
ble_app_blinky 对接gpio驱动
功耗PM管理
熟悉nRF SDK
外设驱动添加和测试
UART有时间继续完善 支持多串口,DMA UARTE
I2C 已完成
ble_app_hrs
SPI 完成SPI外设功能 已完成
QSPI flash 已完成
PWM 已完成
softdevice 已完成
ble_app_beacon 已完成
nimble 对接已完成
softdevice sample对接 已完成
RTC 已完成
ble_app_uart 对接finish基于cotex -M系列的 segger rtt的(DATA,CLOCK)软件包(支持SWO)
HWTIMER驱动
WDT 已完成
dis分享 已完成
ble_app_dis 已完成NFC驱动
ble_app_hrs 添加dis和bas服务 已完成
SDK 下载链接:
http://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v16.x.x/nRF5_SDK_16.0.0_98a08e2.zip
文档链接:
http://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v16.x.x/nRF5_SDK_16.0.0_offline_doc.zip
蓝牙core spec: https://www.bluetooth.com/specifications/bluetooth-core-specification/
蓝牙profile spec: https://www.bluetooth.com/specifications/gatt/
nrf sdk 16.0.0 在线国内文档:
http://doc-nrf5-sdk-v16-0-0.wireless-tech.cn/nrf5/index.html
nRF5 SDK for Mesh v4.0.0 在线国内文档:
http://doc-mesh-sdkapi-v4-0-0.wireless-tech.cn/
nordic DK V0.9.2 换52840之后的bug
青风视频教程:
https://www.bilibili.com/video/BV18Z4y1K7GM/
驱动编写意见:
-
尽量转换成nrfx等函数
-
hardware的初始化init函数,通常可以用INIT_BOARD_EXPORT(rt_hw_pin_init);来代替,不需要放到board.c中
-
将自行测试的sample 以命令留存,方便验证:MSH_CMD_EXPORT(ble_app_beacon, ble beacon);
-
sdk config.h 中尽量不修改,改到Kconfig中,参考softdevice
TODO list:
- NFC驱动 ☆☆☆☆ (杨工)
- 功耗PM管理 ☆☆☆☆☆ (郭)
- USB驱动 ☆☆☆☆☆ (thomas)
- HWTIMER驱动 ☆☆☆ (cheng)
- 基于cotex -M系列的 segger rtt的(DATA,CLOCK)软件包(支持SWO) ☆☆☆ (陈工,2个功能)
- BSAL 对接(Thomas)
- ble_app_bas 要对接adc sample制作和分享 以及 基于BSAL (郭工)
- ble_app_dis sample制作和分享 以及BSAL (杨工)
- ble_app_uart 和串口对接 并且可以配置 对接finish ☆☆☆☆☆ 以及BSAL (陈工)
- ble_app_blinky 和LED BUTTON对接 对接 以及BSAL (郭工)
- ble_app_hrs 代码整理和分享 加电池服务BAS和dis服务 ☆☆☆ 以及BSAL (杨工)
- ble_central_app 主机APP SAMPLE添加 ☆☆☆☆☆ 以及BSAL (thomas)
- ble_hid_mouse 模拟鼠标 以及BSAL (Thomas)
-
light_switch_server
-
light_switch_client
-
provisioner
-
开源mesh协议栈的移植基于BSAL
-
zephyer mesh
- STM32WB55 支持
- STM32 IOT board 支持
- DIY智能家居,天猫精灵对接
- MICROPYTHON BLE接口对接BSAL
- nordic zephyr协议栈移植过来当一个软件包和softdevice类似。
- RF
- DTM测试
- BQB测试认证