Helpful

Industrialisation

How to test in production ?


This document is intended to guide the Device Maker's during Sigfox Device production tests  with following features :

  • No specific Sigfox equipement required.
  • Fast and simple tests : device tests less than 15seconds.
  • No need to register any device on SIGFOX backend.

General concerns :

  • Module manufacturing tests
    • Conducted tests only
    • If TX path is different than RX path : make both
    • Use optional Faraday cage to put device inside
  • End product
    • If no access to antenna connector : add coupler with calibrated radiated loss
    • If connector accessible : conducted tests


Production TX RF tests

TX RF test are dedicated to check the output RF level of the device. This will ensure that there is no issue between RF IC and RF output.

Test Setup with Litepoint

Test Setup with standard Equipements

Test Descriptions

Carrier Frequency Calibration

This test is dedicated to calibrate the center operational frequency of the device. Frequency offset must be stored in the device in non volatile memory.

A spectrum analyser can be used for this measurement

This test can be executed with the AT command if the modem contains these commands or with the Sigfox Library API

AT$CW : This command activates the continuous mode at a specified frequency.


Description

Device ( with AT cmd )

in continuous wave

Device ( with Sigfox Lib API )

in modulated wave

Spectrum Analyzer

Activate the RF output

AT$CW=Tx_frequency ,1

SIGFOX_API_open(RCx)

SIGFOX_API_test_mode( TX_BPSK, 1 )

SIGFOX_API_close()

Read frequency : offset = frequency_read - frequency_set

Disable  RF output

AT$CW=Tx_frequency ,0



Update the TX Frequency

TX frequency = Tx_frequency + offset

AT$IF= Tx_frequency

Update the TX calibration offset



Activate the  RF output

AT$CW=Tx_frequency ,1

SIGFOX_API_open(RCx )

SIGFOX_API_test_mode( TX_BPSK, 1 )

SIGFOX_API_close()

Read frequency : offset must be 0

Disable  RF output

AT$CW=Tx_frequency ,0



TX modulated Ouput RF power

A Power meter  can be used for this measurement


DescriptionDevice ( with AT cmd )Device ( with Sigfox Lib API )Spectrum Analyzer

Send 5 TX pseudo random BPSK frames without pause

AT$TM=0, 133

SIGFOX_API_open(RCx)

SIGFOX_API_test_mode(TX_BPSK, 0x85)

SIGFOX_API_close()

Read power: should be 14dBm or 22dBm depending on your Radio Configuration


Production RX RF tests

Test Setup with Litepoint

Test Setup with standard Equipements

Test Descriptions

RX sensitivity

The aim of this test is to check that your end product is has no issue in the RX path. Demodulation is a 600bps GFSK.

This test takes only few seconds to measure/detect a loss of power in the RX path.

PER (packet Error Rate) is computed with number of packet sent by the generator and received by the device.

DescriptionDevice ( with AT cmd )Device ( with Sigfox Lib API )600bps GFSK  Signal Generator

Enter in RX mode during 30 seconds

AT$IF=RX_frequency

AT$TM=3,30

SIGFOX_API_open(RCx)

SIGFOX_API_test_mode(RX_GFSK,30)

[ Ensure the
MANUF_API_report_test_result(res), implements a display of the res parameter ] *

Send frames with the Signal Generator

Loop on 10 TX

Send GFSK frame

AAAAB2271F2041843268C5BA53AE79E7F6DD9B

at RX_frequency at level -120dBm

Get the RX level of the received frames

Displayed on the AT console

+RX= RSSI=-120

SIGFOX_API_close()

End Loop

*if not available, you can also 'display' the result on Radio link following the pseudo code for the MANUF_API_report_result function :

MANUF_API_report_result(result)
   Begin
       Config Radio in CW
       if (result == TRUE)
            CW_frequency = TX_frequency - 30KHz
      if (result == FALSE)
      CW_frequency = TX_frequency +30KHz
   End

In this configuration, you have to plug in parallel the Signal Generator and a Spectrum Analyzer

If you need to report the test result with a connected link like the UART : follow the pseudo code for the MANUF_API_report_test() function :

MANUF_API_report_result(result)
   Begin
      Config UART
         if (result == TRUE)
            print_uart(“TRUE”)
         if (result == FALSE)
            print_uart(“FALSE”)
     End

If you need to report the test result with a visual way : follow the pseudo code for the MANUF_API_report_test() function :


