sx1278
LPMD002用户手册--SDK使用开发指南
lorawan • 雪梨君 发表了文章 • 2 个评论 • 4935 次浏览 • 2018-05-30 17:20
1本文目的
通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。
注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。
2 SDK开发环境
IAR6.20 FOR ARM
3.1完全符合LoraWan 1.0.1协议标准
3.2支持ClassA和ClassC协议
3.3支持ABP和OTAA激活
3.4支持上下行双向通信
3.5支持低功耗
4 SDK使用方法
IAR6.20 FOR ARM
LPKT002-SDK-V2.00\IAR\loranode.eww
4.4编译工程:
结果如下所示,
该头文件定义了lorawan的基础配置参数,如下:
宏定义 | 说明 |
#define OVER_THE_AIR_ACTIVATION | 1-OTAA激活 0-ABP激活 |
#define LORAWAN_PUBLIC_NETWORK | True-公开网络 False-私有网络 |
#define LORAWAN_DEVICE_EUI | DEVICE_EUI,8字节 |
#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字节 ABP模式需手动设置 |
#define LORAWAN_NWKSKEY | NWKSKEY,16字节 |
#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.Frequency = 470.3e6 + i [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的信道掩码,只开启需要的信道即可,
如图所示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信道。
本sdk功能是OTAA自动入网,10S间隔,按确认上行方式发送数据,默认工作流程如下:
该函数执行基础硬件初始化,其中BoardUnusedIoInit( ); 该函数为低功耗处理用的IO配置函数,为满足低功耗,不用使用的IO应做如下处理:
GpioInit( &ioPin, UNUSEDPINPA0, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
其中的串口相关配合如下:
此处串口收发均采用fifo+irq方式处理,用户可以更改。
串口接受处理如下:
建议采用状态机方式进行数据接受。
该函数为状态机式主循环,主循环根据以下状态机依次执行,
l DEVICE_STATE_INIT状态:最主要的初始化以下三个回调函数,
LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;
用户上行确认类事件,如确认上行,非确认上行回复的处理等,通信流程在此处理
LoRaMacPrimitives.MacMcpsIndication = McpsIndication;
下行通知类事件,如接受应答,读取数据包rssi,snr等,接受数据处理均在该函数中进行,如下
LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;
系统上行类事件,如join请求处理,linkcheck请求处理等,主要处理OTAA 入网
l DEVICE_STATE_JOIN状态:根据OVER_THE_AIR_ACTIVATION宏定义决定采用OTAA还是ABP入网,然后从Comissioning.h头文件中读取数据进行配置,默认配置如下:
l DEVICE_STATE_SEND:
周期发送数据,10S
发送函数
该发送调用通过
准备好的数据,可以修改AppData数组更改发送的数据
l DEVICE_STATE_CYCLE:
自动开启定时器
l DEVICE_STATE_SLEEP:
低功耗函数
TimerLowPowerHandler( );
该函数内部由USE_DEBUGGER宏定义控制是否真正进入低功耗状态,
关于低功耗:
除了上文介绍的IO口处理,其他如IIC,UART,SPI,HSEIO,LSEIO等程序本身可以控制的都在低功耗前关闭,唤醒后开启。
SDK给出了示例可以参考,如下图所示:
低功耗除了程序本身外,还取决于硬件设计的,如使用有源晶振,无源晶振,IO外置的上下拉电阻等,本司另提供LPMD003小体积低功耗高性能lorawan模块,有意可联系客户。
LPMD002用户手册--SDK使用开发指南
lorawan • 雪梨君 发表了文章 • 2 个评论 • 4935 次浏览 • 2018-05-30 17:20
1本文目的
通过本文的说明介绍用户将了解和熟悉LPMD002节点模块的SDK开发使用流程。
注:本文默认用户已经熟悉IAR软件的安装和使用方法以及相关仿真下载工具的使用,故这方面内容不在本文说明范围之内,下同。
2 SDK开发环境
IAR6.20 FOR ARM
3.1完全符合LoraWan 1.0.1协议标准
3.2支持ClassA和ClassC协议
3.3支持ABP和OTAA激活
3.4支持上下行双向通信
3.5支持低功耗
4 SDK使用方法
IAR6.20 FOR ARM
LPKT002-SDK-V2.00\IAR\loranode.eww
4.4编译工程:
结果如下所示,
该头文件定义了lorawan的基础配置参数,如下:
宏定义 | 说明 |
#define OVER_THE_AIR_ACTIVATION | 1-OTAA激活 0-ABP激活 |
#define LORAWAN_PUBLIC_NETWORK | True-公开网络 False-私有网络 |
#define LORAWAN_DEVICE_EUI | DEVICE_EUI,8字节 |
#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字节 ABP模式需手动设置 |
#define LORAWAN_NWKSKEY | NWKSKEY,16字节 |
#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.Frequency = 470.3e6 + i [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的信道掩码,只开启需要的信道即可,
如图所示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信道。
本sdk功能是OTAA自动入网,10S间隔,按确认上行方式发送数据,默认工作流程如下:
该函数执行基础硬件初始化,其中BoardUnusedIoInit( ); 该函数为低功耗处理用的IO配置函数,为满足低功耗,不用使用的IO应做如下处理:
GpioInit( &ioPin, UNUSEDPINPA0, PIN_ANALOGIC, PIN_PUSH_PULL, PIN_NO_PULL, 0 );
其中的串口相关配合如下:
此处串口收发均采用fifo+irq方式处理,用户可以更改。
串口接受处理如下:
建议采用状态机方式进行数据接受。
该函数为状态机式主循环,主循环根据以下状态机依次执行,
l DEVICE_STATE_INIT状态:最主要的初始化以下三个回调函数,
LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;
用户上行确认类事件,如确认上行,非确认上行回复的处理等,通信流程在此处理
LoRaMacPrimitives.MacMcpsIndication = McpsIndication;
下行通知类事件,如接受应答,读取数据包rssi,snr等,接受数据处理均在该函数中进行,如下
LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;
系统上行类事件,如join请求处理,linkcheck请求处理等,主要处理OTAA 入网
l DEVICE_STATE_JOIN状态:根据OVER_THE_AIR_ACTIVATION宏定义决定采用OTAA还是ABP入网,然后从Comissioning.h头文件中读取数据进行配置,默认配置如下:
l DEVICE_STATE_SEND:
周期发送数据,10S
发送函数
该发送调用通过
准备好的数据,可以修改AppData数组更改发送的数据
l DEVICE_STATE_CYCLE:
自动开启定时器
l DEVICE_STATE_SLEEP:
低功耗函数
TimerLowPowerHandler( );
该函数内部由USE_DEBUGGER宏定义控制是否真正进入低功耗状态,
关于低功耗:
除了上文介绍的IO口处理,其他如IIC,UART,SPI,HSEIO,LSEIO等程序本身可以控制的都在低功耗前关闭,唤醒后开启。
SDK给出了示例可以参考,如下图所示:
低功耗除了程序本身外,还取决于硬件设计的,如使用有源晶振,无源晶振,IO外置的上下拉电阻等,本司另提供LPMD003小体积低功耗高性能lorawan模块,有意可联系客户。