Group packages with same chip

This commit is contained in:
Dario Nieuwenhuis 2021-04-19 04:56:09 +02:00
parent 69b1c6a96c
commit 6aafc6cbce
2 changed files with 312 additions and 78 deletions

193
header_map.yaml Normal file
View File

@ -0,0 +1,193 @@
STM32F030x6: STM32F030F4
STM32F030x8: STM32F030x8
STM32F031x6: STM32F031C4, STM32F031F4, STM32F031G4, STM32F031K4
STM32F038xx: STM32F038xx
STM32F042x6: STM32F042C4, STM32F042F4, STM32F042G4, STM32F042K4, STM32F042x6
STM32F048xx: STM32F048xx
STM32F051x8: STM32F051C4, STM32F051C6, STM32F051C8, STM32F051K4, STM32F051K6, STM32F051K8, STM32F051R4, STM32F051R6,
STM32F058xx: STM32F058xx
STM32F070x6: STM32F070x6
STM32F070xB: STM32F070xB
STM32F071xB: STM32F071C8, STM32F071V8, STM32F071xB
STM32F072xB: STM32F072C8, STM32F072R8, STM32F072V8, STM32F072xB
STM32F078xx: STM32F078xx
STM32F030xC: STM32F030xC
STM32F091xC: STM32F091CB, STM32F091RB, STM32F091VB, STM32F091xC
STM32F098xx: STM32F098xx
STM32F100xB: STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB, STM32F100VB
STM32F100xE: STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE, STM32F100ZE
STM32F101x6: STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6, STM32F101T6
STM32F101xB: STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB, STM32F101VB
STM32F101xE: STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE, STM32F101ZE
STM32F101xG: STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG, STM32F101ZG
STM32F102x6: STM32F102C4, STM32F102R4, STM32F102C6, STM32F102R6
STM32F102xB: STM32F102C8, STM32F102R8, STM32F102CB, STM32F102RB
STM32F103x6: STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6, STM32F103T6
STM32F103xB: STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB, STM32F103VB
STM32F103xE: STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE, STM32F103ZE
STM32F103xG: STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG, STM32F103ZG
STM32F105xC: STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC, STM32F105VC
STM32F107xC: STM32F107RB, STM32F107VB, STM32F107RC, STM32F107VC
STM32F205xx: STM32F205RG, STM32F205VG, STM32F205ZG, STM32F205RF, STM32F205VF, STM32F205ZF, STM32F205RE, STM32F205VE, STM32F205ZE, STM32F205RC, STM32F205VC, STM32F205ZC, STM32F205RB, STM32F205VB
STM32F215xx: STM32F215RG, STM32F215VG, STM32F215ZG, STM32F215RE, STM32F215VE, STM32F215ZE
STM32F207xx: STM32F207VG, STM32F207ZG, STM32F207IG, STM32F207VF, STM32F207ZF, STM32F207IF, STM32F207VE, STM32F207ZE, STM32F207IE, STM32F207VC, STM32F207ZC, STM32F207IC
STM32F217xx: STM32F217VG, STM32F217ZG, STM32F217IG, STM32F217VE, STM32F217ZE, STM32F217IE
STM32F301x8: STM32F301K6, STM32F301K8, STM32F301C6, STM32F301C8, STM32F301R6, STM32F301R8
STM32F302x8: STM32F302K6, STM32F302K8, STM32F302C6, STM32F302C8, STM32F302R6, STM32F302R8
STM32F302xC: STM32F302CB, STM32F302CC, STM32F302RB, STM32F302RC, STM32F302VB, STM32F302VC
STM32F302xE: STM32F302RE, STM32F302VE, STM32F302ZE, STM32F302RD, STM32F302VD, STM32F302ZD
STM32F303x8: STM32F303K6, STM32F303K8, STM32F303C6, STM32F303C8, STM32F303R6, STM32F303R8
STM32F303xC: STM32F303CB, STM32F303CC, STM32F303RB, STM32F303RC, STM32F303VB, STM32F303VC
STM32F303xE: STM32F303RE, STM32F303VE, STM32F303ZE, STM32F303RD, STM32F303VD, STM32F303ZD
STM32F373xC: STM32F373C8, STM32F373CB, STM32F373CC, STM32F373R8, STM32F373RB, STM32F373RC, STM32F373V8, STM32F373VB, STM32F373VC
STM32F334x8: STM32F334K4, STM32F334K6, STM32F334K8, STM32F334C4, STM32F334C6, STM32F334C8, STM32F334R4, STM32F334R6, STM32F334R8
STM32F318xx: STM32F318K8, STM32F318C8
STM32F328xx: STM32F328C8, STM32F328R8
STM32F358xx: STM32F358CC, STM32F358RC, STM32F358VC
STM32F378xx: STM32F378CC, STM32F378RC, STM32F378VC
STM32F398xx: STM32F398VE
STM32F405xx: STM32F405RG, STM32F405VG, STM32F405ZG
STM32F415xx: STM32F415RG, STM32F415VG, STM32F415ZG
STM32F407xx: STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG, STM32F407IE
STM32F417xx: STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG, STM32F417IE
STM32F427xx: STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG, STM32F427II
STM32F437xx: STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG, STM32F437II
STM32F429xx: STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG, STM32F439NI, STM32F429IG, STM32F429II
STM32F439xx: STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, STM32F439NI, STM32F439IG, STM32F439II
STM32F401xC: STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB, STM32F401VC
STM32F401xE: STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE, STM32F401VE
STM32F410Tx: STM32F410T8, STM32F410TB
STM32F410Cx: STM32F410C8, STM32F410CB
STM32F410Rx: STM32F410R8, STM32F410RB
STM32F411xE: STM32F411CC, STM32F411RC, STM32F411VC, STM32F411CE, STM32F411RE, STM32F411VE
STM32F446xx: STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC, STM32F446ZE
STM32F469xx: STM32F469AI, STM32F469II, STM32F469BI, STM32F469NI, STM32F469AG, STM32F469IG, STM32F469BG, STM32F469NG, STM32F469AE, STM32F469IE, STM32F469BE, STM32F469NE
STM32F479xx: STM32F479AI, STM32F479II, STM32F479BI, STM32F479NI, STM32F479AG, STM32F479IG, STM32F479BG, STM32F479NG
STM32F412Cx: STM32F412CEU, STM32F412CGU
STM32F412Zx: STM32F412ZET, STM32F412ZGT, STM32F412ZEJ, STM32F412ZGJ
STM32F412Vx: STM32F412VET, STM32F412VGT, STM32F412VEH, STM32F412VGH
STM32F412Rx: STM32F412RET, STM32F412RGT, STM32F412REY, STM32F412RGY
STM32F413xx: STM32F413CH, STM32F413MH, STM32F413RH, STM32F413VH, STM32F413ZH, STM32F413CG, STM32F413MG, STM32F413RG, STM32F413VG, STM32F413ZG
STM32F423xx: STM32F423CH, STM32F423RH, STM32F423VH, STM32F423ZH
STM32F756xx: STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG, STM32F756NG
STM32F746xx: STM32F746VE, STM32F746VG, STM32F746ZE, STM32F746ZG, STM32F746IE, STM32F746IG, STM32F746BE, STM32F746BG, STM32F746NE, STM32F746NG
STM32F745xx: STM32F745VE, STM32F745VG, STM32F745ZG, STM32F745ZE, STM32F745IE, STM32F745IG
STM32F765xx: STM32F765BI, STM32F765BG, STM32F765NI, STM32F765NG, STM32F765II, STM32F765IG, STM32F765ZI, STM32F765ZG, STM32F765VI, STM32F765VG
STM32F767xx: STM32F767BG, STM32F767BI, STM32F767IG, STM32F767II, STM32F767NG, STM32F767NI, STM32F767VG, STM32F767VI, STM32F767ZG, STM32F767ZI
STM32F769xx: STM32F769AG, STM32F769AI, STM32F769BG, STM32F769BI, STM32F769IG, STM32F769II, STM32F769NG, STM32F769NI, STM32F768AI
STM32F777xx: STM32F777VI, STM32F777ZI, STM32F777II, STM32F777BI, STM32F777NI
STM32F779xx: STM32F779II, STM32F779BI, STM32F779NI, STM32F779AI, STM32F778AI
STM32F722xx: STM32F722IE, STM32F722ZE, STM32F722VE, STM32F722RE, STM32F722IC, STM32F722ZC, STM32F722VC, STM32F722RC
STM32F723xx: STM32F723IE, STM32F723ZE, STM32F723VE, STM32F723IC, STM32F723ZC, STM32F723VC
STM32F732xx: STM32F732IE, STM32F732ZE, STM32F732VE, STM32F732RE
STM32F733xx: STM32F733IE, STM32F733ZE, STM32F733VE
STM32F730xx: STM32F730R, STM32F730V, STM32F730Z, STM32F730I
STM32F750xx: STM32F750V, STM32F750Z, STM32F750N
STM32L010x4: STM32L010K4, STM32L010F4
STM32L010x6: STM32L010C6
STM32L010x8: STM32L010K8, STM32L010R8
STM32L010xB: STM32L010RB
STM32L011xx: STM32L031C6, STM32L031E6, STM32L031F6, STM32L031G6, STM32L031K6
STM32L021xx: STM32L021D4, STM32L021F4, STM32L021G4, STM32L021K4
STM32L031xx: STM32L031C6, STM32L031E6, STM32L031F6, STM32L031G6, STM32L031K6
STM32L041xx: STM32L041C6, STM32L041K6, STM32L041G6, STM32L041F6, STM32L041E6
STM32L051xx: STM32L051K8, STM32L051C6, STM32L051C8, STM32L051R6, STM32L051R8, STM32L051K6, STM32L051T6, STM32L051T8
STM32L052xx: STM32L052K6, STM32L052K8, STM32L052C6, STM32L052C8, STM32L052R6, STM32L052R8, STM32L052T6, STM32L052T8
STM32L053xx: STM32L053C6, STM32L053C8, STM32L053R6, STM32L053R8
STM32L062xx: STM32L062K8
STM32L063xx: STM32L063C8, STM32L063R8
STM32L071xx: STM32L071V8, STM32L071K8, STM32L071VB, STM32L071RB, STM32L071CB, STM32L071KB, STM32L071VZ, STM32L071RZ, STM32L071CZ, STM32L071KZ, STM32L071C8
STM32L072xx: STM32L072V8, STM32L072VB, STM32L072RB, STM32L072CB, STM32L072VZ, STM32L072RZ, STM32L072CZ, STM32L072KB, STM32L072KZ
STM32L073xx: STM32L073V8, STM32L073VB, STM32L073RB, STM32L073VZ, STM32L073RZ, STM32L073CB, STM32L073CZ
STM32L081xx: STM32L081CB, STM32L081CZ, STM32L081KZ
STM32L082xx: STM32L082KB, STM32L082KZ, STM32L082CZ
STM32L083xx: STM32L083V8, STM32L083VB, STM32L083RB, STM32L083VZ, STM32L083RZ, STM32L083CB, STM32L083CZ
STM32L100xB: STM32L100C6, STM32L100R8, STM32L100RB
STM32L100xBA: STM32L100C6-A, STM32L100R8-A, STM32L100RB-A
STM32L100xC: STM32L100RC
STM32L151xB: STM32L151C6, STM32L151R6, STM32L151C8, STM32L151R8, STM32L151V8, STM32L151CB, STM32L151RB, STM32L151VB
STM32L151xBA: STM32L151C6-A, STM32L151R6-A, STM32L151C8-A, STM32L151R8-A, STM32L151V8-A, STM32L151CB-A, STM32L151RB-A, STM32L151VB-A
STM32L151xC: STM32L151CC, STM32L151UC, STM32L151RC, STM32L151VC
STM32L151xCA: STM32L151RC-A, STM32L151VC-A, STM32L151QC, STM32L151ZC
STM32L151xD: STM32L151QD, STM32L151RD, STM32L151VD, STM32L151ZD
STM32L151xDX: STM32L151VD-X
STM32L151xE: STM32L151QE, STM32L151RE, STM32L151VE, STM32L151ZE
STM32L152xB: STM32L152C6, STM32L152R6, STM32L152C8, STM32L152R8, STM32L152V8, STM32L152CB, STM32L152RB, STM32L152VB
STM32L152xBA: STM32L152C6-A, STM32L152R6-A, STM32L152C8-A, STM32L152R8-A, STM32L152V8-A, STM32L152CB-A, STM32L152RB-A, STM32L152VB-A
STM32L152xC: STM32L152CC, STM32L152UC, STM32L152RC, STM32L152VC
STM32L152xCA: STM32L152RC-A, STM32L152VC-A, STM32L152QC, STM32L152ZC
STM32L152xD: STM32L152QD, STM32L152RD, STM32L152VD, STM32L152ZD
STM32L152xDX: STM32L152VD-X
STM32L152xE: STM32L152QE, STM32L152RE, STM32L152VE, STM32L152ZE
STM32L162xC: STM32L162RC, STM32L162VC
STM32L162xCA: STM32L162RC-A, STM32L162VC-A, STM32L162QC, STM32L162ZC
STM32L162xD: STM32L162QD, STM32L162RD, STM32L162VD, STM32L162ZD
STM32L162xDX: STM32L162VD-X
STM32L162xE: STM32L162RE, STM32L162VE, STM32L162ZE
STM32L412xx: STM32L412xx
STM32L422xx: STM32L422xx
STM32L431xx: STM32L431xx
STM32L432xx: STM32L432xx
STM32L433xx: STM32L433xx
STM32L442xx: STM32L442xx
STM32L443xx: STM32L443xx
STM32L451xx: STM32L451xx
STM32L452xx: STM32L452xx
STM32L462xx: STM32L462xx
STM32L471xx: STM32L471xx
STM32L475xx: STM32L475xx
STM32L476xx: STM32L476xx
STM32L485xx: STM32L485xx
STM32L486xx: STM32L486xx
STM32L496xx: STM32L496xx
STM32L4A6xx: STM32L4A6xx
STM32L4P5xx: STM32L4Q5xx
STM32L4R5xx: STM32L4R5xx
STM32L4R7xx: STM32L4R7xx
STM32L4R9xx: STM32L4R9xx
STM32L4S5xx: STM32L4S5xx
STM32L4S7xx: STM32L4S7xx
STM32L4S9xx: STM32L4S9xx
STM32L552xx: STM32L552xx
STM32L562xx: STM32L562xx
STM32H742xx: STM32H742VI, STM32H742ZI, STM32H742AI, STM32H742II, STM32H742BI, STM32H742XI
STM32H743xx: STM32H743VI, STM32H743ZI, STM32H743AI, STM32H743II, STM32H743BI, STM32H743XI
STM32H753xx: STM32H753VI, STM32H753ZI, STM32H753AI, STM32H753II, STM32H753BI, STM32H753XI
STM32H750xx: STM32H750V, STM32H750I, STM32H750X
STM32H747xx: STM32H747ZI, STM32H747AI, STM32H747II, STM32H747BI, STM32H747XI
STM32H757xx: STM32H757ZI, STM32H757AI, STM32H757II, STM32H757BI, STM32H757XI
STM32H745xx: STM32H745ZI, STM32H745II, STM32H745BI, STM32H745XI
STM32H755xx: STM32H755ZI, STM32H755II, STM32H755BI, STM32H755XI
STM32H7B0xx: STM32H7B0ABIxQ, STM32H7B0IBTx, STM32H7B0RBTx, STM32H7B0VBTx, STM32H7B0ZBTx, STM32H7B0IBKxQ
STM32H7A3xx: STM32H7A3IIK6, STM32H7A3IIT6, STM32H7A3NIH6, STM32H7A3RIT6, STM32H7A3VIH6, STM32H7A3VIT6, STM32H7A3ZIT6
STM32H7A3xxQ: STM32H7A3QIY6Q, STM32H7A3IIK6Q, STM32H7A3IIT6Q, STM32H7A3LIH6Q, STM32H7A3VIH6Q, STM32H7A3VIT6Q, STM32H7A3AII6Q, STM32H7A3ZIT6Q
STM32H7B3xx: STM32H7B3IIK6, STM32H7B3IIT6, STM32H7B3NIH6, STM32H7B3RIT6, STM32H7B3VIH6, STM32H7B3VIT6, STM32H7B3ZIT6
STM32H7B3xxQ: STM32H7B3QIY6Q, STM32H7B3IIK6Q, STM32H7B3IIT6Q, STM32H7B3LIH6Q, STM32H7B3VIH6Q, STM32H7B3VIT6Q, STM32H7B3AII6Q, STM32H7B3ZIT6Q
STM32H735xx: STM32H735AGI6, STM32H735IGK6, STM32H735RGV6, STM32H735VGT6, STM32H735VGY6, STM32H735ZGT6
STM32H733xx: STM32H733VGH6, STM32H733VGT6, STM32H733ZGI6, STM32H733ZGT6,
STM32H730xx: STM32H730VBH6, STM32H730VBT6, STM32H730ZBT6, STM32H730ZBI6
STM32H730xxQ: STM32H730IBT6Q, STM32H730ABI6Q, STM32H730IBK6Q
STM32H725xx: STM32H725AGI6, STM32H725IGK6, STM32H725IGT6, STM32H725RGV6, STM32H725VGT6, STM32H725VGY6, STM32H725ZGT6, STM32H725REV6, SM32H725VET6, STM32H725ZET6, STM32H725AEI6, STM32H725IET6, STM32H725IEK6
STM32H723xx: STM32H723VGH6, STM32H723VGT6, STM32H723ZGI6, STM32H723ZGT6, STM32H723VET6, STM32H723VEH6, STM32H723ZET6, STM32H723ZEI6
STM32G0B0xx: STM32G0B0xx
STM32G0B1xx: STM32G0B1xx
STM32G0C1xx: STM32G0C1xx
STM32G070xx: STM32G070xx
STM32G071xx: STM32G071xx
STM32G081xx: STM32G081xx
STM32G050xx: STM32G050xx
STM32G051xx: STM32G051xx
STM32G061xx: STM32G061xx
STM32G030xx: STM32G030xx
STM32G031xx: STM32G031xx
STM32G041xx: STM32G041xx
STM32G431xx: STM32G431xx
STM32G441xx: STM32G441xx
STM32G471xx: STM32G471xx
STM32G473xx: STM32G473xx
STM32G483xx: STM32G483xx
STM32G474xx: STM32G474xx
STM32G484xx: STM32G484xx
STM32G491xx: STM32G491xx
STM32G4A1xx: STM32G4A1xx
STM32GBK1CB: STM32GBK1CB

