Group packages with same chip
This commit is contained in:
parent
69b1c6a96c
commit
6aafc6cbce
193
header_map.yaml
Normal file
193
header_map.yaml
Normal 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
|
189
parse.py
189
parse.py
@ -1,6 +1,8 @@
|
|||||||
import xmltodict
|
import xmltodict
|
||||||
import yaml
|
import yaml
|
||||||
import re
|
import re
|
||||||
|
import json
|
||||||
|
import os
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from glob import glob
|
from glob import glob
|
||||||
|
|
||||||
@ -30,30 +32,35 @@ def children(x, key):
|
|||||||
return r
|
return r
|
||||||
return [r]
|
return [r]
|
||||||
|
|
||||||
headers = []
|
|
||||||
headers_parsed = {}
|
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):
|
def find_header(model):
|
||||||
r = ''
|
#for a, b in header_map:
|
||||||
for x in re.findall('(\\([^)]+\\)|.)', model):
|
# model = re.sub(a, b, model, flags=re.IGNORECASE)
|
||||||
r += '['+''.join(re.findall('[0-9A-Z]', x))+'x]'
|
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 = []
|
res = []
|
||||||
for h in headers:
|
for h in headers_parsed.keys():
|
||||||
m = re.match(r, h+'xxxxxxx', re.IGNORECASE)
|
if re.match('^' + h.replace('x', '.') + '$', model):
|
||||||
if m:
|
|
||||||
res.append(h)
|
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:
|
if len(res) == 0:
|
||||||
return None
|
return None
|
||||||
|
assert len(res) == 1
|
||||||
return res[0]
|
return res[0]
|
||||||
|
|
||||||
def paren_ok(val):
|
def paren_ok(val):
|
||||||
@ -108,7 +115,7 @@ def parse_header(f):
|
|||||||
continue
|
continue
|
||||||
accum = ''
|
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))
|
irqs[m.group(1)] = int(m.group(2))
|
||||||
|
|
||||||
if m := re.match('#define +([0-9A-Za-z_]+)\\(', l):
|
if m := re.match('#define +([0-9A-Za-z_]+)\\(', l):
|
||||||
@ -164,6 +171,8 @@ FAKE_PERIPHERALS = [
|
|||||||
'LWIP',
|
'LWIP',
|
||||||
'USB_HOST',
|
'USB_HOST',
|
||||||
'USB_DEVICE',
|
'USB_DEVICE',
|
||||||
|
'GUI_INTERFACE',
|
||||||
|
'TRACER_EMB',
|
||||||
]
|
]
|
||||||
|
|
||||||
perimap = [
|
perimap = [
|
||||||
@ -194,50 +203,86 @@ def match_peri(peri):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def parse_headers():
|
def parse_headers():
|
||||||
|
os.makedirs('sources/headers_parsed', exist_ok=True)
|
||||||
|
print('loading headers...')
|
||||||
for f in glob('sources/headers/*.h'):
|
for f in glob('sources/headers/*.h'):
|
||||||
#if 'stm32f4' not in f: continue
|
#if 'stm32f4' not in f: continue
|
||||||
print(f)
|
|
||||||
ff = f.removeprefix('sources/headers/')
|
ff = f.removeprefix('sources/headers/')
|
||||||
ff = ff.removesuffix('.h')
|
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():
|
def parse_chips():
|
||||||
peris_by_family = {}
|
os.makedirs('data/chips', exist_ok=True)
|
||||||
peris_by_chip = {}
|
|
||||||
peris_by_line = {}
|
|
||||||
|
|
||||||
def put_peri(peris, peri, chip):
|
chips = {}
|
||||||
if peri not in peris:
|
|
||||||
peris[peri] = set()
|
|
||||||
peris[peri].add(chip)
|
|
||||||
|
|
||||||
for f in glob('sources/mcu/STM32*.xml'):
|
for f in sorted(glob('sources/mcu/STM32*.xml')):
|
||||||
if 'STM32MP' in f: continue
|
if 'STM32MP' in f: continue
|
||||||
#if 'STM32F4' not in f: continue
|
|
||||||
|
|
||||||
print(f)
|
print(f)
|
||||||
|
|
||||||
r = xmltodict.parse(open(f, 'rb'))['Mcu']
|
r = xmltodict.parse(open(f, 'rb'))['Mcu']
|
||||||
|
|
||||||
names = expand_name(r['@RefName'])
|
package_names = expand_name(r['@RefName'])
|
||||||
rams = r['Ram']
|
package_rams = r['Ram']
|
||||||
flashs = r['Flash']
|
package_flashs = r['Flash']
|
||||||
if type(rams) != list: rams = [rams]*len(names)
|
if type(package_rams) != list: package_rams = [package_rams]*len(package_names)
|
||||||
if type(flashs) != list: flashs = [flashs]*len(names)
|
if type(package_flashs) != list: package_flashs = [package_flashs]*len(package_names)
|
||||||
for i,name in enumerate(names):
|
for package_i, package_name in enumerate(package_names):
|
||||||
flash = int(flashs[i])
|
chip_name = chip_name_from_package_name(package_name)
|
||||||
ram = int(rams[i])
|
flash = int(package_flashs[package_i])
|
||||||
line = r['@Line']
|
ram = int(package_rams[package_i])
|
||||||
family = r['@Family']
|
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version'].removesuffix('_gpio_v1_0')
|
||||||
|
|
||||||
gpio_version = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version'].removesuffix('_gpio_v1_0')
|
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'],
|
||||||
|
})
|
||||||
|
|
||||||
h = find_header(name)
|
chips[chip_name]['packages'].append(OrderedDict({
|
||||||
if h is None: continue
|
'name': package_name,
|
||||||
h = headers_parsed[h]
|
'package': r['@Package'],
|
||||||
|
}))
|
||||||
|
|
||||||
peris = {}
|
# 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']:
|
for ip in r['IP']:
|
||||||
pname = ip['@InstanceName']
|
pname = ip['@InstanceName']
|
||||||
pkind = ip['@Name']+':'+ip['@Version']
|
pkind = ip['@Name']+':'+ip['@Version']
|
||||||
@ -245,44 +290,40 @@ def parse_chips():
|
|||||||
|
|
||||||
if pname == 'SYS': pname = 'SYSCFG'
|
if pname == 'SYS': pname = 'SYSCFG'
|
||||||
if pname in FAKE_PERIPHERALS: continue
|
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)
|
with open('chip_names.yaml', 'w') as f:
|
||||||
if addr is None: continue
|
f.write(yaml.dump(list(chips.keys())))
|
||||||
|
|
||||||
p = {}
|
for chip_name, chip in chips.items():
|
||||||
p['kind'] = pkind
|
h = find_header(chip_name)
|
||||||
p['addr'] = addr
|
if h is None:
|
||||||
if block := match_peri(pname+':'+pkind):
|
raise Exception("missing header for {}".format(chip_name))
|
||||||
p['block'] = block
|
h = headers_parsed[h]
|
||||||
peris[pname] = p
|
|
||||||
|
|
||||||
interrupts = h['interrupts']
|
chip['interrupts'] = h['interrupts']
|
||||||
|
|
||||||
chip = OrderedDict({
|
peris = {}
|
||||||
'name': name,
|
for pname, pkind in chip['peripherals'].items():
|
||||||
'flash': flash,
|
addr = h['defines'].get(pname)
|
||||||
'ram': ram,
|
if addr is None: continue
|
||||||
'gpio_af': gpio_version,
|
|
||||||
'peripherals': peris,
|
p = OrderedDict({
|
||||||
'interrupts': interrupts,
|
'name': pname,
|
||||||
|
'addr': addr,
|
||||||
|
'kind': pkind,
|
||||||
})
|
})
|
||||||
|
if block := match_peri(pname+':'+pkind):
|
||||||
|
p['block'] = block
|
||||||
|
peris[pname] = p
|
||||||
|
chip['peripherals'] = peris
|
||||||
|
|
||||||
with open('data/chips/'+name+'.yaml', 'w') as f:
|
with open('data/chips/'+chip_name+'.yaml', 'w') as f:
|
||||||
f.write(yaml.dump(chip))
|
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))
|
|
||||||
|
|
||||||
|
|
||||||
def parse_gpio_af():
|
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'):
|
for f in glob('sources/mcu/IP/GPIO-*_gpio_v1_0_Modes.xml'):
|
||||||
if 'STM32F1' in f: continue
|
if 'STM32F1' in f: continue
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user