Merge pull request #142 from embassy-rs/generate-flash-settings

Generate flash settings
This commit is contained in:
Dario Nieuwenhuis 2022-04-27 14:34:55 +02:00 committed by GitHub
commit b8325a23ac
2 changed files with 34 additions and 2 deletions

View File

@ -853,6 +853,7 @@ def parse_chips():
'kind': 'flash', 'kind': 'flash',
'address': h['defines']['all'][each + '_BASE'], 'address': h['defines']['all'][each + '_BASE'],
'size': size, 'size': size,
'settings': memory.determine_flash_settings(chip_name),
}) })
found = set() found = set()

View File

@ -45,13 +45,16 @@ memories = []
def parse(): def parse():
for f in sorted(glob('sources/cubeprogdb/db/*.xml')): for f in sorted(glob('sources/cubeprogdb/db/*.xml')):
#print("parsing ", f); # print("parsing ", f);
device = xmltodict.parse(open(f, 'rb'))['Root']['Device'] device = xmltodict.parse(open(f, 'rb'))['Root']['Device']
device_id = device['DeviceID'] device_id = device['DeviceID']
name = device['Name'] name = device['Name']
names = split_names(name) names = split_names(name)
flash_size = None flash_size = None
flash_addr = None flash_addr = None
write_size = None
erase_size = None
erase_value = None
ram_size = None ram_size = None
ram_addr = None ram_addr = None
@ -69,7 +72,20 @@ def parse():
configs = [configs] configs = [configs]
flash_addr = int(configs[0]['Parameters']['@address'], 16) flash_addr = int(configs[0]['Parameters']['@address'], 16)
flash_size = int(configs[0]['Parameters']['@size'], 16) flash_size = int(configs[0]['Parameters']['@size'], 16)
#print( f'flash {addr} {size}') erase_value = int(peripheral['ErasedValue'], 16)
write_size = int(configs[0]['Allignement'], 16)
bank = configs[0]['Bank']
if type(bank) != list:
bank = [bank]
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 = { chunk = {
'device-id': int(device_id, 16), 'device-id': int(device_id, 16),
@ -86,6 +102,9 @@ def parse():
chunk['flash'] = { chunk['flash'] = {
'address': flash_addr, 'address': flash_addr,
'bytes': flash_size, 'bytes': flash_size,
'erase_value': erase_value,
'write_size': write_size,
'erase_size': erase_size,
} }
memories.append(chunk) memories.append(chunk)
@ -108,6 +127,18 @@ def determine_flash_size(chip_name):
return None 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): def determine_device_id(chip_name):
for each in memories: for each in memories: