LPMD002用户手册--SDK使用开发指南



1本文目的

通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。

注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。

2 SDK开发环境

IAR6.20 FOR ARM

3 SDK功能简介

3.1完全符合LoraWan 1.0.1协议标准

3.2支持ClassA和ClassC协议

3.3支持ABP和OTAA激活

3.4支持上下行双向通信

3.5支持低功耗

4 SDK使用方法

4.1安装IDE:

IAR6.20 FOR ARM

4.2打开工程:

LPKT002-SDK-V2.00\IAR\loranode.eww

4.3确认工程宏定义

图片40.png 

 

4.4编译工程

结果如下所示,

图片41.png 

 

4.5关键参数和宏定义说明:

4.5.1头文件“Comissioning.h”及基础参数

该头文件定义了lorawan的基础配置参数,如下:

宏定义

说明

#define OVER_THE_AIR_ACTIVATION

1-OTAA激活

0-ABP激活

#define LORAWAN_PUBLIC_NETWORK

True-公开网络

False-私有网络

#define LORAWAN_DEVICE_EUI

DEVICE_EUI,8字节

OTAA模式和ABP模式均需要设置

#define LORAWAN_APPLICATION_EUI

APPLICATION_EUI,8字节

OTAA模式和ABP模式均需要设置

#define LORAWAN_APPLICATION_KEY

APPLICATION_KEY,16字节

OTAA模式需要设置

#define LORAWAN_NETWORK_ID

网络ID

#define LORAWAN_DEVICE_ADDRESS

设备地址,4字节

OTAA模式由NS分配

ABP模式需手动设置

#define LORAWAN_NWKSKEY

NWKSKEY,16字节

ABP模式需要设置

#define LORAWAN_APPSKEY

APPSKEY,16字节

ABP模式需要设置

4.5.2头文件“LoRaMac-definitions.h”及信道

该头文件定义了lorawan的基础通信配置的参数,其中根据不同频段参数有所不同,

使用频段为USE_BAND_470(标准CN470~510频段),

根据lorawan协议的设计通过:

#define LORA_MAX_NB_CHANNELS                        96

可知该频段总共支持96个上行信道,具体的信道配置如下:

for( uint8_t i = 0; i < LORA_MAX_NB_CHANNELS; i++ )

{

Channels[i].Frequency = 470.3e6 + i * 200e3; //ast c

Channels[i].DrRange.Value = ( DR_5 << 4 ) | DR_0;

Channels[i].Band = 0;

}

即从470.3Mhz开始,信道间隔200Khz,489.3Mhz结束。

由lorawan协议可知与96上行信道对应的下行信道只有48个,从500.3Mhz开始,信道间隔200Khz,509.7Mhz结束

#define LORAMAC_FIRST_RX1_CHANNEL            ( (uint32_t) 500.3e6 )

#define LORAMAC_LAST_RX1_CHANNEL             ( (uint32_t) 509.7e6 )

通过下面函数与上行信道对应,

RxWindowSetup( LORAMAC_FIRST_RX1_CHANNEL + ( Channel % 48 ) * LORAMAC_STEPWIDTH_RX1_CHANNEL, RxWindowsParams[0].Datarate, RxWindowsParams[0].Bandwidth, RxWindowsParams[0].RxWindowTimeout, false );

其中利用( Channel % 48 )将上行信道分为0~47和48~95,分别与下行的信道的0~47对应。

另外还有1个固定的下行RX2信道

#define RX_WND_2_CHANNEL                      { 505300000, DR_0 }

 

实际单sx1301网关只有8上行信道,所以需要设置sdk的信道掩码,只开启需要的信道即可,

图片42.png 

如图所示LoRaMacParamsDefaults.ChannelsMask数组元素为uint16_t类型,其中每1bit代表一个信道,所以该6个长度的数组,总共可代表16*6=96个信道,并且每一元素都是LSB,即

0x00FF;//bit 15~0

0x0000;//bit 31~16

0x0000;//bit 47~32

0x0000;//bit 63~48

0x0000;//bit 79~64

0x0000;//bit 95~80

所以在本例中LoRaMacParamsDefaults.ChannelsMask[0] = 0x00FF;表示只使用0~7信道。

 

4.5.3通信流程相关

本sdk功能是OTAA自动入网,10S间隔,按确认上行方式发送数据,默认工作流程如下:

A)main()->BoardInitMcu( )

该函数执行基础硬件初始化,其中BoardUnusedIoInit( ); 该函数为低功耗处理用的IO配置函数,为满足低功耗,不用使用的IO应做如下处理:

GpioInit( &ioPin, UNUSEDPINPA0, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );

其中的串口相关配合如下:

 图片53.png

此处串口收发均采用fifo+irq方式处理,用户可以更改。

串口接受处理如下:

 图片43.png

建议采用状态机方式进行数据接受。

B)main()->while( 1)

该函数为状态机式主循环,主循环根据以下状态机依次执行,

图片44.png 

DEVICE_STATE_INIT状态:最主要的初始化以下三个回调函数,

LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;

用户上行确认类事件,如确认上行,非确认上行回复的处理等,通信流程在此处理

LoRaMacPrimitives.MacMcpsIndication = McpsIndication;

下行通知类事件,如接受应答,读取数据包rssi,snr等,接受数据处理均在该函数中进行,如下

图片45.png 

LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;

系统上行类事件,如join请求处理,linkcheck请求处理等,主要处理OTAA 入网

DEVICE_STATE_JOIN状态:根据OVER_THE_AIR_ACTIVATION宏定义决定采用OTAA还是ABP入网,然后从Comissioning.h头文件中读取数据进行配置,默认配置如下:

图片46.png 

DEVICE_STATE_SEND

周期发送数据,10S

图片47.png 

发送函数

图片48.png 

该发送调用通过

图片49.png 

准备好的数据,可以修改AppData数组更改发送的数据

DEVICE_STATE_CYCLE

自动开启定时器

DEVICE_STATE_SLEEP

低功耗函数

TimerLowPowerHandler( );  

该函数内部由USE_DEBUGGER宏定义控制是否真正进入低功耗状态,

图片50.png 

关于低功耗:

除了上文介绍的IO口处理,其他如IIC,UART,SPI,HSEIO,LSEIO等程序本身可以控制的都在低功耗前关闭,唤醒后开启。

SDK给出了示例可以参考,如下图所示:

图片51.png 

图片52.png 

低功耗除了程序本身外,还取决于硬件设计的,如使用有源晶振,无源晶振,IO外置的上下拉电阻等,本司另提供LPMD003小体积低功耗高性能lorawan模块,有意可联系客户。


1
分享
2018-05-30

2 个评论

很好的东西。
有用

要回复文章请先登录注册