文档

固件

LoRa Edge自带两款软件跟踪参考设计:

  1. LoRa边缘跟踪器参考设计固件

  2. LoRa Edge Config(移动应用程序)

本节介绍LoRa边缘跟踪器参考设计固件。

固件源代码可以在LoRa GitHub库中找到:

https://github.com/Lora-net/lora_edge_tracker_ref_design

存储库包含SDK源代码和一个Keil®项目和一个GCC makefile。

LoRa Edge Tracker Reference Design SDK包含以下应用程序,您可以使用它们来演示LoRa Edge Tracker Reference Design的功能:

  • 跟踪应用程序:本节其余部分详细介绍。

  • 简单LoRaWAN®A/C类应用868/915MHz:该应用程序自动连接LoRa Network服务器,然后按指定的间隔定期发送上行链路。

  • 简单的wi - fi示例:根据应用中的Wi-Fi设置,modem定期扫描Wi-Fi。

  • 简单的GNSS示例:要求用户通过终端提供ASCII格式的UNIX日期。当调制解调器接收到该日期时,它根据应用程序中定义的GNSS设置定期执行GNSS扫描。

  • 简单的Tx连续应用程序:调制解调器开始发送连续波。

  • 简单的BLE独立应用:启动并停留在BLE模式。

  • 简单的低功率:将跟踪器置于尽可能低的电源模式。

  • 简单LoRaWAN时钟同步示例:该应用程序自动加入LoRaWAN网络服务器。然后LR1110时钟与应用层时钟同步服务(ALC Sync)同步。

  • 基于uart的固件更新应用程序示例:这个应用程序更新LR1110固件,它是从UART接收的。

跟踪应用程序功能

Tracker应用程序是高度可配置的。

以下功能嵌入到应用程序中:

  • EU868和US915地区的LoRaWAN连接

  • Wi-Fi被动扫描,可配置参数

  • 可配置参数的GNSS扫描

  • 运动检测

  • BLE连接:

    • 无线固件更新(FUOTA)

      • LoRa边缘跟踪器参考设计跟踪器应用

      • 罗拉基本™Modem-E

    • 年鉴更新

    • 应用程序配置

    • 内部日志读取(如果激活)

  • Semtech LoRa云设备及应用服务:

    • 微分年鉴更新

    • GNSS位置辅助更新

    • 流媒体

引导装载程序模式

当Tracker应用程序第一次启动时,它以Bootloader模式启动。如果安装了一个应用程序,它会执行以下操作:

  1. 根据LoRa边缘配置应用程序设置的配置,LoRa边缘跟踪参考设计可以使用Semtech LoRa云连接服务器的密钥推导算法连接到与lorwan兼容的网络服务器(如果由智能手机应用程序选择)。

  2. 当检测到运动时,LoRa边缘跟踪器参考设计:

    1. 每隔X秒或X分钟发送一次Wi-Fi扫描/导航消息(由用户定义)。Wi-Fi/GNSS扫描策略定义如下:

      1. 在第一根天线上扫描GNSS。默认情况下,当选择两个天线时,这是PCB天线。

      2. 如果((探测到的卫星数量>=4)&&(第二天线被激活))

        1. 扫描第二根天线上的GNSS。如果两个天线都被激活,且第一次扫描返回结果,则执行第二次扫描。

        2. 确定导航消息是否有效,以及哪一个是最好的。

      3. 如果GNSS扫描结果不理想或无效,则进行Wi-Fi扫描。

      4. 如果扫描结果足够的/有效的:

        1. 如果一个NAV有效,则发送GNSS结果。

        2. 如果GNSS结果不够好或无效,则发送Wi-Fi结果,但只有在Wi-Fi结果至少包含两个接入点时才会发送。如果没有扫描(Wi-Fi或GNSS)足够好,只发送传感器值。

    2. 一旦不再检测到移动,启动被动式Wi-Fi扫描/导航信息,再发送一次。

  3. 当霍尔效应传感器检测到磁铁存在时,切换到BLE模式。

  4. 在静态模式下发送一个“保持活动”帧(每X分钟/小时,由用户定义)。

祝福方式

BLE模式下的通信包括:

  • 配置跟踪设备参数。

  • 更新年鉴。

  • 更新LoRa Basics™Modem-E固件。

  • 更新跟踪器应用程序固件。

  • 读取内部日志。

  • 运行跟踪器/系统的自动诊断。

跟踪扫描策略

通过修改扫描优先级参数,可以改变扫描策略。三种扫描策略可用:

  • GNSS扫描优先

  • wi - fi扫描优先

  • 没有优先级

GNSS扫描优先

如果选择此策略,跟踪器将从GNSS扫描开始,如果GNSS扫描结果足够好,则不进行Wi-Fi扫描,只发送GNSS扫描结果。

如果两个GNSS天线(PCB和PATCH)都被激活,两个导航消息都会被分析,只有最好的一个才会被发送。

wi - fi扫描优先

如果选择了这种策略,追踪器将从Wi-Fi扫描开始。如果Wi-Fi扫描结果足够好(即至少扫描了两个接入点),则不进行GNSS扫描,只发送Wi-Fi扫描结果。

没有扫描的优先级

选择此策略后,跟踪器将执行GNSS扫描和Wi-Fi扫描。最好的结果将被发送。

传感器

发送的TLV传感器不同,取决于扫描结果是否足够好。

如果GNSS或Wi-Fi扫描足够好:

如果GNSS或Wi-Fi扫描不够好:

运输模式

跟踪器是在飞机模式下运输的。若要从飞行模式切换到默认操作模式,请通过BLE连接使用LoRa边缘配置应用程序相应地配置跟踪设备。

领导的指标

  • LoRa Edge Tracker参考设计板上有一个双色LED:

    • 当跟踪器接收到无线电信息(下行)时,LED变为黄色。

    • 当跟踪器发送无线电信息(上行链路)时,LED变为红色。

    • 黄色组件称为RX LED,红色组件是TX LED。

  • 该应用程序使用Lora Edge Tracker Reference Design的LED来显示以下事件:

    • 应用程序启动:led在100毫秒内闪烁两次。

    • 电池耗尽:led在500毫秒内闪烁5次。

    • 时钟同步:RX LED在100毫秒内闪烁4次。

    • 时钟同步:TX LED在100毫秒内闪烁4次。

    • BLE无线电活动:TX LED持续闪烁。

    • 霍尔效应传感器中断:RX LED打开。当中断被确认时LED被关闭。

    • 上行帧发送:TX LED闪烁一次。

    • 下行帧收到:RX LED闪烁一次。

状态机

/上传/ lora_edge_tracker / TrackerAppFlow.png

图40:跟踪器应用程序流

软件开发工具包

跟踪器的软件开发工具包(SDK)包含几个层,如图41所示。

/上传/ lora_edge_tracker / SDKLayers.png

图41:LoRa Edge Tracker参考设计固件SDK层

完整的固件由:

  • 一个应用程序

  • 一个通过无线方式管理应用程序固件更新的引导加载程序

固件(引导加载程序+应用程序)被编程到STM32WB的M4核心中。

Semtech采用STMicroelectronics提供的STM32WBXX_HAL。Semtech提供了一个称为SMTC_HAL的抽象,它旨在成为所有Semtech固件通用的HAL。

这个SMTC_HAL包含以下文件:

  • smtc_hal_adc.c

  • smtc_hal_gpio.c

  • smtc_hal_flash.c

  • smtc_hal_mcu.c

  • smtc_hal_rng.c

  • smtc_hal_rtc。

  • smtc_hal_spi.c

  • smtc_hal_i2c.c

  • smtc_hal_tmr.c

  • smtc_hal_tmr_list.c

  • smtc_bsp_uart.c

  • smtc_bsp_watchdog.c

LoRa Basics modem - e驱动程序层是用C编程语言实现的LR1110 modem驱动程序。这一层处理LoRaWAN上的Wi-Fi和GNSS扫描。它不涉及任何状态机或高级API。

