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: