Unlimited Number of Breakpoints in Flash

From SEGGER Wiki
Jump to: navigation, search

By default, the number of breakpoints that can be set, when debugging in flash memory, is limited to the number of hardware breakpoints that are supported by the device. The number of hardware breakpoints being supported usually ranges from 2 (e.g. ARM7/9, Cortex-M0) to 6 (e.g. Cortex-M3/M4/M7). For devices where J-Link supports direct download into flash memory, it also supports setting an unlimited number of breakpoints when debugging in flash (further called unlimited flash breakpoints). For what devices flash download (and therefore also unlimited flash breakpoints) is supported, can be seen on our website: Device list. Unlimited flash breakpoints are available in different kinds of memory mapped flashes, be it internal flash, external parallel CFI flash or memory QSPI flash, as long as the flash supports direct execution of code (meaning it is read-accessible via the regular address space of the device).

How do Unlimited flash breakpoints work?

For more information about how the technique behind Unlimited flash breakpoints work, please refer to our website.

Precautions when using DMAs in the target application

As using unlimited flash breakpoints means that the flash is reprogrammed by J-Link, some RAM buffer is temporarily needed by J-Link, during the flash reprogramming process. The J-Link DLL makes sure that original RAM contents are preserved before the flash programming and restored afterwards.

Please note that DMAs are usually not halted while the CPU of the device is halted and continue operating which will interfere with the flash reprogramming process if a DMA uses the same RAM area as the flashloader of J-Link does. Usually the first 2-4 KiB of the internal RAM of a device are temporarily used by J-Link during flash reprogramming. Please make sure that this area is not used by DMAs in case unlimited flash breakpoints shall be used. As a target device usually provides many different DMAs and their presence/absence heavily depends on the specific device type (even for the same series, smaller/bigger models may implement more or less DMAs), it cannot be supported in a generic way to pause/temporarily disable all DMAs during flash reporgramming.

Limiting the temporary RAM buffer used for flash programming

The J-Link DLL allows to limit the max. RAM area that is used during flash programming. This can be achieved via different options which are explained in the following.

Note:
Setting the RAM limit impacts the performance of the flash programming speed. Setting the limit below 512 bytes is not recommended and may result in flash programming to not work.

Via Command String

The J-Link DLL allows to limit the max. RAM area that is used during flash programming, via the following command string:

SetRAMUsageLimit

Here is an example JLinkScript file that shows how to implement the RAM usage limitation for flash programming.

For more information about command strings in general and how to use them in various environments / IDEs, please refer to the J-Link User Guide (UM08001), chapter "Command strings"