A log of process debugging when I started using a newer version of the Nordic radio SoC ship: nrf52810.
I am using:
- gnu arm compiler
- gnu mcu plugin for eclipse
I found the need to upgrade nrfjprog and JLink. When a newer chip comes out, old versions of the tools don’t understand the new chip.
The first symptom is that nrfjprog doesn’t recognize the chip and says something like “the connected chip is not the right family” even though the nrf52810 is in the 52 family and you specified –family NRF52. You need to upgrade to the latest nrfjprog version.
When I overwrote the existing nrfjprog directory, I seemed to have problems with nrfjprog not finding the “DLL”, meaning the JLink shared library .so. I seemed to fix that by deleting the directory and installing fresh.
The next symptom might be, if you use an old debug configuration with device equal to nrf52832, is that the debugger flashes the chip, but then your target program crashes. You need to specify the correct device in the debug configuration.
The next symptom is that you specify in an Eclipse debug configuration, under the Device tab, that the device is nrf52810_xxAA, but the debugger gives “Failed to set device (nRF52810_xxAA). Unknown device selected?” You need to upgrade to the latest JLink version. That involves:
- download a JLink (say .deb) installer and run it
- update Eclipse settings for JLink
See https://gnu-mcu-eclipse.github.io/debug/jlink/ for one way to do it (in Window>Preferences>SEGGER J-Link.
Change the jlink_path variable in Eclipse say from “JLink_v60i”to “JLinkv630f”. In the Debug config>Debugger tab>Executable field, choose the “Variables” button. Expect a list of variables. Scroll to and select “jlink_path” and choose “Edit variables” button. Expect another list. Scroll to an select “jlink_path” and choose “Edit…” button. Change value, and choose OK, OK, etc.
Also, you might need to change the “jlink_gdbserver” variable from “JLinkGDBServer” to “JLinkGDBServerCLExe”. The name has changed, by the addition of “CLExe”? Note that JLinkGDBServerExe has a GUI, but the GNU MCU plugin says to use the command line version JLinkGDBServerCLExe
After you do all that, you should be able to execute a debug configuration and flash your app to the device.
My app still crashes. Now I find that I need a different softdevice for this chip, S112 instead of S132. I need to change my build config:
- use headers for S112
- use linker script for S112
Why change to nrf52810?
For me, because it is cheaper in dollars per unit. Fanstel sells a module BT832A for less than $4, which is cheaper than the Waveshare nrf518122 that I was using. I am already developing and testing on the nrf52DK which uses the NRF52 family nrf52832, and which is the dev kit that support nrf52810.
Here is a comparison of the family members.
For me, the main difference is: has less memory (192k or ROM instead of 256k.) So I will need to change my build process to include optimization for small size, and to build for a different Softdevice. That will be costly in development time for a new build process.
I can use the nrf52810 because my app is small, doesn’t use many periherals (none that are missing on the 52810), and doesn’t use many BT features (only one connection.)