______ _
/ _____) _ | |
( (____ _____ ____ _| |_ _____ ____| |__
\____ \| ___ | (_ _) ___ |/ ___) _ \
_____) ) ____| | | || |_| ____( (___| | | |
(______/|_____)_|_|_| \__)_____)\____)_| |_|
(C)2013-2018 Semtech
___ _____ _ ___ _ _____ ___ ___ ___ ___
/ __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
\__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
|___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
embedded.connectivity.solutions===============
The aim of this project is to show an example of the endpoint LoRaWAN stack implementation.
This project has 3 active branches in place. The master branch which provides the latest released source code (v4.4.1), the develop branch which provides the current source code development status to be released next (Milestone 4.4.2) and the feature/5.0.0 branch which provides a preview of the current source code development status for LoRaWAN Specification v1.1 specification.(Milestone 5.0.0)
The master branch implementation is based on LoRaWAN Specification v1.0.2 and LoRaWAN Regional Parameters v1.0.2rB specifications.
ClassA and ClassC end-device classes are fully implemented.
The develop branch implementation is based on LoRaWAN Specification v1.0.3 and LoRaWAN Regional Parameters v1.0.3revA specifications.
ClassA, ClassB and ClassC end-device classes are fully implemented.
The feature/5.0.0 branch implementation is based on LoRaWAN Specification v1.1 and LoRaWAN Regional Parameters v1.1rB specifications.
ClassA, ClassB and ClassC end-device classes are fully implemented.
The develop and feature/5.0.0 branches both rely on a software emulated secure-element implementation. Please refer to the Secure element API document for further information.
This project also provides SX1272/73, SX1276/77/78/79 and SX1261/2 radio drivers.
For each currently supported platform example applications are provided.
LoRaMac/classA: ClassA end-device example application.
LoRaMac/classB: ClassB end-device example application.
LoRaMac/classC: ClassC end-device example application.
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/classX) includes an implementation of the LoRa-Alliacne; LoRaWAN certification protocol.
Note: The LoRaWAN stack API documentation can be found at: http://stackforce.github.io/LoRaMac-doc/
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.
NAMote72
NucleoLxxx - Discovery kit
SKiM880B, SKiM980A, SKiM881AXL
SAML21
A CMAKE building system is used in order to generate the right set of files to compile and debug the different projects.
Further information can be found in Development environment document.
The mbed (https://mbed.org/) project was used at the beginning as source of inspiration.
This program uses the AES algorithm implementation (http://www.gladman.me.uk/) by Brian Gladman.
This program uses the CMAC algorithm implementation (http://www.cse.chalmers.se/research/group/dcs/masters/contikisec/) by Lander Casado, Philippas Tsigas.
General
LoRaWAN
LoRaWAN certification results
Region | Verdict | # Test houses | Comments |
---|---|---|---|
EU868 | PASS | 2 | - |
US915 | PASS | 2 | - |
CN779 | PASS | 1 | No certification specification - tests based on EU868 certification |
EU433 | Not tested | 1 | No certification specification - tests based on EU868 certification |
AU915 | PASS | 0 | No certification specification - tests based on US915 certification |
CN470 | Not tested | 0 | No certification specification |
AS923 | PASS | 2 | - |
KR920 | PASS | 1 | - |
IN865 | PASS | 2 | - |
General
LoRaWAN
LoRaWAN certification results
Region | Verdict | # Test houses | Comments |
---|---|---|---|
EU868 | PASS | 2 | - |
US915 | PASS | 2 | - |
CN779 | Partial PASS | 1 | No certification specification - tests based on EU868 certification - All tests PASS except 1. Join Accept Rx2 parameters not being applied (under investigation) |
EU433 | PASS | 1 | No certification specification - tests based on EU868 certification |
AU915 | Not tested yet | 0 | No certification specification |
CN470 | Not tested yet | 0 | No certification specification |
AS923 | PASS | 2 | - |
KR920 | PASS | 1 | As of today only one test house has sent a report. We decided to perform the release anyway |
IN865 | PASS | 1 | No certification specification - tests based on EU868 certification |
General (Last release based on LoRaWAN specification 1.0.1)
LoRaWAN
General
LoRaWAN
General
This version has passed all LoRa-Alliance compliance tests.
Update the MAC layer in order to be LoRaWAN version 1.0.1 compliant
Applied to all application files the certification protocol change for LoRaWAN 1.0.1 compliance tests.
REMARK: api-v3 application files aren't updated.
Add radio RX_TIMEOUT irq clear into the irq handler.
Removed the end less loop from HAL_UART_ErrorCallback.
Update of the STM32L0 HAL to version 1.6.0
Consolidated the line endings across all project files. Windows line endings has been choose for almost every file.
LoRaWAN
General
This version has passed all LoRa-Alliance compliance tests.
Update STM32L1xx_HAL_Driver version to 1.5. Update related drivers and implementations accordingly.
REMARK: This change implies that the time base had to be changed from microseconds to milliseconds.
Corrected the frequency check condition for // ERRATA 2.1 - Sensitivity Optimization with a 500 kHz Bandwidth
Optimize radio drivers regarding FSK PER
Resolve issue when calling SX127xInit function more than once
Add a definition for the LoRaWAN device address. Add an IEEE_OUI for the LoRaWAN device EUI.
Add a definition for the default datarate.
Issue(#66) correction of functions SX1276SetOpMode and SX1272SetOpMode.
Issue(#68): Fix for low level RF switch control.
Increase RTC tick frequency for higher resolution.
Update the radio wake up time.
LoRaWAN
General
This version has passed all mandatory LoRa-Alliance compliance tests.
One of the optional tests is unsuccessful (FSK downlinks PER on Rx1 and Rx2 windows) and is currently under investigation.
Removed support for Raisonance Ride7 IDE (Reduces the amount of work to be done at each new release)
Removed the Bleeper-72 and Bleeper-76 platforms support as these are now deprecated.
Application state machine. Relocate setting sleep state and update the duty cycle in compliance test mode.
Bug fix in TimerIrqHandler. Now, it is possible to insert timers in callback.
Changed TimerHwDelayMs function to be re-entrant.
Corrected FSK modem packets bigger than 64 bytes handling (Issue #36)
LoRaWAN
General
LoRaWAN
General
LoRaWAN
General
LoRaWAN
General
LoRaWAN
Corrected the Port 0 MAC commands decryption
Changed the way the upper layer is notified. Now it is only notified when all the operations are finished.
When a ClassA Tx cycle starts a timer is launched to check every second if everything is finished.
Added a new parameter to LoRaMacEventFlags structure that indicates on which Rx window the data has been received.
Added a new parameter to LoRaMacEventFlags structure that indicates if there is applicative data on the received payload.
Corrected ADR MAC command behavior
DutyCycle enforcement implementation (EU868 PHY only)
REMARK 1 The regulatory duty cycle enforcement is enabled by default which means that for lower data rates the node may not transmit a new frame as quickly as requested. The formula used to compute the node idle time is
Toff = TimeOnAir / DutyCycle - TxTimeOnAir
Example: A device just transmitted a 0.5 s long frame on one default channel. This channel is in a sub-band allowing 1% duty-cycle. Therefore this whole sub-band (868 MHz - 868.6 MHz) will be unavailable for 49.5 s.
REMARK 2 The duty cycle enforcement can be disabled for test purposes by calling the LoRaMacSetDutyCycleOn function with false parameter.
Implemented aggregated duty cycle management
Added a function to create new channels
Implemented the missing features on the JoinAccept MAC command
Updated LoRaMacJoinDecrypt function to handle the CFList field.
General
Started to add support for CooCox CoIDE Integrated Development Environment. Currently only LoRaMote and SensorNode platform projects are available.
Updated GCC compiler linker scripts.
Added the support of different tool chains for the HardFault_Handler function.
Corrected Radio drivers I&Q signals inversion to be possible in Rx and in Tx. Added some missing radio state machine initialization.
Changed the RSSI values type from int8_t to int16_t. We can have RSSI values below -128 dBm.
Corrected SNR computation on RxDone interrupt.
Updated radio API to support FHSS and CAD handling.
Corrected in SetRxConfig function the FSK modem preamble register name.
Added an invalid bandwidth to the Bandwidths table in order to avoid an error when selecting 250 kHz bandwidth when using FSK modem.
Corrected RTC alarm setup which could be set to an invalid date.
Added another timer in order increment the tick counter without blocking the normal timer count.
Added the possibility to switch between low power timers and normal timers on the fly.
I2C driver corrected the 2 bytes internal address management. Corrected buffer read function when more that 1 byte was to be read. Added a function to wait for the I2C bus to become IDLE.
Added an I2C EEPROM driver.
Corrected and improved USB Virtual COM Port management files. Corrected the USB CDC and USB UART drivers.
Added the possibility to analyze a hard fault interrupt.
LoRaMac
General
LoRaMac
Implemented LoRaMac specification R3.0 changes.
MAC commands implemented
Features implemented
Possibility to shut-down the device YES
Possible by issuing DutyCycleReq MAC command.
Duty cycle management enforcement NO
Acknowledgments retries YES
Unconfirmed messages retries YES
General
Added the support for SX1276 radio.
Radio continuous reception mode correction.
Radio driver RxDone callback function API has changed ( size parameter is no more a pointer). Previous function prototype:
void ( *RxDone )( uint8_t *payload, uint16_t *size, double rssi, double snr, uint8_t rawSnr );
New function prototype:
void ( *RxDone )( uint8_t *payload, uint16_t size, double rssi, double snr, uint8_t rawSnr );
Added Bleeper-76 and SensorNode platforms support.
Added to the radio drivers a function that generates a random value from RSSI readings.
Added a project to transmit a continuous wave and a project to measure the the radio sensitivity.
Added a bootloader project for the LoRaMote and SensorNode platforms.
The LoRaMac application for Bleeper platforms now sends the Selector and LED status plus the sensors values.
The application payload for the Bleeper platforms is as follows:
LoRaMac port 1:
{ 0xX0/0xX1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
---------- ---------- ---------- ---------- ----
| | | | |
SELECTOR/LED PRESSURE TEMPERATURE ALTITUDE BATTERY
MSB nibble = SELECTOR (barometric)
LSB bit = LED
Redefined rand() and srand() standard C functions. These functions are redefined in order to get the same behavior across different compiler tool chains implementations.
GPS driver improvements. Made independent of the board platform.
Simplified the RTC management.
Added a function to the timer driver that checks if a timer is already in the list or not.
Added the UART Overrun bit exception handling to the UART driver.
Removed dependency of spi-board files to the "__builtin_ffs" function. This function is only available on GNU compiler tool suite. Removed --gnu compiler option from Keil projects. Added own __ffs function implementation to utilities.h file.
Removed obsolete class1 devices support.
Known bugs correction.
LoRaMac
MAC commands implemented
Features implemented
Possibility to shut-down the device YES
Possible by issuing DutyCycleReq MAC command.
Duty cycle management enforcement NO
Acknowledgments retries WORK IN PROGRESS
Not fully debugged. Disabled by default.
Unconfirmed messages retries WORK IN PROGRESS (LoRaMac specification R2.2.1)
Implemented LoRaMac specification R2.2.1 changes.
Due to new specification the LoRaMacInitNwkIds LoRaMac API function had to be modified.
Previous function prototype:
void LoRaMacInitNwkIds( uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
New function prototype:
void LoRaMacInitNwkIds( uint32_t netID, uint32_t devAddr, uint8_t *nwkSKey, uint8_t *appSKey );
Changed the LoRaMac channels management.
LoRaMac channels definition has been moved to LoRaMac-board.h file located in each specific board directory.
Added IMST SK-iM880A starter kit board support to the project.
LoRaMac port 3:
{ 0x00/0x01, 0x00, 0x00, 0x00 }
---------- ----- ----------
| | |
LED POTI VDD
Ping-Pong applications have been split per supported board.
Corrected the SX1272 output power management. Added a variable to store the current Radio channel. Added missing FSK bit definition.
Made fifo functions coding style coherent with the project.
UART driver is now independent of the used MCU
General
LoRaMac
The application payload for the Bleeper platform is as follows:
LoRaMac port 1:
{ 0x00/0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
---------- ---------- ---------- ---------- ----
| | | | |
LED PRESSURE TEMPERATURE ALTITUDE BATTERY
(barometric)
The application payload for the LoRaMote platform is as follows:
LoRaMac port 2:
{ 0x00/0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
---------- ---------- ---------- ---------- ---- ---------------- ---------------- ----------
| | | | | | | |
LED PRESSURE TEMPERATURE ALTITUDE BATTERY LATITUDE LONGITUDE ALTITUDE
(barometric) (gps)
MAC commands implemented
Implemented an application LED control If the server sends on port 1 an application payload of one byte with the following contents:
0: LED off
1: LED on
The node transmits periodically on port 1 the LED status on 1st byte and the message "Hello World!!!!" the array looks like:
{ 0, 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!', '!', '!', '!' }
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。