固件¶
LoRa Edge自带两款软件™跟踪参考设计:
LoRa边缘跟踪器参考设计固件
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模式启动。如果安装了一个应用程序,它会执行以下操作:
根据LoRa边缘配置应用程序设置的配置,LoRa边缘跟踪参考设计可以使用Semtech LoRa云连接服务器的密钥推导算法连接到与lorwan兼容的网络服务器(如果由智能手机应用程序选择)。
当检测到运动时,LoRa边缘跟踪器参考设计:
每隔X秒或X分钟发送一次Wi-Fi扫描/导航消息(由用户定义)。Wi-Fi/GNSS扫描策略定义如下:
在第一根天线上扫描GNSS。默认情况下,当选择两个天线时,这是PCB天线。
如果((探测到的卫星数量>=4)&&(第二天线被激活))
扫描第二根天线上的GNSS。如果两个天线都被激活,且第一次扫描返回结果,则执行第二次扫描。
确定导航消息是否有效,以及哪一个是最好的。
如果GNSS扫描结果不理想或无效,则进行Wi-Fi扫描。
如果扫描结果是足够的/有效的:
如果一个NAV有效,则发送GNSS结果。
如果GNSS结果不够好或无效,则发送Wi-Fi结果,但只有在Wi-Fi结果至少包含两个接入点时才会发送。如果没有扫描(Wi-Fi或GNSS)足够好,只发送传感器值。
一旦不再检测到移动,启动被动式Wi-Fi扫描/导航信息,再发送一次。
当霍尔效应传感器检测到磁铁存在时,切换到BLE模式。
在静态模式下发送一个“保持活动”帧(每X分钟/小时,由用户定义)。
跟踪扫描策略¶
通过修改扫描优先级参数,可以改变扫描策略。三种扫描策略可用:
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扫描足够好:
发送基本TLV传感器。有关更多信息,请参见“有效载荷格式规范。html#有效载荷格式规范”_.
如果GNSS或Wi-Fi扫描不够好:
发送完整TLV传感器。有关更多信息,请参见“有效载荷格式规范。html#有效载荷格式规范”_.
运输模式¶
跟踪器是在飞机模式下运输的。若要从飞行模式切换到默认操作模式,请通过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闪烁一次。
状态机¶
图40:跟踪器应用程序流
软件开发工具包¶
跟踪器的软件开发工具包(SDK)包含几个层,如图41所示。
图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字节。这足以涵盖所有可能的命令。
标签 |
长度 |
价值 |
---|---|---|
0 |
1 |
2到…长度的值 |
标签 |
描述 |
笔记 |
---|---|---|
来自PCB天线的导航 |
在GNSS PCB天线上扫描导航信息 |
|
导航来自贴片天线 |
在GNSS贴片天线上扫描导航信息 |
|
Wi-Fi扫描数据 |
Wi-Fi扫描数据 |
|
传感器数据 |
从加速度计收集的数据 |
|
跟踪器复位计数器 |
不同的重置计数器(主机和调制解调器) |
|
跟踪日期 |
跟踪当前日期 |
|
跟踪器设置 |
跟踪器设置完成 |
命令 |
标签 |
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上。
最大有效字节数(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支持的可配置参数为:
命令 |
标签 |
Len |
祝福 |
LoRaWAN |
价值 |
评论 |
---|---|---|---|---|---|---|
|
0 x01 |
0 |
X |
X |
返回len 3(主要/次要/次次要) |
|
|
0 x02 |
8 |
X |
X |
MSB第一 |
|
|
0 x03 |
0 |
X |
X |
返回len 8 |
|
|
0 x04 |
8 |
X |
X |
MSB第一 |
|
|
0 x05 |
0 |
X |
X |
返回len 8 |
|
|
0 x06 |
16 |
X |
X |
MSB第一 |
|
|
0 x07 |
0 |
X |
X |
返回len 16 |
|
|
( |
1 |
X |
X |
len返回1 |
|
|
0 x09 |
0 |
X |
X |
0 =禁用;1 =启用 |
|
|
0 x0a |
1 |
X |
X |
0 =仅GPS;1 =仅北斗;2 = GPS和北斗 |
|
|
0 x0b |
0 |
X |
X |
len返回1 |
|
|
0 x0c |
8 |
X |
X |
返回len 8 4字节(0-3)用于纬度;4字节(4-7)表示经度 |
|
|
0 x0d |
0 |
X |
X |
||
|
0 x0e |
1 |
X |
X |
返回len 1 1 = Patch;2 =电路板;3 =两 |
|
|
0 x0f |
0 |
X |
X |
||
|
0 x10 |
1 |
X |
X |
返回len 1 1 = Assisted 2 = Autonomous |
|
|
0 x11 |
0 |
X |
X |
||
|
0 x14 |
1 |
X |
X |
返回len 1 0 =默认值;1 =尽力 |
|
|
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在秒 |
|
|
0 x31 |
146 |
X |
块ID[2字节]调制解调器图像片段[144字节] |
||
|
0 x32 |
0 |
X |
X |
返回len 4 |
|
|
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第一 |
|
0 x3a |
1 |
X |
X |
0 =禁用/ 1 =启用 |
|
|
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× |
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第一 |
|
0 x51 |
0 |
X |
X |
返回len 1字节 |
|
|
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内部闪存读取的每次扫描。
下面是内存闪存中每次记录扫描的结构:
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扫描。这个元素也可以为空。
0 |
1 |
2: 2 +兰 |
|
---|---|---|---|
标签 |
Len |
导航信息 |
GNSS_SCAN有两种可能的标记:
0 x01: TAG_GNSS_PCB_ANTENNA
0 x02: TAG_GNSS_PATCH_ANTENNA
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堆栈。然而,如果由于某种原因,堆栈需要重新编程或更新,以下是需要遵循的步骤:
安装STM32WB Cube软件包。
图42:安装STM32WBxx Package
一旦安装,必要的。斌文件位于以下文件夹内:
C:用户…STM32CubeRepositorySTM32Cube_FW_WB_V1.8.0ProjectsSTM32WB_Copro_Wireless_BinariesSTM32WB5x
复制并粘贴。斌文件(s)到STM32CubeProgrammer箱子文件夹:
C: \程序文件\意法半导体\ STM32Cube \ STM32CubeProgrammer \ bin
将STM32WB55切换到引导加载器模式。
在跟踪器重置时保持BOOT0引脚高。
将STM32WB55 USE线连接到计算机/笔记本电脑。
打开命令提示窗口。
导航到STM32CubeProgrammer bin文件夹:
cdC: \程序文件\意法半导体\ STM32Cube \ STM32CubeProgrammer \ bin
删除现有固件:
STM32_Programmer_CLI.exe- c端口= usb1-fwdelete
阅读并升级FUS版本:
STM32_Programmer_CLI.exe- c端口= usb1-r320 x200300301
图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。
堆栈固件命令:
STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_FUS_fw_1_0_2.bin0 x080ec000firstinstall = 0
STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_FUS_fw.bin0 x080ec000firstinstall = 0
STM32_Programmer_CLI.exe- c端口= usb1-fwupgradestm32wb5x_BLE_Stack_full_fw.bin0 x080cb000firstinstall = 1
图44:Flash BLE栈固件