Incomplete transition to Class B LoRaWAN

Title: Issues Switching to Class B - STM32 B-L072Z-LRWAN1 + LoRaNK8 + ChirpStack

Hello everyone,

I’m trying to set up a Class B end-device using an STM32 B-L072Z-LRWAN1. I’m using the manufacturer-provided code to send Class B messages.

My gateway is a LoRaNK8, which consists of a BeagleBone Green and an iC880A concentrator. It is running the Semtech packet_forwarder and is configured to send beacons. Here is my gateway configuration:

"gateway_conf": {
    "gateway_ID": "xxxxxxxxxx",
    "server_address": "172.24.100.xx",
    "serv_port_up": 1700,
    "serv_port_down": 1700,
    "keepalive_interval": 10,
    "stat_interval": 30,
    "push_timeout_ms": 100,
    "forward_crc_valid": true,
    "forward_crc_error": false,
    "forward_crc_disabled": false,
    "gps_tty_path": "/dev/ttyS4",
    "ref_latitude": 0.0,
    "ref_longitude": 0.0,
    "ref_altitude": 0,
    "beacon_period": 128,
    "beacon_freq_hz": 869525000,
    "beacon_datarate": 9,
    "beacon_bw_hz": 125000,
    "beacon_power": 14,
    "beacon_infodesc": 0
}

My gateway service is running:

● lorank.service - Lorank activation
   Loaded: loaded (/lib/systemd/system/lorank.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2025-03-13 10:11:27 UTC; 1h 44min ago
 Main PID: 1194 (start)
    Tasks: 8 (limit: 1010)
   Memory: 572.0K
      CPU: 3min 24.882s
   CGroup: /system.slice/lorank.service
           ├─1194 /bin/bash /root/lorank8v1/start
           └─1207 ./lora_pkt_fwd

Additionally, I can see beacon-related logs:

Mar 13 11:55:31 Lorank8 lorank8v1[1207]: src/jitqueue.c:453:jit_print_queue(): INFO: [jit] queue contains 3 beacons:
Mar 13 11:55:31 Lorank8 lorank8v1[1207]: src/jitqueue.c:456:jit_print_queue():  - node[0]: count_us=1983604652 - type=3
Mar 13 11:55:31 Lorank8 lorank8v1[1207]: src/jitqueue.c:456:jit_print_queue():  - node[1]: count_us=2111604967 - type=3
Mar 13 11:55:31 Lorank8 lorank8v1[1207]: src/jitqueue.c:456:jit_print_queue():  - node[2]: count_us=2238606344 - type=3

On the ChirpStack side, after the join, I receive the PingSlotChannelReq and PingSlotChannelAns MAC commands:

chirpstack_1 | 2025-03-13T12:01:27.569912Z  INFO up{deduplication_id=1d7d059e-ab7c-4d88-8a65-8de794154564}:data_up{dev_eui="70b3d57ed006e410"}: chirpstack::storage::mac_command: Pending mac-command block deleted dev_eui=70b3d57ed006e410 cid=PingSlotChannelAns
chirpstack_1 | 2025-03-13T12:00:27.661970Z  INFO up{deduplication_id=7696548c-fa76-4353-b429-02c1f2d610cf}:data_up{dev_eui="70b3d57ed006e410"}:data_down{downlink_id=470485088}: chirpstack::storage::mac_command: Pending mac-command block set dev_eui=70b3d57ed006e410 cid=PingSlotChannelReq

However, my uplink messages are still marked as Class A instead of Class B. I am unsure what additional steps are required to complete the transition to Class B.

Has anyone faced a similar issue? Any help or suggestions would be greatly appreciated!

Thanks!

The device must be able to synchronize with the gateway’s beacons. It may take a while, since the beacon period is 128s.

Before switching from Class A to Class B, the end-device MUST first receive one of the network beacons to align his internal timing reference with the network.

You need to configure the device’s ping slot periodicity in Chirpstack. This is communicated out-of-band between the device and the LNS.

The gateway is sending beacons, but the end device does not seem to detect them, and I am not sure why. The device is supposed to synchronize with the gateway’s beacons, but it appears that it is not receiving them. I have configured the ping slot periodicity in Chirpstack, as instructed, but the device still doesn’t seem to align its internal timing with the network.

========== MCPS-Confirm =============

1741883391s993: RX_BC on freq 869525000 Hz at DR 3
1741883392s051: MAC rxTimeOut

Could there be an issue with the configuration, or is there something else preventing the device from detecting the beacons?