MPSL Assert Error and Arch_Except Reason 3 error when using BLE

Hello, I have a custom board that was designed for me, but based off of the Acconeer XM126.  It is very similar with a few minor differences.  The person who designed it has bailed and is no longer reachable.  I am a mechanical engineer with limited coding and electrical knowledge.  I have had to stumble my way through.  There were multiple errors with the board that I have had to fix so far including the wrong HF crystal.  He originally had a 24mhz crystal and I had it replaced with a 32 and proper load capacitance.  The other issue is that he added a push button for BLE pairing.  It appears he meant to send 1.8v to pin y23 when the button is pushed.  It is incorrect and is sending 1.8v to y23 all the time.  I don't know if that could be an issue or not.  I'm not sure where the call out would be for what to do with that pin when it was getting the voltage.  I have searched his source and header files.  The board works with the radar sensor when I flash it with normal distance detecting programs.  However, when I load my program or any example program that uses BLE it gives me the errors I have attached.  MPSL Assert 112, 2185 and Arch except reason 3.  Also, zephyr fatal error 3: Kernel oops on cpu 0, fault during interrupt handling.  This is the last piece of the puzzle for me.  Does anyone have any idea what this might be?  Please remember I am limited in my knowledge.  I have already spent thousands to get here, so I am trying to solve this on my own.  Thanks.

  • I've tried that code, but still get errors with all of it when I compile.  I'm using the peripheral_uart example from the 2.5.0 version sdk.  All I'm doing to copying and pasting it in the main.c file after the defines.  Is there anything else I would need to change or add?  Thanks.

    Mike

  • Jonathan,

    I did replace the 32mhz crystal on two boards and I am still getting the same error.  Not sure where to go from here.  I wish I could get the code to work for testing the HF clock.  

    Mike

  • I keep getting notifications saying an engineer has been assigned to my ticket, but not getting a reply.  Just wanted to check on that.  Thanks.

  • Hello Mike,

    Jonathan asked if I could pitch in on this one. As I understand we're trying to figure out whether the 32MHz XTAL is working correctly. 

    mchamberlain1980 said:
    I've tried that code, but still get errors with all of it when I compile.  I'm using the peripheral_uart example from the 2.5.0 version sdk.  All I'm doing to copying and pasting it in the main.c file after the defines.  Is there anything else I would need to change or add?

    Can you please share the file where you tried to enter the code that Jonathan proposed (including the parts that you added)?

    Also, please copy and paste the entire build log, including the build errors that you are seeing.

    Best regards,

    Edvin

  • Hi Edvin,

    I did finally get it to compile after adding it to the section below of peripheral_uart in the sdk.  I had it outside the main loop before, I guess.  FYI I am using v 2.5.0, if that matters.  However, when I flash it and open a putty window I just get ***Booting nRF Connect SDK v2.5.0*** followed by Starting Nordic UART service sample.  And that is it.  

    int main(void)
    {
        int blink_status = 0;
        int err = 0;

        configure_gpio();

        err = uart_init();
        if (err) {
            error();
        }

        if (IS_ENABLED(CONFIG_BT_NUS_SECURITY_ENABLED)) {
            err = bt_conn_auth_cb_register(&conn_auth_callbacks);
            if (err) {
                printk("Failed to register authorization callbacks.\n");
                return 0;
            }

            err = bt_conn_auth_info_cb_register(&conn_auth_info_callbacks);
            if (err) {
                printk("Failed to register authorization info callbacks.\n");
                return 0;
            }
        }

        err = bt_enable(NULL);
        if (err) {
            error();
        }
    RIGHT HERE:   
        NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;

        NRF_CLOCK->TASKS_HFCLKSTART=1;

        while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)

        {

            // Do nothing

        }

        LOG_INF("HFCLK started successfully. Stat: 0x%08x", NRF_CLOCK->HFCLKSTAT);

        LOG_INF("Bluetooth initialized");

    Another quick question, why would I have trouble flashing my Acconeer examples after flashing an example from the NRF sdk?  They are setup for mcumgr, but should that matter?  I feel like I had this trouble before.  I am flashing the nrf example using jlink through the 52840DK.  Then I go back and try to flash an example from Acconeer and it won't flash with mcumgr or jlink.  My board is setup like the Acconeer xm126, FYI.  

    I hope that all makes sense.  Thanks.

    Mike

Related