From bd97be07b316ec7bbe48ea61d56b3192ed0c2318 Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Wed, 27 Apr 2022 11:58:52 +0200 Subject: [PATCH 1/2] Generate more flash settings --- stm32data/__main__.py | 1 + stm32data/memory.py | 32 +++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/stm32data/__main__.py b/stm32data/__main__.py index d883047..76f8fa9 100755 --- a/stm32data/__main__.py +++ b/stm32data/__main__.py @@ -853,6 +853,7 @@ def parse_chips(): 'kind': 'flash', 'address': h['defines']['all'][each + '_BASE'], 'size': size, + 'settings': memory.determine_flash_settings(chip_name), }) found = set() diff --git a/stm32data/memory.py b/stm32data/memory.py index 7815abe..3a14ad8 100644 --- a/stm32data/memory.py +++ b/stm32data/memory.py @@ -45,13 +45,16 @@ memories = [] def parse(): for f in sorted(glob('sources/cubeprogdb/db/*.xml')): - #print("parsing ", f); + # print("parsing ", f); device = xmltodict.parse(open(f, 'rb'))['Root']['Device'] device_id = device['DeviceID'] name = device['Name'] names = split_names(name) flash_size = None flash_addr = None + write_size = None + erase_size = None + erase_value = None ram_size = None ram_addr = None @@ -69,6 +72,18 @@ def parse(): configs = [configs] flash_addr = int(configs[0]['Parameters']['@address'], 16) flash_size = int(configs[0]['Parameters']['@size'], 16) + erase_value = int(peripheral['ErasedValue'], 16) + write_size = int(configs[0]['Allignement'], 16) + bank = configs[0]['Bank'] + if type(bank) != list: + bank = [bank] + field = bank[0]['Field'] + if type(field) != list: + field = [field] + # print("Field", field) + p = field[0]['Parameters'] + print("pwrams", str(p)) + erase_size = int(p['@size'], 16) #print( f'flash {addr} {size}') chunk = { @@ -86,6 +101,9 @@ def parse(): chunk['flash'] = { 'address': flash_addr, 'bytes': flash_size, + 'erase_value': erase_value, + 'write_size': write_size, + 'erase_size': erase_size, } memories.append(chunk) @@ -108,6 +126,18 @@ def determine_flash_size(chip_name): return None +def determine_flash_settings(chip_name): + for each in memories: + for name in each['names']: + if is_chip_name_match(name, chip_name): + return { + 'erase_size': each['flash']['erase_size'], + 'write_size': each['flash']['write_size'], + 'erase_value': each['flash']['erase_value'], + } + + return None + def determine_device_id(chip_name): for each in memories: From 4535a98b19ee9ef14a4643ba0d3118a39c11e647 Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Wed, 27 Apr 2022 14:20:29 +0200 Subject: [PATCH 2/2] Use the largest sector size --- stm32data/memory.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/stm32data/memory.py b/stm32data/memory.py index 3a14ad8..4ef8cf3 100644 --- a/stm32data/memory.py +++ b/stm32data/memory.py @@ -77,14 +77,15 @@ def parse(): bank = configs[0]['Bank'] if type(bank) != list: bank = [bank] - field = bank[0]['Field'] - if type(field) != list: - field = [field] - # print("Field", field) - p = field[0]['Parameters'] - print("pwrams", str(p)) - erase_size = int(p['@size'], 16) - #print( f'flash {addr} {size}') + fields = bank[0]['Field'] + if type(fields) != list: + fields = [fields] + + erase_size = int(fields[0]['Parameters']['@size'], 16) + for field in fields: + # print("Field", field) + erase_size = max(erase_size, int(field['Parameters']['@size'], 16)) + #print( f'flash {addr} {size}') chunk = { 'device-id': int(device_id, 16),