This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf52832 not working outside debugger.

Hi

I have a wired situation in my project. Everything is working fine when I am running my heart-rate device with the debugger. When I detach the debugger or just power-cycle the device behaviour becomes wired. The device still advertise, so I can see it from my phone. But, when I try to connect to it from my phone, it will not connect anymore. If I do "connect jLink" from Segger studio, then everything works fine again.

I am using SEGGER_RTT_WriteString a lot, and I suspected that it could be that the output to the debugger via SWD was blocking when I am not running the debugger. So, I have checked in my code that I am doing SEGGER_RTT_Init() at start, and I have set the SEGGER_RTT_CONFIG_DEFAULT_MODE to 0 (i.e SKIP when buffer is full).

I am using nRF52832 with our own HW, Segger Studio and j-Link Ultra. The sdk version 14.2.0.

Any idea where to start looking for a solution?

Regards Arne

  • but that's my point - you didn't just say you've found cases you were unable to explain where turning off RTT fixed a bug you couldn't understand. You made the statement that RTT requires JLink to be connected all the time which is just straight up false and not as designed by Segger. The problem with posts like this is someone then does turn off RTT, it randomly fixes the actual bug they do have which is something different and then the incorrect "fact" that 'RTT causes your program to hang if JLink isn't connected' becomes something people find when they search for answers and think it's true. Then people randomly remove RTT, make life hard and never find their actual issues.

    If you want to post opinion, go ahead, but at least say 'in my experience' or 'you are supposed to be able to leave RTT code on all the time but I've had some problems with that I never got to the bottom of'.

  • Well I am not jlink expert like you. I just know that when I run code with RTT enabled and the Jlink connected it worked fine. Removing the jlink, doesn't work. Disabling the RTT works in all cases and that is what I am sharing here. So by my experiences jlink needs to be connected to for rtt to work. It could be a different issue I don't know. btw you still haven't provided any alternative solution to problem at hand. So what do we need to do to make it work ?

  • Hi you

    Thanks for trying to help me out!

    I commented out all the code in SEGGER_RTT_printf and SEGGER_RTT_WriteString. That's the only call I am doing to RTT. That gave the same results as earlier. Everything works fine when J-link is connected. When I disconnect j-link or power-cycling, then I am not able to connect anymore, even if my device is advertising.

    Regards Arne

  • Try to look for rtt in sdk_config.h. There is a define that enabled it in there some where and disable it there. If it is enabled in there, most likely be used throughout the sdk not just in your code. Do a clean compile after you disable it in the sdk_config.h. That is what I did and it worked for me.

  • Well removing all the RTT calls wasn’t likely to actually help as RTT itself isn’t the problem, as explained, by me and by Segger. So what else could it be, one possibility is that when you connect the debugger that also connects up the UART, did you leave the UART enable code in? That actually can block trying to do UART writes.

    Another option is to get it blocked, THEN attach the debugger which you can do to a running board and breakpoint and find out where you are. Segger’s ozone (free) debugger is kind of handy for that, it’s very bare bones, or just use the command line.

Related