@@ -79,7 +79,7 @@ class NrfBinaryRunner(ZephyrBinaryRunner):
7979 '''Runner front-end base class for nrf tools.'''
8080
8181 def __init__ (self , cfg , family , softreset , pinreset , dev_id , erase = False ,
82- erase_pages = False , reset = True , tool_opt = None , force = False ,
82+ erase_mode = None , reset = True , tool_opt = None , force = False ,
8383 recover = False ):
8484 super ().__init__ (cfg )
8585 self .hex_ = cfg .hex_file
@@ -89,7 +89,7 @@ def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False,
8989 self .pinreset = pinreset
9090 self .dev_id = dev_id
9191 self .erase = bool (erase )
92- self .erase_pages = bool ( erase_pages )
92+ self .erase_mode = erase_mode
9393 self .reset = bool (reset )
9494 self .force = force
9595 self .recover = bool (recover )
@@ -139,9 +139,10 @@ def do_add_parser(cls, parser):
139139 help = '''erase all user available non-volatile
140140 memory and disable read back protection before
141141 flashing (erases flash for both cores on nRF53)''' )
142- parser .add_argument ('--erase-pages' , required = False ,
143- action = 'store_true' , dest = 'erase_pages' ,
144- help = 'erase pages to be used by the firmware' )
142+ parser .add_argument ('--erase-mode' , required = False ,
143+ choices = ['none' , 'ranges' , 'all' ], dest = 'erase_mode' ,
144+ help = 'Select the type of erase operation for the '
145+ 'internal non-volatile memory' )
145146
146147 parser .set_defaults (reset = True )
147148
@@ -341,6 +342,18 @@ def _get_core(self):
341342
342343 return None
343344
345+ def _get_erase_mode (self , mode ):
346+ if not mode :
347+ return None
348+ elif mode == "none" :
349+ return "ERASE_NONE"
350+ elif mode == "ranges" :
351+ return "ERASE_RANGES_TOUCHED_BY_FIRMWARE"
352+ elif mode == "all" :
353+ return "ERASE_ALL"
354+ else :
355+ raise RuntimeError (f"Invalid erase mode: { mode } " )
356+
344357 def program_hex (self ):
345358 # Get the command use to actually program self.hex_.
346359 self .logger .info (f'Flashing file: { self .hex_ } ' )
@@ -421,8 +434,8 @@ def program_hex(self):
421434 else :
422435 if self .erase :
423436 erase_arg = 'ERASE_ALL'
424- elif self .family == 'nrf54l' and not self . erase_pages :
425- erase_arg = 'ERASE_NONE'
437+ elif self .family == 'nrf54l' :
438+ erase_arg = self . _get_erase_mode ( self . erase_mode ) or 'ERASE_NONE'
426439 else :
427440 erase_arg = 'ERASE_RANGES_TOUCHED_BY_FIRMWARE'
428441
@@ -531,14 +544,14 @@ def do_run(self, command, **kwargs):
531544 raise RuntimeError ('Options --softreset and --pinreset are mutually '
532545 'exclusive.' )
533546
534- if self .erase and self .erase_pages :
535- raise RuntimeError ('Options --erase and --erase-pages are mutually '
547+ if self .erase and self .erase_mode :
548+ raise RuntimeError ('Options --erase and --erase-mode are mutually '
536549 'exclusive.' )
537550
538551 self .ensure_family ()
539552
540- if self .family != 'nrf54l' and self .erase_pages :
541- raise RuntimeError ('Option --erase-pages can only be used with the '
553+ if self .family != 'nrf54l' and self .erase_mode :
554+ raise RuntimeError ('Option --erase-mode can only be used with the '
542555 'nRF54L family.' )
543556
544557 self .ensure_output ('hex' )
0 commit comments