Forest-Rain 672d1254fe Update README.md 5 ani în urmă
..
README.md 672d1254fe Update README.md 5 ani în urmă

README.md

LoRaWAN-ED-Stack软件包使用说明

1 简介

LoRaWAN-ED-Stack软件包是基于RTOS(RT-Thread)实现的LoRaWAN 终端设备侧(End-Device)的协议栈,可以非常方便进行LoRaWAN协议栈学习、快速搭建基于LoRaWAN通信的原型产品、应用产品等。 LoRaWAN-ED-Stack软件包在LoRaWAN开源协议栈LoRaMAC-Node基础上,进一步构建实现。LoRaWAN-ED-Stack使用LoRa-Radio-Driver软件包作为物理层lora芯片的底层驱动,使用Multi-Rtimer软件包或者RT-Thread内核RT_Tick提供MAC层的定时\超时服务。

  • LoRaWAN-ED-Stack软件包当前主要功能特点:
    • LoRaWAN技术规范版本(LoRaWAN Specification)
      • LoRaWAN 1.0.x
        • LoRaWAN 1.0.4
          • 当前基于LoRa联盟官方 LoRaMAC-node 4.4.4
      • LoRaWAN 1.1.x
        • LoRaMAC-node 5.x
    • 可通过menuconfig配置LoRaWAN MAC层、PHY层、应用层等相关参数
      • LoRaWAN PHY层主要配置参数:
      • LoRaWAN地区规范(region)
        • CN470
        • CN470自定义同频
        • EU868
        • AS923
        • US915
      • 缺省上行速率(LoRaWAN Default Datarate)
      • 缺省信道列表(Channel Mask)
      • LoRaWAN MAC主要配置参数:
      • 设备类型(Device Type)
        • Class A
        • Class B
        • Class C
      • LoRaWAN数据消息类型(Data Message Type)
        • 确认帧(Confirm Frame)
        • 非确认帧(Unconfirm Frame)
        • LoRaWAN应用端口号(Application Fport)
        • ADR功能
      • LoRaWAN应用层当前提供如下应用实例
      • lorawan-ed-test-shell
        • 用于配置并测试LoRaWAN End-Device Class A \ Class C
      • 功能按需裁剪
      • 可通过宏定义对ClassA、ClassB、Class C、OTAA、ABP等功能进行灵活裁剪
      • 可通过宏定义对日志信息裁剪,详细的协议层日志交互信息,便于前期调试、学习等
        • APS层(入网、通信、用户数据包等)
        • MAC层(MAC请求、MAC命令等)
        • PHY(上下行通信频率、速率等)等的日志输出
      • 支持IDE工具
      • RT-Studio 1.1.4
      • MDK 5
      • 参数掉电保存
      • LoRaWAN的配置参数支持掉电保存
      • 对接LoRaWAN服务器平台
      • 利尔达unicore服务器
        • CN470 & Class A
        • CN470自定义同频 & Class A\C
      • 腾讯云IoT Explorer
        • CN470 & Class A\C

1.1 LoRaWAN-ED-Stack软件包组织结构

image.png

  • app

    • lorawan-ed-test
      • lorawan-ed-test-shell.c
        • End-Device shell测试实现
    • aps 应用支持子层,该文件提供了LoRaWAN End-Device应用层服务接口
      • basic 基础功能
        • lorawan-ed-aps.c
        • 提供应用层状态机,包括入网、通信、认证程序
        • lorawan-ed-certificate.c
        • 提供LoRa联盟认证测试程序
      • advannced 高级功能,当前尚未支持
        • 提供分包、时间同步、组播等功能
    • common
      • utilities.c
        • 提供随机数、拷贝等常用功能函数
      • lorawan-ed-debug.h
        • 用于日志输出控制
    • mac
      • LoRaWAN End-Device Speicificaition的具体实现,主要包括
      • Class A
      • Class B
      • Class C
      • Mac Command
      • Ctypto
      • multi-rtimer
        • mac层的定时功能采用multi-rtimer软件包提供的定时服务
        • 若未使能multi-rtimer软件包,则使用系统rt tick提供定时服务。
    • phy

      • LoRaWAN End-Device regional parameters实现,主要包括
      • CN470
      • 自定义CN470S
      • EU868
      • AS923
      • US915
      • lora-radio-driver

        • LoRa芯片驱动使用lora-radio-driver软件包

          2 LoRaWAN-ED-Stack软件包使用说明

          2.1 依赖

  • RT-Thread 3.0.1+

  • LoRa-Radio-Driver

  • 可选软件包

    • Multi-Rtimer
      • 若使能multi-rtimer软件包,mac层的定时功能采用multi-rtimer提供的服务,否则使用系统rt tick提供定时功能。
    • easyflash
      • 硬件支持easyflash
      • 用于将LoRaWAN-ED的配置参数保存到Flash,实现掉电存储
  • 可选内核组件

    • ulog组件,开启后,可得到更详细的日志提示信息等

      • lorawan-ed-stack内部使用ulog接口,使能ulog,可看到更多调试输出信息
      • lorawan-ed-test-shell.c使用ulog接口,用于打印测试信息

        RT-Thread Components --->
          Utiliess --->
              [*] Enable ulog
        [*] Enable ISR log.
        

