My OpenThread Joiner resets with MPSL ASSERT: 107, 292

I have a simple Thread joiner program. I am trying to join to a thread network created by my OTBR. Attached is my program. This program resets on call to otJoinerStart().

Following is my prj.conf content:

CONFIG_DK_LIBRARY=y
CONFIG_GPIO=y
CONFIG_PRINTK=y
CONFIG_HEAP_MEM_POOL_SIZE=24000
CONFIG_ASSERT=y

CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_OPENTHREAD_RADIO_WORKQUEUE_STACK_SIZE=2048
CONFIG_OPENTHREAD_THREAD_STACK_SIZE=8192

#CONFIG_SIEMENS_KNXIOT=y
# Enable C++
CONFIG_CPP=y
CONFIG_STD_CPP11=y

CONFIG_REQUIRES_FULL_LIBCPP=y
#CONFIG_CPP_EXCEPTIONS=n

# Enable printing of floating-points
#CONFIG_HAS_NEWLIB_LIBC_NANO=y
#CONFIG_NEWLIB_LIBC_NANO=y
CONFIG_NEWLIB_LIBC=y
CONFIG_PICOLIBC_USE_MODULE=n
CONFIG_FPU=n

# Enable OpenThread CoAP support API
CONFIG_OPENTHREAD_COAP=y
CONFIG_LOG=y

# Network shell
CONFIG_SHELL=n
# CONFIG_OPENTHREAD_SHELL=y
# CONFIG_SHELL_ARGC_MAX=26
# CONFIG_SHELL_CMD_BUFF_SIZE=416

# Network sockets
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POLL_MAX=4

# Same network Master Key for client and server
CONFIG_OPENTHREAD_NETWORKKEY="00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff"
CONFIG_OPENTHREAD_JOINER=y
CONFIG_OPENTHREAD_JOINER_AUTOSTART=y
CONFIG_OPENTHREAD_JOINER_PSKD="CDCDCD"
CONFIG_OPENTHREAD_FTD=y
CONFIG_OPENTHREAD_DEBUG=y
CONFIG_OPENTHREAD_LOG_LEVEL_DEBG=y

# L2 OpenThread enabling
CONFIG_NET_L2_OPENTHREAD=y

# Generic networking options
CONFIG_NETWORKING=y
CONFIG_OPENTHREAD_DHCP6_CLIENT=y

CONFIG_CHIP=n
CONFIG_ENTROPY_GENERATOR=y


#CONFIG_TINYCBOR=n

# CONFIG_MBEDTLS=y
# CONFIG_MBEDTLS_USER_CONFIG_ENABLE=y
# CONFIG_MBEDTLS_USER_CONFIG_FILE="D:/repo/knxiot/cmake/openthread_depricated/mbedtls-user-config.h"
CONFIG_MBEDTLS_ENABLE_HEAP=y
CONFIG_MBEDTLS_DEBUG=y
# CONFIG_MBEDTLS_CFG_FILE="config-tls-generic.h"
CONFIG_MBEDTLS_CFG_FILE="nrf-config.h"
CONFIG_MBEDTLS_PSA_CRYPTO_CONFIG_FILE="nrf-psa-crypto-want-config.h"
#CONFIG_MBEDTLS_PSA_CRYPTO_CFG_FILE="nrf-psa-crypto-want-config.h"
CONFIG_MBEDTLS_PSA_CRYPTO_USER_CONFIG_FILE="nrf-psa-crypto-config.h"
CONFIG_MBEDTLS_DHM_C=y
CONFIG_MBEDTLS_MD_C=y
CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y
CONFIG_MBEDTLS_CIPHER_C=y
CONFIG_MBEDTLS_DEBUG_C=y
#CONFIG_MBEDTLS_MEMORY_DEBUG=y
CONFIG_MBEDTLS_CIPHER_MODE_CBC=y
CONFIG_MBEDTLS_CIPHER_PADDING_PKCS7=y
CONFIG_MBEDTLS_PK_C=y
CONFIG_MBEDTLS_X509_CREATE_C=y
CONFIG_MBEDTLS_X509_CSR_WRITE_C=y
CONFIG_MBEDTLS_SHA256_C=y
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_ECDSA_C=y
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_CTR_DRBG_C=y
CONFIG_MBEDTLS_ENTROPY_C=y
CONFIG_MBEDTLS_PKCS5_C=y
CONFIG_MBEDTLS_SHA1_C=y
CONFIG_MBEDTLS_PK_WRITE_C=y
CONFIG_CBPRINTF_LIBC_SUBSTS=y
#CONFIG_MBEDTLS_ERROR_C=y
CONFIG_MBEDTLS_HKDF_C=y
#include <zephyr/drivers/gpio.h>
#include <zephyr/kernel.h>

#include <dk_buttons_and_leds.h>
#include <openthread/thread.h>
#include <zephyr/logging/log.h>
#include <zephyr/net/openthread.h>

LOG_MODULE_REGISTER(ot_sample);

// Define the channel you want to use
#define THREAD_CHANNEL 15 // Replace with your desired channel (11 to 26)

// Thread state change callback
static void state_changed_callback(uint32_t flags, void *context) {
    if (flags & OT_CHANGED_THREAD_ROLE) {
        otDeviceRole role = otThreadGetDeviceRole((otInstance *)context);
        if (role == OT_DEVICE_ROLE_CHILD || role == OT_DEVICE_ROLE_ROUTER ||
            role == OT_DEVICE_ROLE_LEADER) {
            dk_set_led_on(
                DK_LED1); // Turn on LED1 when connected to Thread network
        } else {
            dk_set_led_off(DK_LED1); // Turn off LED1 when not connected
        }
    }
}

void joinerCb(otError aError, void *aContext) {}

int main(void) {
    int ret;

    // Initialize LEDs
    ret = dk_leds_init();
    if (ret) {
        printk("Failed to initialize LEDs, error %d\n", ret);
        return 1;
    }

    // Initialize OpenThread
    struct otInstance *ot_instance = openthread_get_default_instance();
    if (ot_instance == NULL) {
        printk("Failed to get OpenThread instance\n");
        return 1;
    }

    // Set OpenThread channel
    otError error = otLinkSetChannel(ot_instance, THREAD_CHANNEL);
    if (error != OT_ERROR_NONE) {
        printk("Failed to set Thread channel, error: %d\n", error);
        return 1;
    }

    // Register the state change callback
    otSetStateChangedCallback(ot_instance, state_changed_callback, ot_instance);

    error = otIp6SetEnabled(ot_instance, true);
    if (error != OT_ERROR_NONE) {
        printk("Failed to start Thread iface, error: %d\n", error);
        return 1;
    }

    // Start the Thread network
    error = otThreadSetEnabled(ot_instance, true);
    if (error != OT_ERROR_NONE) {
        printk("Failed to start Thread network, error: %d\n", error);
        return 1;
    }

    // Start the Joiner process
    const char *joiner_psk = "CDCDCD"; // Replace with your joiner PSK
    error = otJoinerStart(ot_instance, joiner_psk, NULL, NULL, NULL, NULL, NULL,
                          &joinerCb, ot_instance);
    if (error != OT_ERROR_NONE) {
        printk("Failed to start joiner, error: %d\n", error);
        return 1;
    }

    // Main loop
    while (1) {
        k_sleep(K_MSEC(
            100)); // Let Zephyr handle the event loop and OpenThread processing
    }
    return 0;
}
Related