FORUM

SX1276 - FHSS - Frequency Hopping Scheme

Hello everyone,

I’m trying to design a product with a FHSS scheme implemented and turned to Semtech as a result. However, I have a technical question about your SX1276 LoRa tranceiver. I’m trying to figure out how to setup the radio for frequency hopping spread spectrum (FHSS) implementation.

It states in the datasheet under section 4.1.1.8. - Frequency Hopping with LoRa:
“each LoRa packet is transmitted on each hopping channel from a look up table of frequencies managed by the host microcontroller.”

It is not clear in the datasheet. What part of the FHSS scheme is controlled by the host microcontroller and what part is controlled by the radio. It would be helpful if someone could share with me any additional documentation for setting the sx1276 up for proper operation of the LoRa FHSS mode.

Thank you in advance. And look forward to any reply.

Hello,

I believe a good place to start would be the following source code file:

The above links to a software interface description utilized by the LoRaMac-node software package, specifically the sx1276 transceiver driver abstraction. However, the interface defined is general and hence supports more than just LoRaWAN use-cases.

Specifically referring to frequency hopping spread spectrum relevant parameters, I believe the interface descriptions below provide a good overview of what is configurable. For example, you can see the bandwidth, coding rate, numer of symols between hops are all exposed (amongst others).

RX Parameters:

  • \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
  • \param [IN] bandwidth Sets the bandwidth
  •                      FSK : >= 2600 and <= 250000 Hz
    
  •                      LoRa: [0: 125 kHz, 1: 250 kHz,
    
  •                             2: 500 kHz, 3: Reserved]
    
  • \param [IN] datarate Sets the Datarate
  •                      FSK : 600..300000 bits/s
    
  •                      LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
    
  •                            10: 1024, 11: 2048, 12: 4096  chips]
    
  • \param [IN] coderate Sets the coding rate (LoRa only)
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
    
  • \param [IN] bandwidthAfc Sets the AFC Bandwidth (FSK only)
  •                      FSK : >= 2600 and <= 250000 Hz
    
  •                      LoRa: N/A ( set to 0 )
    
  • \param [IN] preambleLen Sets the Preamble length
  •                      FSK : Number of bytes
    
  •                      LoRa: Length in symbols (the hardware adds 4 more symbols)
    
  • \param [IN] symbTimeout Sets the RxSingle timeout value
  •                      FSK : timeout number of bytes
    
  •                      LoRa: timeout in symbols
    
  • \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
  • \param [IN] payloadLen Sets payload length when fixed length is used
  • \param [IN] crcOn Enables/Disables the CRC [0: OFF, 1: ON]
  • \param [IN] freqHopOn Enables disables the intra-packet frequency hopping
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [0: OFF, 1: ON]
    
  • \param [IN] hopPeriod Number of symbols between each hop
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: Number of symbols
    
  • \param [IN] iqInverted Inverts IQ signals (LoRa only)
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [0: not inverted, 1: inverted]
    
  • \param [IN] rxContinuous Sets the reception in continuous mode
  •                      [false: single mode, true: continuous mode]
    

*/
void SX1276SetRxConfig( RadioModems_t modem, uint32_t bandwidth,
uint32_t datarate, uint8_t coderate,
uint32_t bandwidthAfc, uint16_t preambleLen,
uint16_t symbTimeout, bool fixLen,
uint8_t payloadLen,
bool crcOn, bool freqHopOn, uint8_t hopPeriod,
bool iqInverted, bool rxContinuous );

Transmit Parameters:

  • \brief Sets the transmission parameters
  • \remark When using LoRa modem only bandwidths 125, 250 and 500 kHz are supported
  • \param [IN] modem Radio modem to be used [0: FSK, 1: LoRa]
  • \param [IN] power Sets the output power [dBm]
  • \param [IN] fdev Sets the frequency deviation (FSK only)
  •                      FSK : [Hz]
    
  •                      LoRa: 0
    
  • \param [IN] bandwidth Sets the bandwidth (LoRa only)
  •                      FSK : 0
    
  •                      LoRa: [0: 125 kHz, 1: 250 kHz,
    
  •                             2: 500 kHz, 3: Reserved]
    
  • \param [IN] datarate Sets the Datarate
  •                      FSK : 600..300000 bits/s
    
  •                      LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
    
  •                            10: 1024, 11: 2048, 12: 4096  chips]
    
  • \param [IN] coderate Sets the coding rate (LoRa only)
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
    
  • \param [IN] preambleLen Sets the preamble length
  •                      FSK : Number of bytes
    
  •                      LoRa: Length in symbols (the hardware adds 4 more symbols)
    
  • \param [IN] fixLen Fixed length packets [0: variable, 1: fixed]
  • \param [IN] crcOn Enables disables the CRC [0: OFF, 1: ON]
  • \param [IN] freqHopOn Enables disables the intra-packet frequency hopping
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [0: OFF, 1: ON]
    
  • \param [IN] hopPeriod Number of symbols between each hop
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: Number of symbols
    
  • \param [IN] iqInverted Inverts IQ signals (LoRa only)
  •                      FSK : N/A ( set to 0 )
    
  •                      LoRa: [0: not inverted, 1: inverted]
    
  • \param [IN] timeout Transmission timeout [ms]
    */
    void SX1276SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev,
    uint32_t bandwidth, uint32_t datarate,
    uint8_t coderate, uint16_t preambleLen,
    bool fixLen, bool crcOn, bool freqHopOn,
    uint8_t hopPeriod, bool iqInverted, uint32_t timeout );

Hope you find this useful.