当前文档版本为 v1.0.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

NDK 整体框架介绍

1 简介

PAN1080 NDK是基于开源蓝牙协议栈Nimble(Host)以及开源系统FreeRTOS,以及私有BLE Controller实现完成。Nimble和FreeRTOS均开发源码,BLE Controller通过标准化HCI接口实现。需要注意的是NDK依赖的IDE主要是KEIL。

image

NDK整体结构

2 NDK目录结构

PAN1080 NDK 源码树结构如下:

<home>/01_SDK
├── modules
│   └── hal
└── nimble
    ├── README.md
    ├── controller
    ├── host
    ├── lib
    ├── os
    └── samples
  • moudules/hal:与ZDK同根同源,属于外设和driver相关的硬件抽象层

  • README.md:nimble基本介绍

  • controller:nimble工程所需要的controller相关头文件

  • host:nimble host协议栈所在的主要目录,同时包含kv_store组件,该组件主要用于flash数据库存储。

  • lib:该文件包含两个版本controller的实现,具体实现以lib的形式添加到keil工程中。Controller两个版本分别是Origin版本,该版本是全功能版本,但是具体实现优化比较少,执行速度较慢,代码相对较大;另外一个版本是优化版本(Spark版本),该版本为精简和优化版本,速度更快功耗更低,但是目前主要实现BLE 4.2+版本feature,其他5.0+feature功能后续迭代升级。

  • os:freertos的相关代码

  • samples:基于nimble的相关demo

2.1 modules

modules在NDK中主要为外设以及USB,2.4G等依赖的库文件

<home>/01_SDK/modules
.
└── hal
    └── panchip
        └── panplat
            └── pan1080
                └── bsp
                    ├── cmsis
                    ├── device
                    ├── peripheral
                    ├── radio
                    └── usb

2.2 controller

controller中主要包含了两个版本controller依赖的头文件

<home>/01_SDK/nimble/controller
.
├── dummy.txt
├── pan108x
│   └── shrd_utils
└── pan108x_spark
    └── include

2.3 host

host中包含nimble的主体实现以及其他必须的组件,目前nvs数据库存储使用是的kv_store组件,主要用于存储ble的配对信息。当然开发者也可以用于自己的项目存储数据。

<home>/01_SDK/nimble/host
.
├── kv_store
│   ├── mtb_init.c
│   ├── mtb_kvstore.c
│   ├── mtb_kvstore.h
│   └── mtd_kv_port.h
└── nimble
    ├── CODING_STANDARDS.md
    ├── LICENSE
    ├── NOTICE
    ├── README.md
    ├── RELEASE_NOTES.md
    ├── apps
    ├── babblesim
    ├── docs
    ├── ext
    ├── nimble
    ├── porting
    ├── repository.yml
    ├── targets
    ├── uncrustify.cfg
    └── version.yml
  • kv_store组件:

    • 支持任何可以建模为块设备的存储,包括内部闪存或外部闪存(例如通过QSPI)。

    • 通过实例化库的多个实例来对存储进行分区。

    • 设计为抗电源故障。

    • 旨在促进存储的均匀磨损。

  • nimble

    参考nimble专页介绍,nimble基于V1.5.0版本移植实现。

2.4 lib

lib中主要包含了两个版本controller主体实现的库文件:

<home>/01_SDK/nimble/lib
.
├── pan108x
│   └── ble.lib
└── pan108x_spark
    └── ble_spark.lib

Controller两个版本分别是Origin版本,该版本是全功能版本,但是具体实现优化比较少,执行速度较慢,代码相对较大,所对应的库为pan108x/ble.lib

另外一个版本是优化版本,内部代号为Spark,所对应的库为pan108x_spark/ble_spark.lib。该版本为精简和优化版本,速度更快功耗更低,但是目前主要实现BLE 4.2+版本feature,其他5.0+feature功能后续迭代升级。

2.5 OS

OS目前只包含freertos的主体代码

2.6 samples

nimble示例工程:

<home>/01_SDK/nimble/samples
.
├── ble_central
│   ├── include
│   ├── keil
│   ├── src
│   └── startup
├── bleprph_enc
│   ├── include
│   ├── keil
│   ├── src
│   └── startup
└── bleprph_hr
    ├── include
    ├── keil
    ├── src
    └── startup

目前包含三个工程

  • ble_central:central功能实现,可以连接bleprph_enc功能,工程中互相依赖的服务为ANS(Alert Notification Service).

  • bleprph_enc:除了和ble_central示例完成对测,也可以使用手机app通过蓝牙访问自定义特性,该特性为加密权限,会触发加密配对流程。

  • bleprph_hr:ble peripheral心跳设备演示。