In order to save hardware (FPB) resources, the IDE first attempts to write a software break at a given location. It reverts to using a hardware break (if available) if this does not succeed. Having said that, an application may explicitly copy code to execute from RAM. It's possible to set an instruction break on code which isn't in place until after the startup completes. In such a case, the copy to RAM operation overwrites the software break instructiont, and you won't get to the break. In this case, you want to use a dedicated hardware resource available through the breakpoint dialog. If what you're actually after is to set a breakpoint by address, the easiest method is to associate a global code symbol at the 0x20001000 address, then set the breakpoint by function name.
Thanks and regards,
LPCXpresso Support