@@ -649,16 +649,21 @@ def deliver_into(self):
649
649
@property
650
650
def sectors (self ):
651
651
"""Return a list of tuples of sector start,size"""
652
- cache = Cache (False , False )
653
- if self .target .device_name not in cache .index :
654
- raise ConfigException ("Bootloader not supported on this target: "
655
- "targets.json `device_name` not found in "
656
- "arm_pack_manager index." )
657
- cmsis_part = cache .index [self .target .device_name ]
658
- sectors = cmsis_part ['sectors' ]
659
- if sectors :
660
- return sectors
661
- raise ConfigException ("No sector info available" )
652
+ try :
653
+ return self .target .sectors
654
+ except AttributeError :
655
+ cache = Cache (False , False )
656
+ if self .target .device_name not in cache .index :
657
+ raise ConfigException (
658
+ "Bootloader not supported on this target: "
659
+ "targets.json `device_name` not found in "
660
+ "arm_pack_manager index."
661
+ )
662
+ cmsis_part = cache .index [self .target .device_name ]
663
+ sectors = cmsis_part ['sectors' ]
664
+ if sectors :
665
+ return sectors
666
+ raise ConfigException ("No sector info available" )
662
667
663
668
def _get_cmsis_part (self ):
664
669
if not hasattr (self .target , "device_name" ):
@@ -745,6 +750,48 @@ def get_all_active_memories(self, memory_list):
745
750
746
751
try :
747
752
cmsis_part = self ._get_cmsis_part ()
753
+ present_memories = set (cmsis_part ['memories' ].keys ())
754
+ valid_memories = set (memory_list ).intersection (present_memories )
755
+
756
+ memories = self ._get_mem_specs (
757
+ ["read" , "write" if active_memory == "RAM" else "execute" ],
758
+ cmsis_part
759
+ )
760
+ for memory in valid_memories :
761
+ mem_start = memories [memory ]["start" ]
762
+ mem_size = memories [memory ]["size" ]
763
+ if memory in ['IROM1' , 'PROGRAM_FLASH' ]:
764
+ start , size = self ._get_primary_memory_override ("rom" )
765
+ if start :
766
+ mem_start = start
767
+ if size :
768
+ mem_size = size
769
+ memory = 'ROM'
770
+ elif memory in ['IRAM1' , 'SRAM_OC' , 'SRAM_UPPER' , 'SRAM' ]:
771
+ if (self .has_ram_regions ):
772
+ continue
773
+ start , size = self ._get_primary_memory_override ("ram" )
774
+ if start :
775
+ mem_start = start
776
+ if size :
777
+ mem_size = size
778
+ memory = 'RAM'
779
+ else :
780
+ active_memory_counter += 1
781
+ memory = active_memory + str (active_memory_counter )
782
+
783
+ if not isinstance (mem_start , int ):
784
+ mem_start = int (mem_start , 0 )
785
+ if not isinstance (mem_size , int ):
786
+ mem_size = int (mem_size , 0 )
787
+ available_memories [memory ] = [mem_start , mem_size ]
788
+
789
+ if not available_memories :
790
+ raise ConfigException (
791
+ "Bootloader not supported on this target. "
792
+ "No memories found."
793
+ )
794
+ return available_memories
748
795
except ConfigException :
749
796
""" If the target doesn't exits in cmsis, but present in targets.json
750
797
with ram and rom start/size defined"""
@@ -764,43 +811,6 @@ def get_all_active_memories(self, memory_list):
764
811
available_memories [active_memory ] = [start , size ]
765
812
return available_memories
766
813
767
- present_memories = set (cmsis_part ['memories' ].keys ())
768
- valid_memories = set (memory_list ).intersection (present_memories )
769
-
770
- memories = self ._get_mem_specs (
771
- ["read" , "write" if active_memory == "RAM" else "execute" ],
772
- cmsis_part
773
- )
774
- for memory in valid_memories :
775
- mem_start = memories [memory ]["start" ]
776
- mem_size = memories [memory ]["size" ]
777
- if memory in ['IROM1' , 'PROGRAM_FLASH' ]:
778
- start , size = self ._get_primary_memory_override ("rom" )
779
- if start :
780
- mem_start = start
781
- if size :
782
- mem_size = size
783
- memory = 'ROM'
784
- elif memory in ['IRAM1' , 'SRAM_OC' , 'SRAM_UPPER' , 'SRAM' ]:
785
- if (self .has_ram_regions ):
786
- continue
787
- start , size = self ._get_primary_memory_override ("ram" )
788
- if start :
789
- mem_start = start
790
- if size :
791
- mem_size = size
792
- memory = 'RAM'
793
- else :
794
- active_memory_counter += 1
795
- memory = active_memory + str (active_memory_counter )
796
-
797
- if not isinstance (mem_start , int ):
798
- mem_start = int (mem_start , 0 )
799
- if not isinstance (mem_size , int ):
800
- mem_size = int (mem_size , 0 )
801
- available_memories [memory ] = [mem_start , mem_size ]
802
-
803
- return available_memories
804
814
805
815
@property
806
816
def ram_regions (self ):
0 commit comments