Code Monkey home page Code Monkey logo

nimble's Introduction

RT-THREAD NIMBLE

nimble BLE STACK for RT-THREAD

1 介绍

NimBLE 软件包是 RT-Thread 基于 Apache NimBLE 开源蓝牙 5.0 协议栈的移植实现,该协议栈提供完整的 Host 层和 Controller 层支持,1.0 版本支持 Nordic nRF51 和 nRF52 系列芯片完整部署;最新版本可实现 RT-Thread 下支持 Host 层搭配串口连接外部 Controller 芯片使用。

1.1 主要特性

  • 扩展广播(LE Advertising Extensions)
  • 2Mbit/s比特率的物理层
  • 长距离编码(Coded PHY for LE Long Range)
  • 高速不可连接广播(High Duty Cycle Non-Connectable Advertising)
  • 新的跳频算法(Channel Selection Algorithm #2)
  • 隐私1.2(LE Privacy 1.2)
  • 安全管理(SM),支持传统配对(LE Legacy Pairing),安全连接(LE Secure Connections),特定秘钥分发(Transport Specific Key Distribution)
  • 链路层PDU数据长度扩展(LE Data Length Extension)
  • 多角色并发(主机(central)/从机(peripheral), server/client)
  • 同时广播和扫描
  • 低速定向广播(Low Duty Cycle Directed Advertising)
  • 连接参数请求(Connection parameters request procedure)
  • LE Ping
  • 完整的GATT客户端,服务端,以及子功能
  • 抽象HCI接口层

1.2 Profile和Service支持

  • 警报通知服务(ANS)
  • 即时报警服务(IAS)
  • 链路丢失服务(LLS)
  • 电池服务(BAS)
  • 设备信息服务(DIS)
  • 心率服务(HRS)
  • 自行车速度及步调(CSC)
  • 射频功率(TPS)

1.3 Mesh 特性

  • 广播和GATT承载(Advertising and GATT bearers)
  • PB-GATT 和 PB-ADV provisioning
  • 模型层(Foundation Models (server role))
  • 支持中继(Relay support)
  • 支持GATT代理(GATT Proxy)

更多关于 NimBLE Stack 的介绍请参考 http://mynewt.apache.org/latest/network/docs/index.html

1.4 目录结构

    📦NimBLE
    ┣ 📂apps 
    ┣ 📂docs
    ┣ 📂ext
    ┣ 📂nimble
    ┣ 📂porting
    ┗ 📂targets      
NimBLE
   ├───apps                   /* Bluetooth 示例应用程序 */
   │   ├───advertiser
   │   ├───blecent
   │   ├───blecsc
   │   ├───blehci
   │   ├───blehr
   │   ├───blemesh
   │   ├───blemesh_light
   │   ├───blemesh_shell
   │   ├───bleprph
   │   ├───bleuart
   │   ├───btshell
   │   ├───ext_advertiser
   │   └───ibeacon
   ├───docs                   /* 官方文档及 API 说明 */
   ├───ext
   │   └───tinycrypt          /* Tinycrypt 加密库 */
   ├───nimble
   │   ├───controller         /* Controller 实现 */
   │   │   ├───include
   │   │   └───src
   │   ├───drivers            /* Nordic 系列 Phy 驱动 */
   │   │   ├───nrf51
   │   │   └───nrf52
   │   ├───host               /* Host Stack(主机控制器)实现 */
   │   │   ├───include
   │   │   ├───mesh           /* Mesh 组网功能 */
   │   │   ├───pts            /* PTS 测试相关 */
   │   │   ├───services       /* 通用的 Profile */
   │   │   │   ├───ans
   │   │   │   ├───bas
   │   │   │   ├───bleuart
   │   │   │   ├───dis
   │   │   │   ├───gap
   │   │   │   ├───gatt
   │   │   │   ├───ias
   │   │   │   ├───lls
   │   │   │   └───tps
   │   │   ├───src
   │   │   ├───store
   │   │   ├───tools
   │   │   └───util
   │   ├───include
   │   │   └───nimble
   │   ├───src
   │   └───transport          /* HCI 传输抽象层 */
   │       ├───common         /* h4 协议工具 */
   │       ├───include
   │       └───rtthread       /* RT-Thread UART 对接 HCI 层代码 */
   └───porting                /* OS 抽象层及系统配置 */
       ├───nimble
       │   ├───include
       │   └───src
       └───npl
           └───rtthread       /* RT-Thread OS 接口实现 */
               ├───include
               │   ├───config /* NimBLE 协议栈配置选项 */
               │   ├───console
               │   ├───logcfg /* RT-Thread rtdbg 日志对接 */
               │   └───nimble
               └───src

1.5 许可证

NimBLE 软件包遵循 Apache-2.0 许可,详见 LICENSE 文件。

1.6 依赖

  • RT_Thread 3.0+

2 获取软件包

使用 NimBLE 软件包需要在 RT-Thread 的包管理中选中它,具体路径如下:

RT-Thread online packages
    IoT - internet of things  --->
--- NimBLE:An open-source Bluetooth 5.0 stack porting on RT-Thread
      Bluetooth Role support  --->      
      Host Stack Configuration  --->
      Controller Configuration  --->
      Bluetooth Mesh support  --->
      HCI Transport support  ---->
      Device Driver support  ----
      Log level (INFO)  --->
      Bluetooth Samples (Not enable sample)  --->
(1)   Maximum number of concurrent connections
[*]   Device Whitelist Support
(0)   The number of multi-advertising instances
[ ]   Extended Advertising Feature Support
      Version (latest)  --->

Bluetooth Role support : 配置 BLE角色支持(Central/Peripheral/Broadcaster/Observer) ;
Host Stack Configuration : 配置 Host 相关功能;
Controller Configuration : 配置 Controller 相关功能;
Bluetooth Mesh support : Mesh 特性支持及配置;
HCI Transport support : 配置HCI层传输方式 ;
Device Driver support : 底层 SOC Phy 支持 ;
Log level (INFO) : 配置协议栈日志等级;
Bluetooth Samples : 配置示例应用;
Version : 软件包版本选择;

配置完成后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

3 使用 NimBLE 软件包

1.0 版本配合独立的 nrf52832-nimble bsp 使用,参考 https://github.com/EvalZero/nrf52832-nimble

最新版本特性支持 RT-Thread 搭配 UART 外接蓝牙Controller卡片使用,参考以下文档:

外部蓝牙 Controller 选择及固件可参考 蓝牙控制器固件

4 注意事项

  • 如需使用 NimBLE Host层 和 Controller层完整部署,则需选择 1.0 版本运行。
  • 1.0 版本暂时只支持 Nodic nRF52832 nRF52840 MCU,参见 nrf52832-bsp
  • 最新版本目前仅能在 RT-Thread 上部署 Host 层,需要使用串口搭配外部蓝牙 Controller 芯片使用。
  • 文档中心相关资料:RT-Thread 标准版 -> 软件包 -> NimBLE 用户手册

5 联系方式 & 感谢

nimble's People

Contributors

armink avatar chenyingchun0312 avatar greedyhao avatar hyhkjiy avatar mysterywolf avatar supperthomas avatar waterfishj avatar yanlineng avatar zero-free avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nimble's Issues

BLE SAMPLE

最新的代码BLE SAMPLE 有些问题,广播可以,链接不行。

[TODO LIST] 待完成task

  • Nordic 原生态支持,目前支持不是很好只有1.0版本
  • 与upstream的联动或者方便更新
  • app上的example的理解和测试方法
  • hci uart 流控那边完善一下。

[npl] ble_npl_eventq_remove() 函数隐患

nimble ble_npl_eventq_remove() 函数仅从事件队列里移除某一个事件,而移植实现里复位清空了整个消息队列,这个是有隐患的,可能会导致协议栈工作不正常,需要修改。

void ble_npl_eventq_remove(struct ble_npl_eventq *evq, struct ble_npl_event *ev)
{
    if (!ev->queued)
    {
        return;
    }

    rt_mq_control((struct rt_messagequeue *)evq->q, RT_IPC_CMD_RESET, RT_NULL);
    ev->queued = false;
}

而且这个函数在 controller 和 host 里都有应用:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.