197
parse.py
View File

@ -1,6 +1,8 @@
import xmltodict
import yaml
import re
import json
import os
from collections import OrderedDict
from glob import glob
@ -30,30 +32,35 @@ def children(x, key):
return r
return [r]
headers = []
headers_parsed = {}
header_map = {}
with open('header_map.yaml', 'r') as f:
y = yaml.load(f, Loader=yaml.SafeLoader)
for header, chips in y.items():
for chip in chips.split(','):
header_map[chip.strip().lower()] = header.lower()
def find_header(model):
r = ''
for x in re.findall('(\\([^)]+\\)|.)', model):
r += '['+''.join(re.findall('[0-9A-Z]', x))+'x]'
#for a, b in header_map:
# model = re.sub(a, b, model, flags=re.IGNORECASE)
model = model.lower()
# g0xx-n doesn't seem to have special headers...????
model = re.sub('^(stm32g0.*)-n$', '\\1', model)
# if it's in the map, just go
if r := header_map.get(model):
return r
# if not, find it by regex, taking `x` meaning `anything`
res = []
for h in headers:
m = re.match(r, h+'xxxxxxx', re.IGNORECASE)
if m:
for h in headers_parsed.keys():
if re.match('^' + h.replace('x', '.') + '$', model):
res.append(h)
if len(res) == 2:
res.sort()
if res[0].endswith('xd') and res[1].endswith('xdx'):
if model.endswith('X'):
res = [res[1]]
else:
res = [res[0]]
assert len(res) < 2
if len(res) == 0:
return None
assert len(res) == 1
return res[0]
def paren_ok(val):
@ -108,7 +115,7 @@ def parse_header(f):
continue
accum = ''
if m := re.match('([a-zA-Z0-9_]+)_IRQn += (\d+),? +/\\*!< (.*) \\*/', l):
if m := re.match('([a-zA-Z0-9_]+)_IRQn += (\\d+),? +/\\*!< (.*) \\*/', l):
irqs[m.group(1)] = int(m.group(2))
if m := re.match('#define +([0-9A-Za-z_]+)\\(', l):
@ -164,6 +171,8 @@ FAKE_PERIPHERALS = [
'LWIP',
'USB_HOST',
'USB_DEVICE',
'GUI_INTERFACE',
'TRACER_EMB',
]
perimap = [
@ -194,50 +203,86 @@ def match_peri(peri):
return None
def parse_headers():
os.makedirs('sources/headers_parsed', exist_ok=True)
print('loading headers...')
for f in glob('sources/headers/*.h'):
#if 'stm32f4' not in f: continue
print(f)
ff = f.removeprefix('sources/headers/')
ff = ff.removesuffix('.h')
headers.append(ff)
headers_parsed[ff] = parse_header(f)
try:
with open('sources/headers_parsed/{}.json'.format(ff), 'r') as j:
res = json.load(j)
except:
print(f)
res = parse_header(f)
with open('sources/headers_parsed/{}.json'.format(ff), 'w') as j:
json.dump(res, j)
headers_parsed[ff] = res
def chip_name_from_package_name(x):
name_map = [
('(STM32L1....).x([AX])', '\\1-\\2'),
('(STM32G0....).x(N)', '\\1-\\2'),
('(STM32F412..).xP', '\\1'),
('(STM32L4....).xP', '\\1'),
('(STM32WB....).x[AE]', '\\1'),
('(STM32G0....).xN', '\\1'),
('(STM32L5....).x[PQ]', '\\1'),
('(STM32L0....).xS', '\\1'),
('(STM32H7....).xQ', '\\1'),
('(STM32......).x', '\\1'),
]
for a, b in name_map:
r, n = re.subn('^'+a+'$', b, x)
if n != 0:
return r
raise Exception("bad name: {}".format(x))
def parse_chips():
peris_by_family = {}
peris_by_chip = {}
peris_by_line = {}
os.makedirs('data/chips', exist_ok=True)
def put_peri(peris, peri, chip):
if peri not in peris:
peris[peri] = set()
peris[peri].add(chip)
chips = {}
for f in glob('sources/mcu/STM32*.xml'):
for f in sorted(glob('sources/mcu/STM32*.xml')):
if 'STM32MP' in f: continue
#if 'STM32F4' not in f: continue
print(f)
r = xmltodict.parse(open(f, 'rb'))['Mcu']
names = expand_name(r['@RefName'])
rams = r['Ram']
flashs = r['Flash']
if type(rams) != list: rams = [rams]*len(names)
if type(flashs) != list: flashs = [flashs]*len(names)
for i,name in enumerate(names):
flash = int(flashs[i])
ram = int(rams[i])
line = r['@Line']
family = r['@Family']
gpio_version = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version'].removesuffix('_gpio_v1_0')
package_names = expand_name(r['@RefName'])
package_rams = r['Ram']
package_flashs = r['Flash']
if type(package_rams) != list: package_rams = [package_rams]*len(package_names)
if type(package_flashs) != list: package_flashs = [package_flashs]*len(package_names)
for package_i, package_name in enumerate(package_names):
chip_name = chip_name_from_package_name(package_name)
flash = int(package_flashs[package_i])
ram = int(package_rams[package_i])
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version'].removesuffix('_gpio_v1_0')
h = find_header(name)
if h is None: continue
h = headers_parsed[h]
if chip_name not in chips:
chips[chip_name] = OrderedDict({
'name': chip_name,
'flash': flash,
'ram': ram,
'gpio_af': gpio_af,
'packages': [],
'peripherals': {},
#'peripherals': peris,
#'interrupts': h['interrupts'],
})
peris = {}
chips[chip_name]['packages'].append(OrderedDict({
'name': package_name,
'package': r['@Package'],
}))
# Some packages have some peripehrals removed because the package had to
# remove GPIOs useful for that peripheral. So we merge all peripherals from all packages.
peris = chips[chip_name]['peripherals']
for ip in r['IP']:
pname = ip['@InstanceName']
pkind = ip['@Name']+':'+ip['@Version']
@ -245,44 +290,40 @@ def parse_chips():
if pname == 'SYS': pname = 'SYSCFG'
if pname in FAKE_PERIPHERALS: continue
peris[pname] = pkind
put_peri(peris_by_family, pkind, family.removeprefix('STM32'))
put_peri(peris_by_line, pkind, line.removeprefix('STM32'))
put_peri(peris_by_chip, pkind, name.removeprefix('STM32'))
addr = h['defines'].get(pname)
if addr is None: continue
with open('chip_names.yaml', 'w') as f:
f.write(yaml.dump(list(chips.keys())))
p = {}
p['kind'] = pkind
p['addr'] = addr
if block := match_peri(pname+':'+pkind):
p['block'] = block
peris[pname] = p
interrupts = h['interrupts']
for chip_name, chip in chips.items():
h = find_header(chip_name)
if h is None:
raise Exception("missing header for {}".format(chip_name))
h = headers_parsed[h]
chip = OrderedDict({
'name': name,
'flash': flash,
'ram': ram,
'gpio_af': gpio_version,
'peripherals': peris,
'interrupts': interrupts,
chip['interrupts'] = h['interrupts']
peris = {}
for pname, pkind in chip['peripherals'].items():
addr = h['defines'].get(pname)
if addr is None: continue
p = OrderedDict({
'name': pname,
'addr': addr,
'kind': pkind,
})
with open('data/chips/'+name+'.yaml', 'w') as f:
f.write(yaml.dump(chip))
peris_by_family = {k: ', '.join(sorted(v)) for k, v in peris_by_family.items()}
peris_by_line = {k: ', '.join(sorted(v)) for k, v in peris_by_line.items()}
peris_by_chip = {k: ', '.join(sorted(v)) for k, v in peris_by_chip.items()}
with open('tmp/peris_by_family.yaml', 'w') as f: f.write(yaml.dump(peris_by_family, width=240))
with open('tmp/peris_by_line.yaml', 'w') as f: f.write(yaml.dump(peris_by_line, width=240))
with open('tmp/peris_by_chip.yaml', 'w') as f: f.write(yaml.dump(peris_by_chip, width=240))
if block := match_peri(pname+':'+pkind):
p['block'] = block
peris[pname] = p
chip['peripherals'] = peris
with open('data/chips/'+chip_name+'.yaml', 'w') as f:
f.write(yaml.dump(chip))
def parse_gpio_af():
os.makedirs('data/gpio_af', exist_ok=True)
for f in glob('sources/mcu/IP/GPIO-*_gpio_v1_0_Modes.xml'):
if 'STM32F1' in f: continue
@ -322,4 +363,4 @@ def parse_gpio_af():
parse_gpio_af()
parse_headers()
parse_chips()
parse_chips()