Skip to content

Latest commit

 

History

History
405 lines (240 loc) · 11.9 KB

JOB202005.md

File metadata and controls

405 lines (240 loc) · 11.9 KB

【JOB202005】nRF5x BSP 框架搭建和完善

1、介绍

Nordic nRF5x 系列 MCU 应用广泛,且功能齐全、灵活性高,非常适用于 Bluetooth 低功耗蓝牙和 2.4 GHz 超低功耗无线应用。

目前 RT-Thread BSP 中已经存在 nrf51822nrf52832 两个 nRFx 系列设备 BSP ,不过其功能实现较为简单,且工程结构定义不合理,不利于底层功能的完善和更多 nRF5x 系列设备的添加,也不利于基于该 BSP 的应用开发。为此,本活动希望搭建和完善 nRF5x 系列设备 BSP 框架,接入部分常用 nRF5x 系列设备,并完善 BSP 底层驱动和上层应用。

硬件平台:nrf52832(pca10040)nrf52840(pca10056)

项目将分为如下几个部分,分别为:

1.1 框架搭建

框架搭建需要确定 BSP 目录结构,可以参考 STM32 BSP 框架目录结构。

目标:列出 nRF5x BSP 框架目录结构,并给出对应目录介绍。

1.2 nRF5 SDK 整理

Nordic 官方提供的 nRF5 SDK 功能齐全,适用于多种 nRF51 和 nRF52 系列开发板,SDK 包括不同类型设备的外设驱动、固件升级(DFU)功能、蓝牙低功耗配置、使用示例等,SDK 下载地址

目标:移植 nRF5 SDK 并以软件包形式对外提供,主要用于 nRFx BSP 框架中,支持 nRF 系列开发板类型配置,支持对应模块外设驱动配置。

1.3 内核移植

在整理的 nRF5_SDK 基础上,在 nrf52832 、nrf52840 设备上移植 RT-Thread,包括:

  • 实现中断开关、系统调度、 systick 时钟节拍以及异常处理方式 ;
  • 编写链接脚本文件;
  • 通过 scons 脚本编译生成工程文件;
  • 添加 UART 驱动适配;
  • 处理固件烧录问题;

目标:nrf52832、nrf52840 设备上正常运行 RT-Thread 系统,正常运行串口 FinSH 控制台 。

1.4 驱动添加

模块移植完成,需要给 BSP 框架添加更多驱动支持,驱动添加时需要考虑对不同设备的兼容处理,尽量确保驱动通用与多中类型设备。nrf52832、nrf52840 设备上需要添加的驱动有:GPIO、SPI、Flash、TIMER、WDT、PWM、RTC、I2C、USB 等。

目标:完成上述驱动适配,并通过测试框架测试相关驱动。

1.5 应用开发

主要是基于BLE 蓝牙功能的应用开发,包括蓝牙 profile 支持,如:BAS(电池服务)、HRS(心率服务)、BLS(血压服务)、DIS(设备信息服务)、CTS(当前时间服务)等,以及针对不同服务的示例开发。

目标:蓝牙 profile 支持以软件包形式给出,支持配置添加不同类型 profile,profile 服务可在不同 nRFx 系列设备上通用。

2、会议纪要

2020-03-12

  • nrf52832 BSP 使用:熟悉 rt-thread nrf52832 BSP工程,并正常运行使用;
  • nrf5x BSP 框架搭建:搭建基础 BSP 框架,并给出目录结构介绍;
  • nrf5_sdk 软件包整理:熟悉 nrf5_sdk 目录结构和功能;

2020-03-23

  • nrf5x_sdk 软件包整理:整理 nrf 官方 sdk,以软件包形式给出,默认开启基础外设支持,默认支持 nrf52832 和 nrf52840 设备;
  • nrf52840 BSP 添加:基于最新 nrf5x BSP 框架添加 nrf52840 BSP 工程;

2020-04-15

  • 完善 nrf5x 框架:暂时删除 BSP 工程中蓝牙相关功能和代码,使整个 BSP 外设驱动正常运行;尽量使用系统默认 main 函数启动;
  • nrf5x_sdk 软件包完善:软件包到 nRF5_SDK_16.0.0 版本,完善软件包外设配置选项;
  • BSP 外设驱动添加:UART、GPIO、SPI、FLASH、I2C 外设驱动添加;

2020-05-14

  • 分配掉所有BSP外设模块任务
  • 讨论之后的协议栈支持方式,优先支持softdevice,后续nimble做备选
  • 在外设和蓝牙添加都做完之后,开始做BLE SAMPLE
  • 添加低功耗和easyflash等log措施来完善。

2020-07-18

  • guohp1128分享GPIO驱动如何实现。
  • xckhmf 最近出差,项目比较急,暂缓,
  • 在外设和蓝牙添加都做完之后,开始做BLE SAMPLE, sample app 任务已经分配。
  • 下一步,先熟悉相应的sample。
  • 驱动继续完善。

2020-08-11

  • thomas分享“ble 广播以及扫描 ” 分享蓝牙基本功能

  • thomas完成nrf52832的led小灯的完成并提交PR

  • thomas PWM提交PR

2020-08-25

  • ylz0923 分享Watchdong驱动的编写,并提交PR
  • 提供技术支持给大家,如何快速使用官方的nordic的sdk
  • 提供指导方案,如何快速熟悉profile和理解代码
  • guohp112提交ADC的PR

2020-08-30

2020-09-16

  • cheng分享和讨论rtc驱动的编写
  • guohp分享bas的profile的分享
  • yang分享dis的profile的分享
  • thomas分享和分配接下来的任务