GNSS、Wi-Fi和BLE线程层提供了高级api,可以轻松地为以下任务运行状态机:

  • GNSS扫描,给定参数。

  • Wi-Fi扫描,给定参数。

  • 跟踪器和运行LoRa边缘配置的移动设备之间的BLE连接。

负载格式规范

有效载荷应采用“标签”或“类型”/长度/值(TLV)格式。TLV通常用作数据通信协议,是通信协议中用于信息元素的编码方案。

标签而且长度大小都是固定的(一个字节),而大小呢价值字段是可变的。这些字段的用法如下:

  • 标签:一种二进制码,通常只是字母数字,表示这部分消息所代表的字段的类型

  • 长度:值字段的大小(通常以字节为单位)

  • 价值:大小可变的字节序列,其中包含这部分消息的数据

标签而且长度都是一个字节的固定大小。这意味着有256个操作码,长度可能为256字节。这足以涵盖所有可能的命令。

表3:跟踪器有效载荷TLV格式

标签

长度

价值

0

1

2到…长度的值

表4:接口命令输入有效载荷内容

标签

描述

笔记

来自PCB天线的导航

在GNSS PCB天线上扫描导航信息

导航来自贴片天线

在GNSS贴片天线上扫描导航信息

Wi-Fi扫描数据

Wi-Fi扫描数据

传感器数据

从加速度计收集的数据

跟踪器复位计数器

不同的重置计数器(主机和调制解调器)

跟踪日期

跟踪当前日期

跟踪器设置

跟踪器设置完成

表5:接口有效载荷格式

命令

标签

Len

价值

评论

来自PCB天线的导航

0 x06

变量

导航

导航来自贴片天线

0 x07

变量

导航

Wi-Fi扫描数据

0 x0e

变量

[版本(1字节)]时间戳(4字节)]RSSI(1字节)][MAC(6字节)]

>值为1字节大端字节序

MAC在大端序

传感器数据

0 x0d

1或7取决于版本

[(版本(4位)<< 4)|(移动历史(4位))(v0 & v1)][温度(2字节)(v1)][调制解调器充电(2字节)(v1)][电压(2字节)(v1)]

>值为1字节大端字节序

跟踪器复位计数器

0 x0c

6

[主机重置(2字节)][被主机重置调制解调器(2字节)][主机重置本身(2字节)]

>值为1字节大端字节序

跟踪日期

0 x46

4

跟踪当前日期

>值为1字节大端字节序

跟踪器设置

0 x4c

变量

TLV内置跟踪器设置

>值为1字节大端字节序

例1。GNSS载荷:07460142 e1092808c23ca944a72ae9034452b5bb61a600e0a4f28ec5300f80511d2886367d86b25a9c95f4c5186c90c09432e3d41eca28dc53b8a99640d3249874557f1fd7873f01

[标记][LEN] (NAV)

在这种情况下:

[07] [46] [0142 e1092808c23ca944a72ae9034452b5bb61a600e0a4f28ec5300f80511d2886367d86b25a9c95f4c5186c90c09432e3d41eca28dc53b8a99640d3249874557f1fd7873f01]

0x07为贴片天线的标签

0x46是NAV的长度

例2。wi - fi载荷:0 e1a016107c512cc18d6c7afdc18b70887c6693620b1249504ff409c

[0x0E][Len][[版本(1byte)][时间戳in sec (4bytes)] [RSSI_1(1字节)][MAC_1(6字节)][RSSI_2][MAC_2] [RSSI_3][MAC_3]]

在这种情况下:

e [0] [1] [01] [6107 c512] [CC18D6C7AFDC] [18] [B70887C66936] [20] [B1249504FF40] c [9]

0x0E为Wi-Fi扫描的标签

0x1A为Wi-Fi扫描的长度

0x01为TLV版本

0x6107C512时间戳单位为秒(MSB优先)

int8值中的RSSI

MAC首先是MSB

例3。全传感器载荷:0D07100B54001D0CB2

[0D][Len][版本|加速度计移动历史][温度][调制解调器- e电荷][电压]

