When The Debugger Lies With Stale Cache Values

In a recent blog post by [Daniel Mangum] he goes over a scenario observed while debugging the Cortex-M33-based nRF54LM20, reading and writing values while running through a few scenarios. After initially it seemed to go seemingly without any issues, suddenly the GDB debugger would happily return values that suggested that a previous operation had not succeeded. Or, as the case turned out to be, stale cached values were being returned.

What follows is a very technical and low-level breakdown of how this MCU functions inside, especially its cryptographic features and Key Management Unit, which is used for storing sensitive information. The most amusing part is probably you can bypass the cached data by explicitly specifying the access port and memory address along with other parameters.

This ReadMemAP command supported by the JLinkGDBServer used here showed the right value, whereas the normal GDB read command using x kept returning the cached values. This raised the question of which cache was doing this. The direct read from the AHB-AP access port worked fine, so the suspicion is that the J-Link software’s own caching, with a run without the J-Link caching indeed working fine.

J-Link has had some hardware-related issues too, with this new issue pointing to an awkward software bug that could be table-flip-and-rage-quit worthy depending on how much time it wastes during a debug session. Fortunately [Daniel] seems to have caught this one quickly and had an easy way to bypass it, but we aren’t all that lucky.

 

A photo of the circuit board with components soldered on

A Solar-Only, Battery-Free Device That Harvests Energy From A BPW34 Photodiode

Normally when you think solar projects, you think of big photovoltaic cells. But a photodiode is just an inefficient, and usually much smaller, PV cell. Since [Pocket Concepts]’s Solar_nRF has such a low power budget, it can get away with using BPW34 photodiodes in place of batteries. (Video, embedded below.)

The BPW34 silicon PIN photodiode feeds a small voltage into a BQ25504 ultra-low-power boost converter energy harvester which stores power in a capacitor. When the capacitor is fully charged the battery-good pin is toggled which drives a MOSFET that powers everything downstream.

When it’s powered on, the Nordic nRF initializes, reads the current temperature from an attached I2C thermometer, and then sends out a Bluetooth Low Energy (BLE) advertising packet containing the temperature data. When the capacitor runs out of energy, the battery-good pin is turned off and downstream electronics become unpowered and the cycle begins again.

Continue reading “A Solar-Only, Battery-Free Device That Harvests Energy From A BPW34 Photodiode” →