2020-10-18

  • guohp分享ble_app_blinky

  • yang工领取任务NFC

2020-11-01

  • cheng分享ble_app_uart 透传,实现console功能

  • xckhmf 领取任务I2C和修复SPI,以及修复UART

  • thomas完成readme文档的编写

2020-11-27

  • xckhmf 分享I2C移植经验
  • 讨论开始着手写BSAL的应用
  • cheng领取任务BSAL_BLE_APP_UART
  • xckhmf 领取任务BSAL_BLE_APP_HRS
  • guohp领取任务BSAL_BLE_APP_BLINKY

3、 路线图

项目大致分为以下几个阶段:

M0: nrf5x BSP 框架搭建

  • 【已完成】BSP框架搭建:目前已完成基础 nrf5x BSP 框架搭建,项目地址;@chenyong
  • 【已完成】目录结构介绍:相关文档;@chenyong

M1: nrf5x_sdk 软件包设计与实现

  • 【已完成】nrf5x_sdk 软件包整理;@Thomas
  • 【已完成】nrf52840 BSP 工程添加;@Thomas

M2: 框架功能完善和外设驱动添加及测试

框架功能完善

  • 【已完成】完善 nrf5x BSP 工程中对蓝牙相关功能依赖关系;@xckhmf(4.20)
  • 【已完成】使用系统默认 main 函数(RT_USING_MAIN)启动;@xckhmf(4.20)
  • 完善 nrf52832/nrf52840 工程 README 文档(参考 STM32 BSP README 文档);

M3: SOFTDEVICE 功能添加

框架功能完善

  • 【已完成】添加softdevice软件包,完成ble_app_beaconsample;@thomas(7.28)
  • 【正在进行】抽象接口;

M4: 完善softdevice的example

softdevice的example进行完善

  • 【正在进行】完成各个sample的menuconfig脚本,完善文件。
  • 【正在进行】需要各个负责人完善sample和rtthread的bsp的连接;

M5: 将之前的nimble和BSAL用上

已经提交

M6: Mesh example

mesh_example
light_switch_server
light_switch_client

外设驱动添加和测试

外设驱动 申请人 预计完成时间 外设驱动 申请人 预计完成时间
UART @xckhmf 已完成(需要完善多串口) TIMER @chen
GPIO @guohp112 已完成 WDT @Yang 已完成
SPI @Thomas 已完成 PWM @Thomas 已完成
ONCHIP_FLASH/QSPI @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

小组成员

guohp1128

熟悉nrf5x的资料。 外设驱动添加和测试。

GPIO 已完成

ADC 已完成

bas profile 分享已完成

ble_app_bas 对接adc驱动

ble_app_blinky 对接gpio驱动

功耗PM管理

xckhmf

熟悉nRF SDK
外设驱动添加和测试

UART有时间继续完善 支持多串口,DMA UARTE

I2C 已完成

ble_app_hrs

Thomas

SPI 完成SPI外设功能 已完成

QSPI flash 已完成

PWM 已完成

softdevice 已完成

ble_app_beacon 已完成

nimble 对接已完成

softdevice sample对接 已完成

chenyingchun0312

RTC 已完成

ble_app_uart 对接finish

基于cotex -M系列的 segger rtt的(DATA,CLOCK)软件包(支持SWO)

HWTIMER驱动

Yang

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://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/difference-between-nrf52840-engineering-a-and-b-re

青风视频教程:

https://www.bilibili.com/video/BV18Z4y1K7GM/

驱动编写意见:

  1. 尽量转换成nrfx等函数

  2. hardware的初始化init函数,通常可以用INIT_BOARD_EXPORT(rt_hw_pin_init);来代替,不需要放到board.c中

  3. 将自行测试的sample 以命令留存,方便验证:MSH_CMD_EXPORT(ble_app_beacon, ble beacon);

  4. sdk config.h 中尽量不修改,改到Kconfig中,参考softdevice

TODO list:

BSP部分

  1. NFC驱动 ☆☆☆☆ (杨工)
  2. 功耗PM管理 ☆☆☆☆☆ (郭)
  3. USB驱动 ☆☆☆☆☆ (thomas)
  4. HWTIMER驱动 ☆☆☆ (cheng)
  5. 基于cotex -M系列的 segger rtt的(DATA,CLOCK)软件包(支持SWO) ☆☆☆ (陈工,2个功能)

BLE 部分

  1. BSAL 对接(Thomas)
  2. ble_app_bas 要对接adc sample制作和分享 以及 基于BSAL (郭工)
  3. ble_app_dis sample制作和分享 以及BSAL (杨工)
  4. ble_app_uart 和串口对接 并且可以配置 对接finish ☆☆☆☆☆ 以及BSAL (陈工)
  5. ble_app_blinky 和LED BUTTON对接 对接 以及BSAL (郭工)
  6. ble_app_hrs 代码整理和分享 加电池服务BAS和dis服务 ☆☆☆ 以及BSAL (杨工)
  7. ble_central_app 主机APP SAMPLE添加 ☆☆☆☆☆ 以及BSAL (thomas)
  8. ble_hid_mouse 模拟鼠标 以及BSAL (Thomas)

Mesh部分

  1. light_switch_server

  2. light_switch_client

  3. provisioner

  4. 开源mesh协议栈的移植基于BSAL

  5. zephyer mesh

后续项目畅想

  • STM32WB55 支持
  • STM32 IOT board 支持
  • DIY智能家居,天猫精灵对接
  • MICROPYTHON BLE接口对接BSAL
  • nordic zephyr协议栈移植过来当一个软件包和softdevice类似。

产品验收测试:

  • RF
  • DTM测试
  • BQB测试认证