在这种情况下:

[0 d] [07] [10] [0 b54] [001 d] [0 cb2]

0x0D是传感器的标签

0x07是传感器的长度

0x10是版本和加速度计移动历史,这里是版本1和移动历史0

  • 跟踪器的最后四个上行的每个移动历史记录都表示在这个位域的4个最低有效字节(LSB)上。

0x0B54是温度(MSB优先),单位为摄氏度

0x001D为电荷(MSB优先),单位为毫安时

0x0CB2是电压(MSB优先),单位为mV

例4。基本传感器载荷:0D0101

[0D][Len][版本|加速度计移动历史]

在这种情况下:

[0 d] [01] [01]

0x0D是传感器的标签

0x01为传感器的长度

0x01是版本和加速度计移动历史,这里是版本0和移动历史1

  • 跟踪器最后四次上行的每一次移动历史记录都表示在该位域的四个LSB上。

表6:版本和移动历史位域

最大有效字节数(MSB)

LSB

7……4

3.

2

1

0

内容

版本

Fcnt-3

Fcnt-2

Fcnt-1

Fcnt

每一位表示跟踪器是否移动:

  • 0: LoRa边缘跟踪器参考设计没有移动

  • 1: LoRa边缘跟踪器参考设计已移动

例子:

  • 移动历史位域:0b0001。这意味着追踪器在最后一条上行链路上移动了。

  • 移动历史位域:0b 1000。这意味着追踪器在3个上行链路之前移动了。

  • 移动历史位域:0b0011。这意味着追踪器在之前和刚才移动了一条上行链路。

可配置的设备参数

本节描述可通过BLE和LoRaWAN访问的跟踪器参数。

通信应采用TLV格式,与有效载荷使用的一样。LoRa Edge Config应用程序和LoRaWAN支持的可配置参数为:

表7:可配置参数

命令

标签

Len

祝福

LoRaWAN

价值

评论

弗兰克-威廉姆斯版本

0 x01

0

X

X

返回len 3(主要/次要/次次要)

LoRaWANDevEUI

0 x02

8

X

X

MSB第一

得到LoRaWANDevEUI

0 x03

0

X

X

返回len 8

LoRaWANJoinEui

0 x04

8

X

X

MSB第一

得到LoRaWANJoinEui

0 x05

0

X

X

返回len 8

LoRaWANAppKey

0 x06

16

X

X

MSB第一

得到LoRaWANAppKey

0 x07

0

X

X

返回len 16

GNSS功能启用

