Debugging
Although the Voltix SDK takes much of the pain of developing battery-free applications away, it remains much more challenging than developing for battery-powered devices. An effective development setup is therefore essential.
Constant harvesting source
While developing, a reliable, constant energy input helps to keep results comparable. Nothing is more frustrating than hunting a phantom bug for hours when your application suddenly doesn’t work anymore just because you didn’t notice that it was getting too dark outside and the light isn’t sufficient to power your device anymore. To avoid this, either keep the solar shield at a fixed position and angle under an artificial light source or use a lab bench power supply as an emulated harvesting source. For example, a 1V voltage fed via a 1kOhm resistor to the pin Vin of the Voltix Board provides a steady harvesting input of around 160uW.
Capacitor voltage monitoring
Application execution on the Voltix Board/Module is mainly dictated by the capacitor voltage. If something does not immediately work as expected it is essential to be able to see the capacitor voltage. To this end, connect an oscilloscope channel to the Vcap pin and watch the capacitor voltage during execution. Ideally, use a mixed signal logic analyzer/oscilloscope to monitor capacitor voltage, UART output (on pin D1/TX) and any peripheral connections. Keep in mind that, depending on the input impedance of your equipment, there may be significant current flowing into your device, changing execution flow.
Constant power supply
For initial development of new features it is often helpful to run Voltix in a continuously powered mode like any standard development kit. For this purpose, the Voltix Probe, which is also present on the Voltix Board, allows powering the Voltix Module with a constant power supply.
Important
At multiple instances, the Voltix runtime waits for the capacitor voltage to reach a threshold before continuing execution. Similarly, many applications use the voltix_wait_cap_charged() call to wait for this threshold. As a result, even when you have the constant power supply enabled, your application will not run when you don’t have a harvester attached. To allow your application to execute regardless, you can compile it with the flag DISABLE_CAP_MONITOR defined. This flag disables all waiting for the capacitor voltage threshold and allows code to execute while the constant power supply is enabled and no harvester is attached.
To compile your application with the DISABLE_CAP_MONITOR flag, call make USER_DEFINES=-DDISABLE_CAP_MONITOR or add USER_DEFINES=-DDISABLE_CAP_MONITOR to the application’s Makefile.
GDB Debugging
The RP2040 microcontroller on the Voltix Board and Voltix Probe exposes a CMSIS-DAP interface for debugging via gdb.
Important
When entering a debugging session, the Voltix Probe automatically enables the constant power supply. However, as long as you don’t have a harvester attached, you still need to compile your application with the DISABLE_CAP_MONITOR flag defined. See the hint above.
Tip
Stepping through highly optimized code can be cumbersome. To change the default optimization level you can add, for example, OPT = -O0 -g3 to the application’s Makefile.
Command-line
After installing pyOCD with pip install pyocd, you can start a gdb server with pyocd gdbserver --elf _build/build.elf --target nrf52833 and connect to the session with your favorite debugging tool.
Visual Studio Code
For Visual Studio Code, install the Cortex-Debug extension from the marketplace and place a launch.json in the .vscode directory of your project with the following content:
{
"configurations": [
{
"cwd": "${workspaceFolder}",
"executable": "${workspaceRoot}/_build/build.elf",
"name": "Debug with PyOCD",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"servertype": "pyocd",
"serverArgs": [
"--target",
"nrf52833",
"--elf",
"${workspaceRoot}/_build/build.elf",
]
},
]
}
Select Run and Debug from the side panel and click the green play button in the upper left bar.