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

189
parse.py
View File

@ -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