MANUF_API_report_result(result)
    Begin
       Config UART
       if (result == TRUE)
          LED = TRUE
       if (result == FALSE)
          LED = FALSE
     End


RX RSSI Calibration

The aim of this test is to program the RSSI level value offset to allow device to give a calibrated RX RSSI level value.

Signal Generator is connected to the device and must send GFSK frame at Sentivity Level + 10dBm ( Level1)and Sensitivity Level + 30dBm.( Level2)

According the device RSSI level, program the offset in the device non volatile memory.

DescriptionDevice ( with AT cmd )Device ( with Sigfox Lib API )600bps GFSK  Signal Generator

Enter in RX mode during 5 seconds

AT$TM=3,5


SIGFOX_API_open(RCx)

SIGFOX_API_test_mode(RX_GFSK, 5 )

[ Ensure the
MANUF_API_report_test_result(res), implements a display of the res parameter with the RSSI] *

Send frames with the Signal Generator

Send GFSK frame

AAAAB2271F2041843268C5BA53AE79E7F6DD9B

at RX_frequency at level Level1 dBm

Get the RX level of the received frames

Displayed on the AT console

+RX= RSSI=xx dBm  ( compare it to the level of the frame sent with the Signal Generator )

=> Program the RX offset ( see module maker's datasheet)

SIGFOX_API_close()

rssi_device = MANUF_API_get_rssi()

rssi_offset = rssi_device - Level1

End Loop
Execute the whole test again with Level2 to check the level of the RSSI


*If you need to report the test result with a connected link like UART  : follow the pseudo code for the MANUF_API_report_test() function :

MANUF_API_report_result(result)
    Begin
      Config UART
      if (result == TRUE)
         print_uart(“TRUE : rssi=%d ”,MANUF_API_get_rssi())
      if (result == FALSE)
         print_uart(“FALSE”)
    End

 

Get ID/PAC from modem with UART

During production, if you need to get ID and PAC from product, you can use the following UART link if available.


DescriptionDevice ( with AT cmd )Device ( with Sigfox Lib API )600bps GFSK  Signal Generator

Get ID and PAC of the device

AT$ID?

AT$PAC?

Or any command provided by the modem manufacturer. See modem datasheet.


SIGFOX_API_open(RCx)

SIGFOX_API_get_device_id(&id)

SIGFOX_API_get_initial_pac(&pac)


Get ID/PAC from modem with RF

In production , if you have access to test mode though UART on your device under test, you can use the following setup :

Device 1Device 2



  • Configure device in RX GFSK 600bps
  • Start RX
  • Configure device in GFSK 600bps
  • Get the ID and PAC
  • Build a payload with ID , PAC
  • Configure Radio in TX mode
  • Transmit


  • Receive packet from device 1 and decode
  • ID/PAC

Example :ONSemi RF IC : you can use local loop mode

Device 1Device 2



AT$RL : listening the local loop


AT$I=10

12345678

AT$I=11

1122334455667788

Get the result of these 2 AT commands and put them into a frame buffer

AT$SL=123456781122334455667788

( default frame is 0x84,0x32,0x68,0xC5,0xBA,0x53,0xAE,0x79,0xE7,0xF6, 0xDD, 0x9B.)



Should receive : 123456781122334455667788

Example : using a built in test mode when starting at the first time

If your device has no physical interface like UART or I/O, you can code as following :

Device 1Device 2



Configure device in RX GFSK 600bps

Start RX

If (First_startup_flag = FALSE )

  1. Configure device in GFSK 600bps

  2. Get the ID and PAC

  3. Build a payload with ID , PAC

  4. Configure Radio in TX mode

  5. Transmit

  1. set first_startup flag=TRUE

else

  1. Start operational firmware



Receive packet from device 1 and decode

ID/PAC

Send a modulated signal with PN values

DescriptionDevice ( with AT cmd )

Device ( with Sigfox Lib API )

Set the TX frequency

AT$IF=TX_center_frequency_in hertz


Send modulation

number is a 8bit length value where bit[0-6] is the number of PN frames to send.

Bit[7] indicated if pause is done or not between each PN frames sending

AT$TM=0,number

SIGFOX_API_open(RCx)

SIGFOX_API_test_mode(TX_BPSK,number)

SIGFOX_API_close()

Can't find what you're looking for ?

Have questions? Our worldwide Community of expert fans can answer them.
Have answers? Join the Community and help!

slack logo

Ask the community >