J-Link Unlimited Flash Breakpoints
The J-Link software comes with an additional feature, called Unlimited Flash Breakpoints. Unlimited Flash Breakpoints allow the user to set an unlimited number of breakpoints when debugging in flash memory.
J-Link's "Unlimited flash breakpoints" works in both internal and external flash, even memory mapped QSPI flashes!
How do breakpoints work?
There are basically 2 types of breakpoints in a computer system: Hard ones and soft ones. Hardware breakpoints require a dedicate hardware unit for every breakpoint. In other words, the hardware dictates how many hardware breakpoints can be set simultaneously. ARM7 and ARM 9 cores have 2 breakpoint units (called "watchpoint units" in ARM's documentation), allowing 2 hardware breakpoints to be set. Hardware breakpoints do not require modification of the program code. Software breakpoints are different: The debugger modifies the program and replaces the breakpointed instruction with a special value. Additional software breakpoints do not require additional hardware units in the processor, since simply more instructions are replaced. This is a standard procedure that most debuggers are capable of, however, it requires the program to be located in RAM.
Using Unlimited Flash Breakpoints
Can I use Unlimited Flash Breakpoints in CFI NOR flash?
Yes! On some CPUs it is the only way to set breakpoints in external flash memory.
For example, in Cortex-M systems, the typically 6 hardware breakpoints of the Flash-Patch Unit can NOT be used to set breakpoints in external memory on most Cortex-M system, since the address range of the unit is limited.
This means: If you are using a Cortex-M3 or M4 with external flash, a program in this external flash can not be debugged with the popular emulators except a J-Link with the "Unlimited Flash Breakpoint" license.
In other words: When debugging a program in external flash on a Cortex-M device, a J-Link with the "Unlimited Flash Breakpoint" license such as J-Link ULTRA+ is almost a must.
What is special about software breakpoints in flash?
Unlimited Flash Breakpoints allow you to set an unlimited number of breakpoints even if your application program is not located in RAM, but in flash memory. This is a scenario which was very rare before ARM-microcontrollers hit the market. This new technology makes very powerful, yet inexpensive ARM microcontrollers available for systems, which required external RAM before. The downside of this new technology is that it is not possible to debug larger programs on these micros in RAM, since the RAM is not big enough to hold program and data (typically, these chips contain about 4 times as much flash as RAM), and therefore with standard debuggers, only 2 breakpoints can be set. The 2 breakpoint limit makes debugging very tough; a lot of times the debugger requires 2 breakpoints to simply step over a line of code. With software breakpoints in flash, this limitation is gone.
How does this work?
Basically very simple:
The J-Link software reprograms a sector of the flash to set or clear a breakpoint.
What performance can I expect ?
A RAMCode, specially designed for this purpose, sets and clears Flash Breakpoints extremely fast; on micros with fast flash the difference between breakpoints in RAM and flash is hardly noticeable.
How is this performance achieved ?
We have put a lot of effort in making Unlimited Flash Breakpoints really usable and convenient. Flash sectors are programmed only when necessary; this is usually the moment execution of the target program is started. A lot of times, more than one breakpoint is located in the same flash sector, which allows programming multiple breakpoints by programming just a single sector. The contents of program memory are cached, avoiding time consuming reading of the flash sectors. A smart combination of software and hardware breakpoints allows us to use hardware breakpoints a lot of times, especially when the debugger is source level-stepping, avoiding reprogramming flash in these situations. A built-in instruction set simulator further reduces the number of flash operations which need to be performed. This minimizes delays for the user, maximizing the life time of the flash. All resources of the ARM micro are available to the application program, no memory is lost for debugging. All of the optimizations described above can be disabled.
The software is licensed on a per J-Link basis. It requires a J-Link with Flash Breakpoints. J-Link Flash Breakpoints can also be used with J-Link ARM RDI / RDDI and J-Link GDB Server. If you want to use Flash Breakpoints with J-Link ARM RDI / RDDI, you will need an additional license for this software component too.
In order to receive your free 30 days trial license, please send an e-mail including the J-Link serial number to: firstname.lastname@example.org.
Using Unlimited Flash Breakpoints with different software components
Unlimited Flash Breakpoints can be used with the following J-Link software components:
- J-Link DLL (For example if you use the J-Link DLL natively in IAR Embedded Workbench for ARM or RealView® MDK)
- J-Link ARM RDI / RDDI
- J-Link GDB Server
For more information about how to use Flash Breakpoints with the different software components, please refer to the corresponding manuals.
1 J-Link PLUS, ULTRA + or PRO required.