diff options
author | Damien George <damien.p.george@gmail.com> | 2018-06-22 15:32:32 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-06-22 15:32:32 +1000 |
commit | 92667dc2e57420a9960f80c80da7d3c49c8c7fd6 (patch) | |
tree | 63a9e687b6db10c1e2f91f381f3e51d897e3fa9e /tools/pydfu.py | |
parent | ec7982ec6dc195a6b1381af2a18590414ef9e621 (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-x | tools/pydfu.py | 35 |
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 |