(

1

X

X

len返回1

得到GNSS功能启用

0 x09

0

X

X

0 =禁用;1 =启用

GNSS星座

0 x0a

1

X

X

0 =仅GPS;1 =仅北斗;2 = GPS和北斗

得到GNSS星座

0 x0b

0

X

X

len返回1

GNSS援助位置

0 x0c

8

X

X

返回len 8 4字节(0-3)用于纬度;4字节(4-7)表示经度

得到GNSS援助位置

0 x0d

0

X

X

GNSS天线使用

0 x0e

1

X

X

返回len 1 1 = Patch;2 =电路板;3 =两

得到GNSS天线使用

0 x0f

0

X

X

GNSS扫描模式

0 x10

1

X

X

返回len 1 1 = Assisted 2 = Autonomous

得到GNSS扫描模式

0 x11

0

X

X

GNSS搜索模式

0 x14

1

X

X

返回len 1 0 =默认值;1 =尽力

得到GNSS搜索模式

0连接

0

X

X

无线网络功能启用

0 x16

1

X

X

返回len 1 0 =禁用1 =启用

得到无线网络功能启用

0 x17

0

X

X

无线网络渠道

0 x18

8

X

X

返回len 2位字段,长度为2字节

得到无线网络渠道

0 x19

0

X

X

无线网络类型

0 x1a

1

X

X

返回len 1 1 =类型B;2 = G/N型

得到无线网络类型

0 x1b

0

X

X

无线网络扫描模式

0 x1c

1

X

X

返回len 1 1 =模式信标;2 =模式信标和包

得到无线网络扫描模式

0 x1d

0

X

X

无线网络颁布新

0 x1e

1

X

X

返回len 1 1到255

得到无线网络颁布新

0 x1f

0

X

X

无线网络马克斯结果

0 x20

1

X

X

返回len 1 1到32

得到无线网络马克斯结果

0 x21

0

X

X

无线网络超时

0将

2

X

X

返回len 2 20到5000

得到无线网络超时

0 x23

0

X

X

使用加速度计

0 x24

1

X

X

返回len 1 0 =禁用1 =启用

得到使用加速度计

0 25

0

X

X

扫描时间间隔

0 x26

2

X

X

返回len 2 10到1800

得到扫描时间间隔

0 x27

0

X

X

保持活着框架时间间隔

0 x28

2

X

X

返回len 2 10到1440

得到保持活着框架时间间隔

0 x29

0

X

X

冲洗内部日志

0 x2a

0

X

X

返回len 0

重置董事会

0 x2b

0

X

X

返回len 0

年鉴更新

0 x2c

12

X

返回len 12 Block ID[2字节]almanac fragment[10字节]

得到最后的年鉴更新日期

0 x2d

4

X

X

返回len 4 Date在秒

Fuota调制解调器开始

0 x31

146

X

块ID[2字节]调制解调器图像片段[144字节]

得到硬件版本

0 x32

0

X

X

返回len 4

得到LoRaWAN堆栈版本

0 x33

0

X

X

返回len 2

得到调制解调器版本

0 x34

0

X

X

返回len 3(主要/次要/次次要)

得到地区

0 x36

0

X

X

1 = eu868 / 3 = us915

飞机模式

0 x37

1

X

0 =禁用/ 1 =启用

得到飞机模式

0 x38

0

X

X

0 =禁用/ 1 =启用

得到

0 x39

0

X

X

返回len 4

MSB第一

使用Semtech罗拉加入服务器

0 x3a

1

X

X

0 =禁用/ 1 =启用

得到使用Semtech罗拉加入服务器

0 x3b

0

X

X

0 =禁用/ 1 =启用

扫描优先级

0 x3c

1

X

X

0 = GNSS优先级;1 = Wi-Fi优先级2 =无优先级

得到扫描优先级

0 x3d

0

X

X

0 = GNSS优先级;1 = Wi-Fi优先级2 =无优先级

美国存托凭证配置文件

0 x3e

1

X

X

0 =网络控制;1 =移动远程2 =移动低功耗;3 =自定义

得到美国存托凭证配置文件

0 x3f

0

X

X

0 =网络控制/ 1 =移动远程/ 2 =移动低功耗;3 =自定义

得到董事会电压

0 x40

0

X

X

返回电压在mV上2字节

内部日志

0 x41

1

X

X

0 =禁用/ 1 =启用

得到内部日志

0

X

X

内部日志

0 x43

146

X

见5.2.8章

得到芯片行,

0 x44

0

X

X

返回len 8

MSB第一

得到调制解调器状态

0 x45

0

X

X

包含调制解调器状态的位字段,返回len 2字节

MSB第一

得到调制解调器日期

0 x46

0

X

X

UTC日期秒,返回len 4字节

MSB第一

得到内部日志剩下的空间

0 x49

0

X

X

%中剩余空间,返回len 1字节

得到积累负责

0 x4a

0

X

X

值以mAh为单位,返回len 4字节

MSB第一

重置积累负责

0 x4b

0

X

X

得到跟踪器设置

0 x4c

0

X

X

得到重置计数器

0 x4d

0

X

X

MSB第一

重置重置计数器

0 x4e

0

X

X

得到上行发送最后的下行

0×50

0

X

X

返回len 2字节

MSB第一

得到last_nb_sv_detected

0 x51

0

X

X

返回len 1字节

得到last_nb_wifi_detected

0 x52

0

X

X

返回len 1字节

得到系统理智检查

0 x53

0

X

X

返回len 1字节位0对应GNSS扫描0不成功/ 1:成功位1对应Wi-Fi扫描0不成功/ 1:成功位2对应application downlink RX 0不成功/ 1:成功

解析内部日志

本章介绍如何解析从MCU内部闪存读取的每次扫描。

下面是内存闪存中每次记录扫描的结构:

表8:诊断命令
0.1 2 3:4 5:8 9:10
Scan_len nb_elem Scan_number Scan_timestamp (sec) Accelerometer_x(毫克)
11:12 13:14 15:16 十七17 + n 22 + 18 + n: n
Accelerometer_y(毫克) Accelerometer_z(毫克) 温度(°C) tlv (GNSS和或WiFi) Next_scan_address

第一次扫描总是位于用户的开始位置flash_addr_start地址。如果内部日志上下文不存在,则在flash初始化期间计算此地址。每个扫描结构都包含下一个扫描结构的flash地址。

唯一可变的元素是TLV部分,它可以包含GNSS扫描和/或Wi-Fi扫描。这个元素也可以为空。

表9:GNSS扫描

0

1

2: 2 +兰

标签

Len

导航信息

GNSS_SCAN有两种可能的标记:

  • 0 x01: TAG_GNSS_PCB_ANTENNA

  • 0 x02: TAG_GNSS_PATCH_ANTENNA

表10:Wi-Fi扫描

0

1

2: 2 + 6

2 + 6 + 1

...

m: n + 7 *

2 +兰

标签

Len

MAC_Address

RSSI

...

MAC_Address

RSSI

在哪里MAC_Address总是6个字节,RSSI总是一个字节。

Wi-Fi_SCAN有一个可能的标签:

  • 0 x03: TAG_WIFI_ANTENNA

如何Flash M0+专用于BLE

Semtech LoRa边缘跟踪参考设计在M0+核心中编程了BLE堆栈。然而,如果由于某种原因,堆栈需要重新编程或更新,以下是需要遵循的步骤:

  1. 安装STM32CubeProgrammer

  2. 安装STM32WB Cube软件包。

/上传/ lora_edge_tracker / InstallSTM32WBxx.png

图42:安装STM32WBxx Package

一旦安装,必要的。斌文件位于以下文件夹内:

C:用户…STM32CubeRepositorySTM32Cube_FW_WB_V1.8.0ProjectsSTM32WB_Copro_Wireless_BinariesSTM32WB5x

  1. 复制并粘贴。斌文件(s)到STM32CubeProgrammer箱子文件夹:

C: \程序文件\意法半导体\ STM32Cube \ STM32CubeProgrammer \ bin

  1. 将STM32WB55切换到引导加载器模式。

    1. 在跟踪器重置时保持BOOT0引脚高。

    2. 将STM32WB55 USE线连接到计算机/笔记本电脑。

  2. 打开命令提示窗口。

    1. 导航到STM32CubeProgrammer bin文件夹:cdC: \程序文件\意法半导体\ STM32Cube \ STM32CubeProgrammer \ bin

    2. 删除现有固件:STM32_Programmer_CLI.exe- c端口= usb1-fwdelete

    3. 阅读并升级FUS版本:STM32_Programmer_CLI.exe- c端口= usb1-r320 x200300301

/上传/ lora_edge_tracker / CheckFUSVersion.png

图43:检查FUS版本

根据FUS版本不同,使用以下3个命令安装栈固件。

如果付版本是:

  • 0 x20030030: 00050300: FUSv0.5.3,执行命令1、2和3。

  • 0x20030030: 01000100或01000200:FUSv1.0.x,执行命令2和命令3。

  • 0 x20030030: 01010000: FUSv1.1.0,执行命令3。

堆栈固件命令:

  1. STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_FUS_fw_1_0_2.bin0 x080ec000firstinstall = 0

  2. STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_FUS_fw.bin0 x080ec000firstinstall = 0

  3. STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_BLE_Stack_full_fw.bin0 x080cb000firstinstall = 1

/上传/ lora_edge_tracker / FlashBLEStack.png

图44:Flash BLE栈固件

Baidu
map