Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.

Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo

Currently supported boards:

Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:

  • Unmount resistor R4
  • Mount resistor R7

Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!

This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).

Revision:
67:93bec0baf1de
Parent:
40:343254875d89
Child:
75:8dc65c09af67
--- a/source/libs/Contiki_STM32_Library/spirit1.h	Wed Jul 05 14:02:16 2017 +0200
+++ b/source/libs/Contiki_STM32_Library/spirit1.h	Thu Jul 06 11:13:31 2017 +0200
@@ -1,179 +1,179 @@
-/*
- * Copyright (c) 2012, STMicroelectronics.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the Institute nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file is part of the Contiki operating system.
- *
- */
-/*---------------------------------------------------------------------------*/
-#ifndef __SPIRIT_H__
-#define __SPIRIT_H__
-/*---------------------------------------------------------------------------*/
-#include "radio.h"
-#include "SPIRIT_Config.h"
-#include "spirit1-config.h"
-//#include "spirit1_appli.h"
-#include "spirit1-const.h"
-/*---------------------------------------------------------------------------*/   
-extern const struct radio_driver spirit_radio_driver;
-void spirit1_interrupt_callback(void);
-
-/* exported from spirit1appli.h */
-
-#include "radio_shield_config.h"
-#include "MCU_Interface.h"
-#include "SPIRIT_Config.h"
-// betzw - WAS: #include "SPIRIT1_Util.h"
-
-
-#if defined(X_NUCLEO_IDS01A3)
-	 #define USE_SPIRIT1_433MHz
-#elif defined(X_NUCLEO_IDS01A4)
-         #define USE_SPIRIT1_868MHz
-#elif defined(X_NUCLEO_IDS01A5)
-         #define USE_SPIRIT1_915MHz
-#else
-#error SPIRIT1 Nucleo Shield undefined or unsupported
-#endif
-
-/*  Uncomment the Link Layer features to be used */
-// #define USE_AUTO_ACK
-// #define USE_AUTO_ACK_PIGGYBACKING
-// #define USE_AUTO_RETRANSMISSION
-
-#if defined(USE_AUTO_ACK)&& defined(USE_AUTO_ACK_PIGGYBACKING)&& defined(USE_AUTO_RETRANSMISSION)
-#define USE_STack_PROTOCOL
-
-/* LLP configuration parameters */
-#define EN_AUTOACK                      S_ENABLE
-#define EN_PIGGYBACKING             	S_ENABLE
-#define MAX_RETRANSMISSIONS         	PKT_N_RETX_2
-
-#else
-#define USE_BASIC_PROTOCOL
-
-#endif
-
-/*  Uncomment the system Operating mode */
-//#define USE_LOW_POWER_MODE
-
-#if defined (USE_LOW_POWER_MODE)
-#define LPM_ENABLE
-#define MCU_STOP_MODE
-//#define MCU_SLEEP_MODE
-//#define RF_STANDBY
-#endif
-
-
-/* Exported constants --------------------------------------------------------*/
-
-/*  Radio configuration parameters  */
-#define XTAL_OFFSET_PPM             0
-#define INFINITE_TIMEOUT            0.0
-
-#ifdef USE_SPIRIT1_433MHz
-#define BASE_FREQUENCY              433.0e6
-#endif
-
-#ifdef USE_SPIRIT1_868MHz
-#define BASE_FREQUENCY              868.0e6
-#endif
-
-#ifdef USE_SPIRIT1_915MHz
-//#define BASE_FREQUENCY              915.0e6
-#define BASE_FREQUENCY              902.0e6
-#endif
-
-
-/*  Addresses configuration parameters  */
-#define EN_FILT_MY_ADDRESS          S_DISABLE
-#define MY_ADDRESS                  0x24
-#define EN_FILT_MULTICAST_ADDRESS   S_DISABLE
-#define MULTICAST_ADDRESS           0xEE
-#define EN_FILT_BROADCAST_ADDRESS   S_DISABLE
-#define BROADCAST_ADDRESS           0xFF
-#define DESTINATION_ADDRESS         0x44
-#define EN_FILT_SOURCE_ADDRESS      S_DISABLE
-#define SOURCE_ADDR_MASK            0xf0
-#define SOURCE_ADDR_REF             0x37
-
-#define APPLI_CMD                       0x11
-#define NWK_CMD                         0x22
-#define LED_TOGGLE                      0xff
-#define ACK_OK                          0x01
-#define MAX_BUFFER_LEN                  96
-#define TIME_TO_EXIT_RX                 3000
-#define DELAY_RX_LED_TOGGLE             200
-#define DELAY_TX_LED_GLOW               1000
-#define LPM_WAKEUP_TIME                 100
-#define DATA_SEND_TIME                  30
-
-#define PREAMBLE_LENGTH             PKT_PREAMBLE_LENGTH_04BYTES
-#define SYNC_LENGTH                 PKT_SYNC_LENGTH_4BYTES
-#define CONTROL_LENGTH              PKT_CONTROL_LENGTH_0BYTES
-#define EN_ADDRESS                  S_DISABLE
-#define EN_FEC                      S_DISABLE
-#define CHANNEL_NUMBER              1 // betzw - WAS: 0
-#define LENGTH_TYPE                 PKT_LENGTH_VAR
-#define POWER_INDEX                 7
-#define RECEIVE_TIMEOUT             2000.0 /*change the value for required timeout period*/
-#define RSSI_THRESHOLD              -120
-
-
-
-#define POWER_DBM                   11.6
-#define CHANNEL_SPACE               100e3
-#define FREQ_DEVIATION              127e3
-#define BANDWIDTH                   540.0e3
-#define MODULATION_SELECT           GFSK_BT1
-#define DATARATE                    250000
-#define XTAL_OFFSET_PPM             0
-#define SYNC_WORD                   0x88888888
-#define LENGTH_WIDTH                8 // betzw - NOTE: only 255 bytes for payload!!!
-#define CRC_MODE                    PKT_CRC_MODE_16BITS_2
-#define EN_WHITENING                S_DISABLE
-#define INFINITE_TIMEOUT            0.0
-
-// extern volatile FlagStatus xRxDoneFlag, xTxDoneFlag;
-// extern volatile FlagStatus PushButtonStatusWakeup;
-extern uint16_t wakeupCounter;
-extern uint16_t dataSendCounter ;
-// extern volatile FlagStatus PushButtonStatusData, datasendFlag;
-
-typedef struct
-{
-  uint8_t Cmdtag;
-  uint8_t CmdType;
-  uint8_t CmdLen;
-  uint8_t Cmd;
-  uint8_t DataLen;
-  uint8_t* DataBuff;
-}AppliFrame_t;
-
-/*---------------------------------------------------------------------------*/
-#endif /* __SPIRIT_H__ */
-/*---------------------------------------------------------------------------*/
+/*
+ * Copyright (c) 2012, STMicroelectronics.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the Contiki operating system.
+ *
+ */
+/*---------------------------------------------------------------------------*/
+#ifndef __SPIRIT_H__
+#define __SPIRIT_H__
+/*---------------------------------------------------------------------------*/
+#include "radio.h"
+#include "SPIRIT_Config.h"
+#include "spirit1-config.h"
+//#include "spirit1_appli.h"
+#include "spirit1-const.h"
+/*---------------------------------------------------------------------------*/   
+extern const struct radio_driver spirit_radio_driver;
+void spirit1_interrupt_callback(void);
+
+/* exported from spirit1appli.h */
+
+#include "radio_shield_config.h"
+#include "MCU_Interface.h"
+#include "SPIRIT_Config.h"
+// betzw - WAS: #include "SPIRIT1_Util.h"
+
+
+#if defined(X_NUCLEO_IDS01A3)
+	 #define USE_SPIRIT1_433MHz
+#elif defined(X_NUCLEO_IDS01A4)
+         #define USE_SPIRIT1_868MHz
+#elif defined(X_NUCLEO_IDS01A5)
+         #define USE_SPIRIT1_915MHz
+#else
+#error SPIRIT1 Nucleo Shield undefined or unsupported
+#endif
+
+/*  Uncomment the Link Layer features to be used */
+// #define USE_AUTO_ACK
+// #define USE_AUTO_ACK_PIGGYBACKING
+// #define USE_AUTO_RETRANSMISSION
+
+#if defined(USE_AUTO_ACK)&& defined(USE_AUTO_ACK_PIGGYBACKING)&& defined(USE_AUTO_RETRANSMISSION)
+#define USE_STack_PROTOCOL
+
+/* LLP configuration parameters */
+#define EN_AUTOACK                      S_ENABLE
+#define EN_PIGGYBACKING             	S_ENABLE
+#define MAX_RETRANSMISSIONS         	PKT_N_RETX_2
+
+#else
+#define USE_BASIC_PROTOCOL
+
+#endif
+
+/*  Uncomment the system Operating mode */
+//#define USE_LOW_POWER_MODE
+
+#if defined (USE_LOW_POWER_MODE)
+#define LPM_ENABLE
+#define MCU_STOP_MODE
+//#define MCU_SLEEP_MODE
+//#define RF_STANDBY
+#endif
+
+
+/* Exported constants --------------------------------------------------------*/
+
+/*  Radio configuration parameters  */
+#define XTAL_OFFSET_PPM             0
+#define INFINITE_TIMEOUT            0.0
+
+#ifdef USE_SPIRIT1_433MHz
+#define BASE_FREQUENCY              433.0e6
+#endif
+
+#ifdef USE_SPIRIT1_868MHz
+#define BASE_FREQUENCY              868.0e6
+#endif
+
+#ifdef USE_SPIRIT1_915MHz
+//#define BASE_FREQUENCY              915.0e6
+#define BASE_FREQUENCY              902.0e6
+#endif
+
+
+/*  Addresses configuration parameters  */
+#define EN_FILT_MY_ADDRESS          S_DISABLE
+#define MY_ADDRESS                  0x24
+#define EN_FILT_MULTICAST_ADDRESS   S_DISABLE
+#define MULTICAST_ADDRESS           0xEE
+#define EN_FILT_BROADCAST_ADDRESS   S_DISABLE
+#define BROADCAST_ADDRESS           0xFF
+#define DESTINATION_ADDRESS         0x44
+#define EN_FILT_SOURCE_ADDRESS      S_DISABLE
+#define SOURCE_ADDR_MASK            0xf0
+#define SOURCE_ADDR_REF             0x37
+
+#define APPLI_CMD                       0x11
+#define NWK_CMD                         0x22
+#define LED_TOGGLE                      0xff
+#define ACK_OK                          0x01
+#define MAX_BUFFER_LEN                  96
+#define TIME_TO_EXIT_RX                 3000
+#define DELAY_RX_LED_TOGGLE             200
+#define DELAY_TX_LED_GLOW               1000
+#define LPM_WAKEUP_TIME                 100
+#define DATA_SEND_TIME                  30
+
+#define PREAMBLE_LENGTH             PKT_PREAMBLE_LENGTH_04BYTES
+#define SYNC_LENGTH                 PKT_SYNC_LENGTH_4BYTES
+#define CONTROL_LENGTH              PKT_CONTROL_LENGTH_0BYTES
+#define EN_ADDRESS                  S_DISABLE
+#define EN_FEC                      S_DISABLE
+#define CHANNEL_NUMBER              1 // betzw - WAS: 0
+#define LENGTH_TYPE                 PKT_LENGTH_VAR
+#define POWER_INDEX                 7
+#define RECEIVE_TIMEOUT             2000.0 /*change the value for required timeout period*/
+#define RSSI_THRESHOLD              -120
+
+
+
+#define POWER_DBM                   11.6
+#define CHANNEL_SPACE               100e3
+#define FREQ_DEVIATION              127e3
+#define BANDWIDTH                   540.0e3
+#define MODULATION_SELECT           GFSK_BT1
+#define DATARATE                    250000
+#define XTAL_OFFSET_PPM             0
+#define SYNC_WORD                   0x88888888
+#define LENGTH_WIDTH                8 // betzw - NOTE: only 255 bytes for payload!!!
+#define CRC_MODE                    PKT_CRC_MODE_16BITS_2
+#define EN_WHITENING                S_DISABLE
+#define INFINITE_TIMEOUT            0.0
+
+// extern volatile FlagStatus xRxDoneFlag, xTxDoneFlag;
+// extern volatile FlagStatus PushButtonStatusWakeup;
+extern uint16_t wakeupCounter;
+extern uint16_t dataSendCounter ;
+// extern volatile FlagStatus PushButtonStatusData, datasendFlag;
+
+typedef struct
+{
+  uint8_t Cmdtag;
+  uint8_t CmdType;
+  uint8_t CmdLen;
+  uint8_t Cmd;
+  uint8_t DataLen;
+  uint8_t* DataBuff;
+}AppliFrame_t;
+
+/*---------------------------------------------------------------------------*/
+#endif /* __SPIRIT_H__ */
+/*---------------------------------------------------------------------------*/