summaryrefslogtreecommitdiff
path: root/tools/pydfu.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-06-22 15:32:32 +1000
committerDamien George <damien.p.george@gmail.com>2018-06-22 15:32:32 +1000
commit92667dc2e57420a9960f80c80da7d3c49c8c7fd6 (patch)
tree63a9e687b6db10c1e2f91f381f3e51d897e3fa9e /tools/pydfu.py
parentec7982ec6dc195a6b1381af2a18590414ef9e621 (diff)
tools/pydfu.py: Add support for multiple memory segments.
Segments are separated by / and begin with the memory address. This follows how the ST DFU tool works.
Diffstat (limited to 'tools/pydfu.py')
-rwxr-xr-xtools/pydfu.py35
1 files changed, 18 insertions, 17 deletions
diff --git a/tools/pydfu.py b/tools/pydfu.py
index a33e49712..a7adda37c 100755
--- a/tools/pydfu.py
+++ b/tools/pydfu.py
@@ -394,24 +394,25 @@ def get_memory_layout(device):
intf = cfg[(0, 0)]
mem_layout_str = get_string(device, intf.iInterface)
mem_layout = mem_layout_str.split('/')
- addr = int(mem_layout[1], 0)
- segments = mem_layout[2].split(',')
- seg_re = re.compile(r'(\d+)\*(\d+)(.)(.)')
result = []
- for segment in segments:
- seg_match = seg_re.match(segment)
- num_pages = int(seg_match.groups()[0], 10)
- page_size = int(seg_match.groups()[1], 10)
- multiplier = seg_match.groups()[2]
- if multiplier == 'K':
- page_size *= 1024
- if multiplier == 'M':
- page_size *= 1024 * 1024
- size = num_pages * page_size
- last_addr = addr + size - 1
- result.append(named((addr, last_addr, size, num_pages, page_size),
- "addr last_addr size num_pages page_size"))
- addr += size
+ for mem_layout_index in range(1, len(mem_layout), 2):
+ addr = int(mem_layout[mem_layout_index], 0)
+ segments = mem_layout[mem_layout_index + 1].split(',')
+ seg_re = re.compile(r'(\d+)\*(\d+)(.)(.)')
+ for segment in segments:
+ seg_match = seg_re.match(segment)
+ num_pages = int(seg_match.groups()[0], 10)
+ page_size = int(seg_match.groups()[1], 10)
+ multiplier = seg_match.groups()[2]
+ if multiplier == 'K':
+ page_size *= 1024
+ if multiplier == 'M':
+ page_size *= 1024 * 1024
+ size = num_pages * page_size
+ last_addr = addr + size - 1
+ result.append(named((addr, last_addr, size, num_pages, page_size),
+ "addr last_addr size num_pages page_size"))
+ addr += size
return result