RAK3172-T not responding after 4 days

Hi Everyone,

Greetings,

We have recently purchased the new RAK3172**-T** modules. Three of them were already onsite at our client. I have noticed that after 4 days of continuous operations, all the 3 RAK3172-T modules stopped working (nearly at the same time). The modules have the same firmware and use the same code based on RUI3 API. Below are the device parameters.

  • Lorawan, EU868
  • ADR - ON
  • DR - defined by the network
  • Default module tx power.
  • send messages based on events.

21:31:36.503 β†’ AT+SN=AC1F09FFFE0AED44
21:31:36.503 β†’ OK
21:31:44.583 β†’ AT+VER=RUI_4.0.5_RAK3172-T
21:31:44.583 β†’ OK
21:31:50.384 β†’ AT+CLIVER=1.5.10
21:31:50.384 β†’ OK
21:31:56.155 β†’ AT+APIVER=3.2.6
21:31:56.155 β†’ OK
21:32:03.803 β†’ AT+HWMODEL=rak3172T
21:32:03.803 β†’ OK
21:32:12.530 β†’ AT+HWID=stm32wle5xx
21:32:12.530 β†’ OK
21:32:21.681 β†’ AT+BOOTVER=RUI_BOOT_0.7_STM32WLE5CC
21:32:21.681 β†’ OK

On Arduino IDE: *Additional Board Manager URLS:

https://raw.githubusercontent.com/RAKWireless/RAKwireless-Arduino-BSP-Index/main/package_rakwireless.com_rui_index.json*

I was onsite today to intervene, I tried resetting the module with No success. I then powerOFF and then powerON the device and only this time the RAK3172-T was able to connect to TTN.

Note: I have already deployed some of the devices in different locations it’s been 2 days already, and 1 of them already stopped working.

I don’t know if this is related to Timer Mode, correct me if wrong, code as shown below.

unsigned long TIME_INTERVAL=1800000;

    if(api.system.timer.create(RAK_TIMER_0, (RAK_TIMER_HANDLER)heartBeat, RAK_TIMER_PERIODIC) != true){Serial.printf("LoRaWan- Creating timer failed.\r\n");return;}
    if(api.system.timer.start(RAK_TIMER_0, TIME_INTERVAL, NULL) != true){Serial.printf("LoRaWan- Starting timer failed.\r\n");return;}

Can someone please shed some light on this issue.

Thanks,

Hi @Avishek

Can I have a few more details?
I guess the RAK3172-T is running as stand-alone MCU on a custom PCB?

Can you share more details of your code? You say event driven, so I guess your loop() is empty?
Is it only waking up on the timer events or are there other events that can wake up the device (external interrupts)?

I have multiple RAK3172 (not -T) running for weeks only waking up by external interrupt (door open/close) and timer. I will try to run a test with your 30 minutes timer settings.

The firmware of the RAK3172 and RAK3172-T are basically the same, the difference is only in the setup for TCXO and oscillator.

Your timer setup looks ok, I don’t see a problem there.

Test started. System is only waking up on timer events. Same type of timer call, set to 30 minutes interval.

2 Likes

Hi Bernd,

Greetings, thanks for your swift response as usual :slightly_smiling_face:

Yes, you are right, the RAK3172-T module is running as standalone (without a host MCU) on a custom PCB.

I am using both the timer and external interrupt, but my devices are configured as class C which is always ON. so in my case there is no wake-up from deep sleep.

I don’t have much in the loop() it is very simple. below is the extract of the loop().

unsigned long TIME_INTERVAL=1800000;

void interruptEvent(){
  mcp23017_interruptCounter=mcp23017_interruptCounter+1;
  mcp23017_pinAB_next=get_InterruptPin();
  clear_Interrupt();
}

void setup(){
  /*
  Variable declaration has been removed
  */
    if(api.system.timer.create(RAK_TIMER_0, (RAK_TIMER_HANDLER)heartBeat, RAK_TIMER_PERIODIC) != true){Serial.printf("LoRaWan- Creating timer failed.\r\n");return;}
    if(api.system.timer.start(RAK_TIMER_0, TIME_INTERVAL, NULL) != true){Serial.printf("LoRaWan- Starting timer failed.\r\n");return;}
}

void loop(){
  new_int_counter=mcp23017_interruptCounter;
  new_pinAB=mcp23017_pinAB_next;
  
  while(new_int_counter!=0){
    Serial.printf("DBG> Counter: %d\n\r",new_int_counter);
    new_int_counter=new_int_counter-1;
    mcp23017_interruptCounter=mcp23017_interruptCounter-1;
    if(mcp23017_pinAB_prev!=new_pinAB){
      mcp23017_pinAB_prev=new_pinAB;
      construct_lora_pkt(0x03); //prepare payload to be sent
      api.lorawan.send(sizeof(lora_payload), lora_payload, 129,true, 4);
      //sent_flag=false;
    //while(sent_flag==false){}
    delay(10000);   
    }else{Serial.println("DBG> --same");}
  }
}

Many thanks,
Best Regards,

Hi Bernd,

I have other devices in remote site already facing this issue. see snapshot below 2 devices are already having this issue.

I have also set a device under test on my side.

Thanks,

Hi Bernd,

Greetings and Good day,

I am constantly monitoring the same on my side, see the below snapshot I have another device that is currently down after 4 days of continuous operation (it’s been 2 hours since the device is down).

Thanks,
Best Regards,

My RAK3172 was sending the last 4 days without problems. But I had to take it down today for another test.

I should get some RAK3172-T modules.

But I can as well test only on AS923-3, I have no working EU868 setup at the moment. It might be related to the LoRaWAN region.

I was thinking it might be the DutyCycle limitation in EU868, but with your send interval of 1800 ms that should be not the problem.

When the devices stop sending, can you still access them over UART with AT commands?

1 Like