2.2 获取软件包

使能LoRaWAN-ED-Stack软件包,根据实际需要,配置LoRaWAN End-Device的相关参数:

  1. 选择LoRaWAN Specification版本,当前已测试版本1.0.X
  2. 配置LoRaWAN-ED mac参数,设置设备类型(Class A\Class B\Class C)、激活类型(OTAA\ABP)、数据消息类型(unConfirm\Confirm)、ADR使能\关闭等
  3. 配置LoRaWAN-ED phy参数,设置频段(Regional)、工作信道(Channel mask)、缺省上行速率等
  4. 配置LoRaWAN-ED Debug信息,根据需求,使能不同层的日志输出
  5. 选择LoRaWAN End-Device测试示例

    1. LoRaWAN-ED-Test-Shell.c

      1. Class A\Class C入网、数据通信、LoRaWAN上下行网络链路质量测试等

        2.2.1 MDK 5开发环境

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

        RT-Thread online packages --->
        IoT - Internet of things --->
        [*] lorawan_ed_stack: LoRaWAN End-Device Stack.                                                                               │ │
         Select LoRaWAN Specification (v1.0.X)  --->                                                                             │ │
         LoRaWAN Network Attribute (Public Network)  --->                                                                        │ │
         LoRaWAN Alliance Certificate Test (Disable)  --->                                                                       │ │
         Select LoRaWAN-ED Mac Parameters  --->                                                                                  │ │
         Select LoRaWAN-ED Phy Parameters  --->                                                                                  │ │
         Select LoRaWAN-ED Debug  --->                                                                                           │ │
         Select LoRaWAN-ED-Stack Example  --->                                                                                   │ │
         Version (latest)  --->
        

        2.2.2 RT-Thread Studio开发环境

        image.png

        3 应用实例

        3.1 lorawan-ed-test-shell

        lorawan-ed-test-shell提供了常用的shell命令,用来读写LoRaWAN End-Device相关MAC、PHY等参数,并进行LoRaWAN入网、Class A通信等测试验证。 当前支持的命令如下
        image.png | 序号 | 命令类型 | finish命令 | 说明 | | --- | --- | --- | --- | | 1 | 参数设置与读取 | lorawan deveui | 设置\读取DevEUI
        - 有,设置DevEUI的值,16进制,8个字节
        - 无 para1,读取当前DevEUI的值
        | | 2 | 参数设置与读取 | lorawan appeui  | 设置\读取AppEUI
        - 有,设置AppEUI的值,16进制,8个字节
        - 无 para1,读取当前AppEUI的值
        | | 3 | 参数设置与读取 | lorawan appkey  | 设置\读取AppKey
        - 有,设置AppKey的值,16进制,16个字节
        - 无 para1,读取当前AppKey的值
        | | 4 | 参数设置与读取 | lorawan devaddr  | 设置\读取DevAddr
        - 有,设置DevAddr的值,16进制,4个字节,仅适用于ABP
        - 无 para1,读取当前DevAddr的值
        | | 5 | 参数设置与读取 | lorawan appskey  | 设置\读取AppSKey
        - 有,设置AppSKey的值,16进制,16个字节,仅适用于ABP
        - 无 para1,读取当前AppSKey的值
        | | 6 | 参数设置与读取 | lorawan nwkskey  | 设置\读取NwkSKey(NwkSEncKey)
        - 有,设置NwkSKey的值,16进制,16个字节,仅适用于ABP
        - 无 para1,读取当前NwkSKey的值
        | | 7 | 参数设置与读取 | lorawan class  | 设置\读取 Class类型
        - 有,设置Class的值,1个字节
        - 0 - Class A
        - 1 - Class B
        - 2 - Class C
        - 无 para1,读取当前Class的值
        | | 8 | 参数设置与读取 | lorawan confirm  | 设置\读取 数据传输类型 Confirm\Unconfirm
        - 有,设置数据传输类型的值,1个字节
        - 0 - UnConfirm
        - 1 - Confirm
        - 无 para1,读取当前数据传输类型的值
        | | 9 | 参数设置与读取 | lorawan activation  | 设置\读取 设备激活方式
        - 有,设置激活方式的值,1个字节
        - 0 - OTAA
        - 1 - ABP
        - 无 para1,读取当前激活方式的值
        | | 10 | 入网 | lorawan join | 启动入网
        - nbtrials:单次最大入网重试次数
        - 0 - 停止入网
        - 非0 -  入网重试次数
        - interval:入网包之间的发送间隔,单位:秒,最小周期8s
        | | 11 | 数据通信 | lorawan ping | LoRaWAN网络上下行链路质量测试
        在设备入网后,执行该指令,LoRaWAN终端发送指定数量的Link Check测试数据包,测试完成后,shell输出当前上下行无线链路质量结果
        - nbtrials:每次ping测试,发送的数据包总数
        - 缺省nbtrials = 10
        - interval:ping数据包之间的发送间隔,单位:秒
        | | 12 | 数据通信 | lorawan tx | 发送Class A数据包
        - mode 发送模式
        - 0 - 停止周期性发送
        - 1 - 立即发送一次
        - 2 ~ 1500 - 按次数发送,执行该指令后,设备发送指定次数的数据包后停止,发送间隔为10s
        - >1500 - 按周期发送,单位ms,执行该指令后,设备周期性发送
        - cfm 数据消息类型
        - 0 - 非确认帧
        - 1 - 确认帧
        - port 应用端口号
        - 1~223
        - len - 数据包长度
        - data - 自定义发送数据包{x1,x2,x3...},16进制格式
        | | 13 | 保存 | lorawan save | 保存配置信息到Flash(需要硬件支持easyflash),缺省情况下,默认保存为
        - type 保存类型
        - dev - 设备身份信息(DevEUI、AppEUI、AppKey等)
        - cfg - LoRaWAN工作参数(Class Type、OTAA\ABP等)
        | | 14 | 恢复出厂设置 | lorawan factory  | 恢复LoRaWAN工作参数为出厂值 |

        测试示例: image.png OTAA入网测试(标准CN470-OTAA-ClassA) image.png OTAA入网测试(CN470自定义-OTAA-ClassA) image.png 非确认帧通信测试(CN470自定义-OTAA-ClassA) image.png 确认帧测试(标准CN470-OTAA-ClassA) image.png lorawan ping测试(标准CN470-OTAA-ClassA) image.png 入网与服务器主动下发下行数据测试(标准CN470-OTAA-Class C) image.png
        ABP直接通信测试(CN470自定义-ABP-Class A-掉电参数)

        3.2 应用层调用说明

        1. 初始化lorawan协议栈

          /* Configure the LoRaWAN End-Device Stack*/
          lorawan_ed_stack_init(&lorawan_ed_user_app_callback, &lorawan_ed_init_params);
          
        2. 启动入网

          LoRaMacStatus_t lorawan_ed_start_join_network( void )
          
        3. 发送上行数据包

          bool lorawan_ed_send(lorawan_ed_appdata_t* AppData)
          
        4. 接收下行数据

          static void lorawan_ed_receive_message(lorawan_ed_appdata_t *app_data)
          

          4 版本更新历史 Change log

        4.1 LoRaWAN-ED-Stack 1.0.0 pre-released 20.10.27

        • LoRaWAN-ED-Stack1.0.0 基于LoRaMac-node 4.4.4 released版本
          • 支持lorawan regional parameters 1.0.3
          • 协议栈本身的实现最大程度保持LoRaMAC-node保持一致,便于后续持续更新
          • 修复下行Buffer潜在的溢出风险漏洞 (腾讯安全团队)
        • 支持lorawan-ed-test-shell命令快速进行LoRaWAN End-Device参数配置与功能验证、测试等
        • 支持menuconfig进行lorawan协议参数的灵活配置
        • 支持LoRaWAN地区规范(region)
          • CN470
          • CN470自定义同频

        5 参考