• Stars
    star
    1,831
  • Rank 25,349 (Top 0.5 %)
  • Language
    C
  • License
    Other
  • Created almost 11 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Reference implementation and documentation of a LoRa network node.

LoRaWAN end-device stack implementation and example projects

  ______                              _
 / _____)             _              | |
( (____  _____ ____ _| |_ _____  ____| |__
 \____ \| ___ |    (_   _) ___ |/ ___)  _ \
 _____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
    (C)2013-2022 Semtech

 ___ _____ _   ___ _  _____ ___  ___  ___ ___
/ __|_   _/_\ / __| |/ / __/ _ \| _ \/ __| __|
\__ \ | |/ _ \ (__| ' <| _| (_) |   / (__| _|
|___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
embedded.connectivity.solutions===============

Introduction

The aim of this project is to show an example of an end-device LoRaWAN stack implementation.

This project has 2 active branches in place.

Branch L2 spec RP spec Tag/Milestone Class Comments
1.0.4 / 1.1.0 + FCntDwn ERRATA 2-1.0.3 v4.7.0 A/B/C LoRaWAN L2 1.0.4 - Released
master 1.0.4 / 1.1.0 + FCntDwn ERRATA 2-1.0.3 v4.7.0 A/B/C LoRaWAN L2 1.0.4 / 1.1.0
v5.0.0-branch 1.0.4 / 1.1.0 + FCntDwn ERRATA 2-1.0.3 M 5.0.0 A/B/C LoRaWAN L2 1.0.4 / 1.1.0 - Adds support for LR-FHSS modulation

This project fully implements ClassA, ClassB and ClassC end-device classes and it also provides SX1272/73, SX1276/77/78/79, SX1261/2 and LR1110 radio drivers.

For each currently supported platform example applications are provided.

  • LoRaMac/fuota-test-01: FUOTA test scenario 01 end-device example application. (Based on provided application common packages)

  • LoRaMac/periodic-uplink-lpp: ClassA/B/C end-device example application. Periodically uplinks a frame using the Cayenne LPP protocol. (Based on provided application common packages)

  • ping-pong: Point to point RF link example application.

  • rx-sensi: Example application useful to measure the radio sensitivity level using an RF generator.

  • tx-cw: Example application to show how to generate an RF Continuous Wave transmission.

Note: Each LoRaWAN application example (LoRaMac/*) includes an implementation of the LoRa-Alliance; LoRaWAN certification protocol.

Note: The LoRaWAN stack API documentation can be found at: http://stackforce.github.io/LoRaMac-doc/

Supported platforms

This project currently provides support for the below platforms.
This project can be ported to other platforms using different MCU than the ones currently supported.
The Porting Guide document provides guide lines on how to port the project to other platforms.

Getting Started

Prerequisites

Please follow instructions provided by Development environment document.

Cloning the repository

Clone the repository from GitHub

$ git clone https://github.com/lora-net/loramac-node.git loramac-node

LoRaMac-node project contains Git submodules that must be initialized

$ cd loramac-node
$ git submodule update --init

Secure-element commissioning

This project currently supports 3 different secure-elements soft-se, lr1110-se and atecc608a-tnglora-se implementations.

In order to personalize the MCU binary file with LoRaWAN EUIs or/and AES128 keys one must follow the instructions provided by soft-se, lr1110-se and atecc608a-tnglora-se chapters

soft-se

soft-se is a pure software emulation of a secure-element. It means that everything is located on the host MCU memories. The DevEUI, JoinEUI and AES128 keys may be stored on a non-volatile memory through dedicated APIs.

In order to update the end-device identity (DevEUI, JoinEUI and AES128 keys) one must update the se-identity.h file located under ./src/peripherals/soft-se/ directory.

Note: In previous versions of this project this was done inside Commissioning.h files located under each provided example directory.

lr1110-se

lr1110-se abstraction implementation handles all the required exchanges with the LR1110 radio crypto-engine.

All LR1110 radio chips are pre-provisioned out of factory in order to be used with LoRa Cloud Device Join Service.

In case other Join Servers are to be used the DevEUI, Pin, JoinEUI and AES128 keys can be updated by following the instructions provided on chapter "13. LR1110 Provisioning" of the LR1110 User Manual.

When the compile option SECURE_ELEMENT_PRE_PROVISIONED is set to ON the lr1110-se will use the factory provisioned data (DevEUI, JoinEUI and AES128 keys).
When the compile option SECURE_ELEMENT_PRE_PROVISIONED is set to OFF the lr1110-se has to be provisioned by following one of the methods described on chapter "13. LR1110 Provisioning" of the LR1110 User Manual. The DevEUI, Pin and JoinEUI can be changed by editing the se-identity.h file located in ./src/peripherals/lr1110-se/ directory.

atecc608a-tnglora-se

The atecc608a-tnglora-se abstraction implementation handles all the required exchanges with the ATECC608A-TNGLORA and ATECC608B-TNGLORA secure-elements.

This secure-element is always pre-provisioned and its contents can't be changed.

Building Process

Command line

periodic-uplink-lpp example for NucleoL476 platform with LR1110MB1DIS MBED shield and using LR1110 pre-provisioned secure-element

$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release \
        -DTOOLCHAIN_PREFIX="<replace by toolchain path>" \
        -DCMAKE_TOOLCHAIN_FILE="../cmake/toolchain-arm-none-eabi.cmake" \
        -DAPPLICATION="LoRaMac" \
        -DSUB_PROJECT="periodic-uplink-lpp" \
        -DCLASSB_ENABLED="ON" \
        -DACTIVE_REGION="LORAMAC_REGION_EU868" \
        -DREGION_EU868="ON" \
        -DREGION_US915="OFF" \
        -DREGION_CN779="OFF" \
        -DREGION_EU433="OFF" \
        -DREGION_AU915="OFF" \
        -DREGION_AS923="OFF" \
        -DREGION_CN470="OFF" \
        -DREGION_KR920="OFF" \
        -DREGION_IN865="OFF" \
        -DREGION_RU864="OFF" \
        -DBOARD="NucleoL476" \
        -DMBED_RADIO_SHIELD="LR1110MB1XXS" \
        -DSECURE_ELEMENT="LR1110_SE" \
        -DSECURE_ELEMENT_PRE_PROVISIONED="ON" \
        -DUSE_RADIO_DEBUG="ON" ..
$ make

ping-pong example using LoRa modulation for NucleoL476 platform with LR1110MB1DIS MBED shield

$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release \
        -DTOOLCHAIN_PREFIX="<replace by toolchain path>" \
        -DCMAKE_TOOLCHAIN_FILE="../cmake/toolchain-arm-none-eabi.cmake" \
        -DAPPLICATION="ping-pong" \
        -DMODULATION:"LORA" \
        -DREGION_EU868="ON" \
        -DREGION_US915="OFF" \
        -DREGION_CN779="OFF" \
        -DREGION_EU433="OFF" \
        -DREGION_AU915="OFF" \
        -DREGION_AS923="OFF" \
        -DREGION_CN470="OFF" \
        -DREGION_KR920="OFF" \
        -DREGION_IN865="OFF" \
        -DREGION_RU864="OFF" \
        -DBOARD="NucleoL476" \
        -DMBED_RADIO_SHIELD="LR1110MB1XXS" \
        -DUSE_RADIO_DEBUG="ON" ..
$ make

VSCode

periodic-uplink-lpp example for NucleoL476 platform with LR1110MB1DIS MBED shield and using LR1110 pre-provisioned secure-element

  • Please edit .vscode/settings.json file
Click to expand!

// Place your settings in this file to overwrite default and user settings.
{
    "cmake.configureSettings": {

        // In case your GNU ARM-Toolchain is not installed under the default
        // path:
        //     Windows : No default path. Specify the path where the
        //               toolchain is installed. i.e:
        //               "C:/PROGRA~2/GNUTOO~1/92019-~1".
        //     Linux   : /usr
        //     OSX     : /usr/local
        // It is required to uncomment and to fill the following line.
        "TOOLCHAIN_PREFIX":"/path/to/toolchain",

        // In case your OpenOCD is not installed under the default path:
        //     Windows : C:/openocd/bin/openocd.exe
        //     Linux   : /usr/bin/openocd
        //     OSX     : /usr/local/bin/openocd
        // Please uncomment the following line and fill it accordingly.
        //"OPENOCD_BIN":"C:/openocd/bin/openocd.exe",

        // Specifies the path to the CMAKE toolchain file.
        "CMAKE_TOOLCHAIN_FILE":"cmake/toolchain-arm-none-eabi.cmake",

        // Determines the application. You can choose between:
        // LoRaMac (Default), ping-pong, rx-sensi, tx-cw.
        "APPLICATION":"LoRaMac",

        // Select LoRaMac sub project. You can choose between:
        // periodic-uplink-lpp, fuota-test-01.
        "SUB_PROJECT":"periodic-uplink-lpp",

        // Switch for Class B support of LoRaMac:
        "CLASSB_ENABLED":"ON",

        // Select the active region for which the stack will be initialized.
        // You can choose between:
        // LORAMAC_REGION_EU868, LORAMAC_REGION_US915, ..
        "ACTIVE_REGION":"LORAMAC_REGION_EU868",

        // Select the type of modulation, applicable to the ping-pong or
        // rx-sensi applications. You can choose between:
        // LORA or FSK
        "MODULATION":"LORA",

        // Target board, the following boards are supported:
        // NAMote72, NucleoL073 (Default), NucleoL152, NucleoL476, SAMR34, SKiM880B, SKiM980A, SKiM881AXL, B-L072Z-LRWAN1.
        "BOARD":"NucleoL476",

        // MBED Radio shield selection. (Applies only to Nucleo platforms)
        // The following shields are supported:
        // SX1272MB2DAS, SX1276MB1LAS, SX1276MB1MAS, SX1261MBXBAS(Default), SX1262MBXCAS, SX1262MBXDAS, LR1110MB1XXS.
        "MBED_RADIO_SHIELD":"LR1110MB1XXS",

        // Secure element type selection the following are supported
        // SOFT_SE(Default), LR1110_SE, ATECC608A_TNGLORA_SE
        "SECURE_ELEMENT":"LR1110_SE",

        // Secure element is pre-provisioned
        "SECURE_ELEMENT_PRE_PROVISIONED":"ON",

        // Region support activation, Select the ones you want to support.
        // By default only REGION_EU868 support is enabled.
        "REGION_EU868":"ON",
        "REGION_US915":"OFF",
        "REGION_CN779":"OFF",
        "REGION_EU433":"OFF",
        "REGION_AU915":"OFF",
        "REGION_AS923":"OFF",
        "REGION_CN470":"OFF",
        "REGION_KR920":"OFF",
        "REGION_IN865":"OFF",
        "REGION_RU864":"OFF",
        "USE_RADIO_DEBUG":"ON"
    }
}

  • Click on "CMake: Debug: Ready" and select build type Debug or Release.
    cmake configure
  • Wait for configuration process to finish
  • Click on "Build" to build the project.
    cmake build
  • Wait for build process to finish
  • Binary files will be available under ./build/src/apps/LoRaMac/
    • LoRaMac-periodic-uplink-lpp - elf format
    • LoRaMac-periodic-uplink-lpp.bin - binary format
    • LoRaMac-periodic-uplink-lpp.hex - hex format

ping-pong example using LoRa modulation for NucleoL476 platform with LR1110MB1DIS MBED shield

  • Please edit .vscode/settings.json file
Click to expand!

// Place your settings in this file to overwrite default and user settings.
{
    "cmake.configureSettings": {

        // In case your GNU ARM-Toolchain is not installed under the default
        // path:
        //     Windows : No default path. Specify the path where the
        //               toolchain is installed. i.e:
        //               "C:/PROGRA~2/GNUTOO~1/92019-~1".
        //     Linux   : /usr
        //     OSX     : /usr/local
        // It is required to uncomment and to fill the following line.
        "TOOLCHAIN_PREFIX":"/path/to/toolchain",

        // In case your OpenOCD is not installed under the default path:
        //     Windows : C:/openocd/bin/openocd.exe
        //     Linux   : /usr/bin/openocd
        //     OSX     : /usr/local/bin/openocd
        // Please uncomment the following line and fill it accordingly.
        //"OPENOCD_BIN":"C:/openocd/bin/openocd.exe",

        // Specifies the path to the CMAKE toolchain file.
        "CMAKE_TOOLCHAIN_FILE":"cmake/toolchain-arm-none-eabi.cmake",

        // Determines the application. You can choose between:
        // LoRaMac (Default), ping-pong, rx-sensi, tx-cw.
        "APPLICATION":"ping-pong",

        // Select LoRaMac sub project. You can choose between:
        // periodic-uplink-lpp, fuota-test-01.
        "SUB_PROJECT":"periodic-uplink-lpp",

        // Switch for Class B support of LoRaMac:
        "CLASSB_ENABLED":"ON",

        // Select the active region for which the stack will be initialized.
        // You can choose between:
        // LORAMAC_REGION_EU868, LORAMAC_REGION_US915, ..
        "ACTIVE_REGION":"LORAMAC_REGION_EU868",

        // Select the type of modulation, applicable to the ping-pong or
        // rx-sensi applications. You can choose between:
        // LORA or FSK
        "MODULATION":"LORA",

        // Target board, the following boards are supported:
        // NAMote72, NucleoL073 (Default), NucleoL152, NucleoL476, SAMR34, SKiM880B, SKiM980A, SKiM881AXL, B-L072Z-LRWAN1.
        "BOARD":"NucleoL476",

        // MBED Radio shield selection. (Applies only to Nucleo platforms)
        // The following shields are supported:
        // SX1272MB2DAS, SX1276MB1LAS, SX1276MB1MAS, SX1261MBXBAS(Default), SX1262MBXCAS, SX1262MBXDAS, LR1110MB1XXS.
        "MBED_RADIO_SHIELD":"SX1261MBXBAS",

        // Secure element type selection the following are supported
        // SOFT_SE(Default), LR1110_SE, ATECC608A_TNGLORA_SE
        "SECURE_ELEMENT":"SOFT_SE",

        // Secure element is pre-provisioned
        "SECURE_ELEMENT_PRE_PROVISIONED":"ON",

        // Region support activation, Select the ones you want to support.
        // By default only REGION_EU868 support is enabled.
        "REGION_EU868":"ON",
        "REGION_US915":"OFF",
        "REGION_CN779":"OFF",
        "REGION_EU433":"OFF",
        "REGION_AU915":"OFF",
        "REGION_AS923":"OFF",
        "REGION_CN470":"OFF",
        "REGION_KR920":"OFF",
        "REGION_IN865":"OFF",
        "REGION_RU864":"OFF",
        "USE_RADIO_DEBUG":"ON"
    }
}

  • Click on "CMake: Debug: Ready" and select build type Debug or Release.
    cmake configure
  • Wait for configuration process to finish
  • Click on "Build" to build the project.
    cmake build
  • Wait for build process to finish
  • Binary files will be available under ./build/src/apps/ping-pong/
    • ping-pong - elf format
    • ping-pong.bin - binary format
    • ping-pong.hex - hex format

Serial console NVM management

The periodic-uplink-lpp and fuota-test-01 examples allow to reset the NVM storage through the serial interface.

In order to reset the NVM contents one must hit ESC + N keyboard keys on a serial terminal.

The serial terminal will show the following after ESC + N keyboard keys are hit. After reseting the end-device the clean NVM will be used.

ESC + N


NVM factory reset succeed


PLEASE RESET THE END-DEVICE

Acknowledgments

More Repositories

1

lora_gateway

Driver/HAL to build a gateway using a concentrator board based on Semtech SX1301 multi-channel modem and SX1257/SX1255 RF transceivers.
C
901
star
2

packet_forwarder

A LoRa packet forwarder is a program running on the host of a LoRa gateway that forwards RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server.
C
700
star
3

sx1302_hal

SX1302/SX1303 Hardware Abstraction Layer and Tools (packet forwarder...)
C
206
star
4

sx126x_driver

Driver for SX126x radio
C
94
star
5

SWL2001

LoRa Basics Modem LoRaWAN stack
C
80
star
6

picoGW_mcu

MCU driver/HAL for the Picocell Gateway concentrator board.
C
51
star
7

llcc68_driver

Driver for LLCC68 radio
C
48
star
8

picoGW_packet_forwarder

A LoRa packet forwarder running on the host of a LoRa Picocell Gateway that forwards RF packets receive by the concentrator to a server through a IP/UDP link, and emits RF packets that are sent by the server.
C
44
star
9

picoGW_hal

Host driver/HAL to build a LoRa Picocell Gateway which communicates through USB with a concentrator board based on Semtech SX1308 multi-channel modem and SX1257/SX1255 RF transceivers.
C
44
star
10

lr1110_driver

Driver for LR1110 radio
C
28
star
11

SWSD001

LoRa Basics Modem SDK
C
23
star
12

SWDM001

Long-Range Frequency Hopping Spread Spectrum (LR-FHSS) transmission demo
C
19
star
13

SWDR001

Driver for LR11xx chip (LR1110 / LR1120 / LR1121)
C
18
star
14

lr1110_evk_demo_app

Demonstration application for LR1110 EVK - compatible with transceiver and LoRa Basics Modem-E
C
17
star
15

SWSD003

LR11xx chip (LR1110 / LR1120 / LR1121) and SX126x chip (SX1261 / SX1262 / SX1268) SDK
C
17
star
16

sx1302_spi_usb_bridge

Source code of the STM32 MCU which acts like a USB-SPI bridge on a sx1302/sx1303 USB Corecell gateway.
C
16
star
17

lora_edge_tracker_ref_design

Demonstration application for LoRa Edge tracker reference design - compatible with LoRa Basics Modem-E
C
15
star
18

gateway_2g4_hal

LoRa 2.4Ghz Gateway - Linux host Hardware Abstraction Layer, and tools (Packet Forwarder...)
C
13
star
19

SWSD004

Demonstration application for LoRa Edge tracker reference design - compatible with LoRa Basics Modem
C
12
star
20

lr1110_modem_application_example

C
9
star
21

SWDR005

Driver for SX128x chip
C
7
star
22

node-red-contrib-loracloud-utils

Node-RED node allowing easy integration with LoRa Cloud
JavaScript
5
star
23

radio_firmware_images

Firmware images for all flash-based Semtech products
C
5
star
24

lr1110_updater_tool

Implementation example of update mechanism for LR1110
C
5
star
25

CTB

Conformance Test Bench
Python
4
star
26

lr1110_modem_driver

Driver for LoRa Basics Modem-E
C
3
star
27

SWDR006

SWDR006 - LR11xx Sidewalk Driver for nRF52840
Python
2
star
28

SWNW001

Example code to Integrate LoRa Edge(R) with LoRa Cloud(R)
Python
1
star