Skip to content

Commit 2a2f775

Browse files
committed
feat(stm32variant): add XSPI pin maps
Update both variant generators to map XSPI signals, including DATA0-7, SCLK, NCS1/NCS2, NCLK, and DQS. Route QUADSPI bank selects to NCS1/NCS2. Signed-off-by: Frederic Pillon <frederic.pillon@st.com> Assisted-by: GitHub Copilot
1 parent b06573f commit 2a2f775

3 files changed

Lines changed: 137 additions & 55 deletions

File tree

‎CI/update/stm32variant.py‎

Lines changed: 60 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,10 @@
5959
ospidata6_list = [] # ['PIN','name','OSPIDATA6', ['af']]
6060
ospidata7_list = [] # ['PIN','name','OSPIDATA7', ['af']]
6161
xspisclk_list = [] # ['PIN','name','XSPISCLK', ['af']]
62-
xspissel_list = [] # ['PIN','name','XSPISSEL', ['af']]
62+
xspincs1_list = [] # ['PIN','name','XSPINCS1', ['af']]
63+
xspincs2_list = [] # ['PIN','name','XSPINCS2', ['af']]
64+
xspinclk_list = [] # ['PIN','name','XSPINCLK', ['af']]
65+
xspidqs_list = [] # ['PIN','name','XSPIDQS', ['af']]
6366
syswkup_list = [] # ['PIN','name','SYSWKUP']
6467
usb_list = [] # ['PIN','name','USB', ['af']]
6568
usb_otgfs_list = [] # ['PIN','name','USB', ['af']]
@@ -606,10 +609,16 @@ def store_xspi(pin, name, signal):
606609
ospidata6_list.append([pin, name, signal])
607610
elif "_IO7" in signal:
608611
ospidata7_list.append([pin, name, signal])
612+
elif "_NCLK" in signal:
613+
xspinclk_list.append([pin, name, signal])
614+
elif "_DQS" in signal:
615+
xspidqs_list.append([pin, name, signal])
616+
elif signal.endswith(("_NCS1", "_NCS", "_BK1_NCS")):
617+
xspincs1_list.append([pin, name, signal])
618+
elif signal.endswith(("_NCS2", "_BK2_NCS")):
619+
xspincs2_list.append([pin, name, signal])
609620
elif "_CLK" in signal:
610621
xspisclk_list.append([pin, name, signal])
611-
elif "_NCS" in signal:
612-
xspissel_list.append([pin, name, signal])
613622

614623

615624
# Store SYS pins
@@ -1043,11 +1052,14 @@ def xspi_pinmap(lst):
10431052
wpin = [0]
10441053
name = "QUADSPI"
10451054
hal = "QSPI"
1046-
ospi_regex = r"OCTOSPI(?:M_P)?(\d).*"
1055+
xspi_regex = r"(OCTOSPI|XSPI)(?:M_P)?(\d).*"
10471056

10481057
if xspidata0_list and "OCTOSPI" in xspidata0_list[0][2]:
10491058
name = "OCTOSPI"
10501059
hal = "OSPI"
1060+
elif xspidata0_list and "XSPI" in xspidata0_list[0][2]:
1061+
name = "XSPI"
1062+
hal = "XSPI"
10511063
if lst == xspidata0_list:
10521064
aname = f"{name}_DATA0"
10531065
elif lst == xspidata1_list:
@@ -1066,16 +1078,21 @@ def xspi_pinmap(lst):
10661078
aname = f"{name}_DATA7"
10671079
elif lst == xspisclk_list:
10681080
aname = f"{name}_SCLK"
1081+
elif lst == xspinclk_list:
1082+
aname = f"{name}_NCLK"
1083+
elif lst == xspidqs_list:
1084+
aname = f"{name}_DQS"
1085+
elif lst == xspincs2_list:
1086+
aname = f"{name}_NCS2"
1087+
elif lst == xspincs1_list:
1088+
aname = f"{name}_NCS1"
10691089
else:
1070-
aname = f"{name}_SSEL"
1090+
aname = f"{name}_NCS1"
10711091
for p in lst:
10721092
# 2nd element is the XXXXSPI_YYYY signal
1073-
instm = re.match(ospi_regex, p[2])
1093+
instm = re.match(xspi_regex, p[2])
10741094
if instm:
1075-
if "1" in instm.group(1):
1076-
inst = "OCTOSPI1"
1077-
elif "2" in instm.group(1):
1078-
inst = "OCTOSPI2"
1095+
inst = f"{instm.group(1)}{instm.group(2)}"
10791096
else:
10801097
inst = "QUADSPI"
10811098
winst.append(len(inst))
@@ -1242,6 +1259,21 @@ def print_peripheral():
12421259
else:
12431260
usb_pinmmap = [usb_pinmap(usb_otghs_list)]
12441261

1262+
xspi_pinmaps = (
1263+
xspi_pinmap(xspidata0_list),
1264+
xspi_pinmap(xspidata1_list),
1265+
xspi_pinmap(xspidata2_list),
1266+
xspi_pinmap(xspidata3_list),
1267+
xspi_pinmap(ospidata4_list),
1268+
xspi_pinmap(ospidata5_list),
1269+
xspi_pinmap(ospidata6_list),
1270+
xspi_pinmap(ospidata7_list),
1271+
xspi_pinmap(xspisclk_list),
1272+
xspi_pinmap(xspincs1_list),
1273+
xspi_pinmap(xspincs2_list),
1274+
)
1275+
xspi_pinmaps += (xspi_pinmap(xspinclk_list), xspi_pinmap(xspidqs_list))
1276+
12451277
periph_c_file.write(
12461278
periph_c_template.render(
12471279
year=year,
@@ -1267,18 +1299,7 @@ def print_peripheral():
12671299
),
12681300
(can_pinmap(canrd_list), can_pinmap(cantd_list)),
12691301
[eth_pinmap()],
1270-
(
1271-
xspi_pinmap(xspidata0_list),
1272-
xspi_pinmap(xspidata1_list),
1273-
xspi_pinmap(xspidata2_list),
1274-
xspi_pinmap(xspidata3_list),
1275-
xspi_pinmap(ospidata4_list),
1276-
xspi_pinmap(ospidata5_list),
1277-
xspi_pinmap(ospidata6_list),
1278-
xspi_pinmap(ospidata7_list),
1279-
xspi_pinmap(xspisclk_list),
1280-
xspi_pinmap(xspissel_list),
1281-
),
1302+
xspi_pinmaps,
12821303
usb_pinmmap,
12831304
(
12841305
sdx_pinmap(sdxcmd_list),
@@ -1984,7 +2005,10 @@ def sort_my_lists():
19842005
ospidata6_list.sort(key=natural_sortkey)
19852006
ospidata7_list.sort(key=natural_sortkey)
19862007
xspisclk_list.sort(key=natural_sortkey)
1987-
xspissel_list.sort(key=natural_sortkey)
2008+
xspincs1_list.sort(key=natural_sortkey)
2009+
xspincs2_list.sort(key=natural_sortkey)
2010+
xspinclk_list.sort(key=natural_sortkey)
2011+
xspidqs_list.sort(key=natural_sortkey)
19882012
syswkup_list.sort(key=natural_sortkey2)
19892013
usb_list.sort(key=natural_sortkey)
19902014
usb_otgfs_list.sort(key=natural_sortkey)
@@ -2037,7 +2061,10 @@ def clean_all_lists():
20372061
del ospidata6_list[:]
20382062
del ospidata7_list[:]
20392063
del xspisclk_list[:]
2040-
del xspissel_list[:]
2064+
del xspincs1_list[:]
2065+
del xspincs2_list[:]
2066+
del xspinclk_list[:]
2067+
del xspidqs_list[:]
20412068
del syswkup_list[:]
20422069
del usb_list[:]
20432070
del usb_otgfs_list[:]
@@ -2085,7 +2112,10 @@ def manage_af_and_alternate():
20852112
add_af(ospidata6_list)
20862113
add_af(ospidata7_list)
20872114
add_af(xspisclk_list)
2088-
add_af(xspissel_list)
2115+
add_af(xspincs1_list)
2116+
add_af(xspincs2_list)
2117+
add_af(xspinclk_list)
2118+
add_af(xspidqs_list)
20892119
add_af(usb_list)
20902120
add_af(usb_otgfs_list)
20912121
add_af(usb_otghs_list)
@@ -2133,7 +2163,10 @@ def manage_af_and_alternate():
21332163
update_alternate(ospidata6_list)
21342164
update_alternate(ospidata7_list)
21352165
update_alternate(xspisclk_list)
2136-
update_alternate(xspissel_list)
2166+
update_alternate(xspincs1_list)
2167+
update_alternate(xspincs2_list)
2168+
update_alternate(xspinclk_list)
2169+
update_alternate(xspidqs_list)
21372170
update_alternate(syswkup_list)
21382171
update_alternate(usb_list)
21392172
update_alternate(usb_otgfs_list)
@@ -2249,7 +2282,7 @@ def parse_pins():
22492282
elif re.match("^(LPU|US|U)ART", sig) is not None:
22502283
store_uart(pin, name, sig)
22512284
elif "SPI" in sig:
2252-
if "QUADSPI" in sig or "OCTOSPI" in sig:
2285+
if "QUADSPI" in sig or "OCTOSPI" in sig or "XSPI" in sig:
22532286
store_xspi(pin, name, sig)
22542287
else:
22552288
store_spi(pin, name, sig)

‎CI/update/stm32variantv2.py‎

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@
5555
ospidata6_list = [] # ['PIN','instance','OSPIDATA6', 'af']
5656
ospidata7_list = [] # ['PIN','instance','OSPIDATA7', 'af']
5757
xspisclk_list = [] # ['PIN','instance','XSPISCLK', 'af']
58-
xspissel_list = [] # ['PIN','instance','XSPISSEL', 'af']
58+
xspincs1_list = [] # ['PIN','instance','XSPINCS1', 'af']
59+
xspincs2_list = [] # ['PIN','instance','XSPINCS2', 'af']
60+
xspinclk_list = [] # ['PIN','instance','XSPINCLK', 'af']
61+
xspidqs_list = [] # ['PIN','instance','XSPIDQS', 'af']
5962
syswkup_list = [] # ['PIN', 'signal']
6063
usb_list = [] # ['PIN','instance','USB', 'af']
6164
usb_otgfs_list = [] # ['PIN','instance','USB', 'af']
@@ -307,7 +310,7 @@ def parse_mcu_pinout():
307310
elif re.match("^(LPU|US|U)ART", instance) is not None:
308311
store_uart(pin, instance, signal_name, af)
309312
elif "SPI" in instance:
310-
if "QUADSPI" in instance or "OCTOSPI" in instance:
313+
if "QUADSPI" in instance or "OCTOSPI" in instance or "XSPI" in instance:
311314
store_xspi(pin, instance, signal_name, af)
312315
else:
313316
store_spi(pin, instance, signal_name, af)
@@ -430,10 +433,16 @@ def store_xspi(pin, name, signal, af):
430433
ospidata6_list.append([pin, name, signal, af])
431434
elif "_IO7" in signal:
432435
ospidata7_list.append([pin, name, signal, af])
436+
elif "_NCLK" in signal:
437+
xspinclk_list.append([pin, name, signal, af])
438+
elif "_DQS" in signal:
439+
xspidqs_list.append([pin, name, signal, af])
440+
elif signal.endswith(("_NCS1", "_NCS", "_BK1_NCS")):
441+
xspincs1_list.append([pin, name, signal, af])
442+
elif signal.endswith(("_NCS2", "_BK2_NCS")):
443+
xspincs2_list.append([pin, name, signal, af])
433444
elif "_CLK" in signal:
434445
xspisclk_list.append([pin, name, signal, af])
435-
elif "_NCS" in signal:
436-
xspissel_list.append([pin, name, signal, af])
437446

438447

439448
# Store SYS pins
@@ -842,11 +851,14 @@ def xspi_pinmap(lst):
842851
wpin = [0]
843852
name = "QUADSPI"
844853
hal = "QSPI"
845-
ospi_regex = r"OCTOSPI(?:M_P)?(\d).*"
854+
xspi_regex = r"(OCTOSPI|XSPI)(?:M_P)?(\d).*"
846855

847856
if xspidata0_list and "OCTOSPI" in xspidata0_list[0][2]:
848857
name = "OCTOSPI"
849858
hal = "OSPI"
859+
elif xspidata0_list and "XSPI" in xspidata0_list[0][2]:
860+
name = "XSPI"
861+
hal = "XSPI"
850862
if lst == xspidata0_list:
851863
aname = f"{name}_DATA0"
852864
elif lst == xspidata1_list:
@@ -865,16 +877,21 @@ def xspi_pinmap(lst):
865877
aname = f"{name}_DATA7"
866878
elif lst == xspisclk_list:
867879
aname = f"{name}_SCLK"
880+
elif lst == xspinclk_list:
881+
aname = f"{name}_NCLK"
882+
elif lst == xspidqs_list:
883+
aname = f"{name}_DQS"
884+
elif lst == xspincs2_list:
885+
aname = f"{name}_NCS2"
886+
elif lst == xspincs1_list:
887+
aname = f"{name}_NCS1"
868888
else:
869-
aname = f"{name}_SSEL"
889+
aname = f"{name}_NCS1"
870890
for p in lst:
871891
# 2nd element is the XXXXSPI_YYYY signal
872-
instm = re.match(ospi_regex, p[2])
892+
instm = re.match(xspi_regex, p[2])
873893
if instm:
874-
if "1" in instm.group(1):
875-
inst = "OCTOSPI1"
876-
elif "2" in instm.group(1):
877-
inst = "OCTOSPI2"
894+
inst = f"{instm.group(1)}{instm.group(2)}"
878895
else:
879896
inst = "QUADSPI"
880897
winst.append(len(inst))
@@ -1042,6 +1059,21 @@ def print_peripheral():
10421059
else:
10431060
usb_pinmmap = [usb_pinmap(usb_otghs_list)]
10441061

1062+
xspi_pinmaps = (
1063+
xspi_pinmap(xspidata0_list),
1064+
xspi_pinmap(xspidata1_list),
1065+
xspi_pinmap(xspidata2_list),
1066+
xspi_pinmap(xspidata3_list),
1067+
xspi_pinmap(ospidata4_list),
1068+
xspi_pinmap(ospidata5_list),
1069+
xspi_pinmap(ospidata6_list),
1070+
xspi_pinmap(ospidata7_list),
1071+
xspi_pinmap(xspisclk_list),
1072+
xspi_pinmap(xspincs1_list),
1073+
xspi_pinmap(xspincs2_list),
1074+
)
1075+
xspi_pinmaps += (xspi_pinmap(xspinclk_list), xspi_pinmap(xspidqs_list))
1076+
10451077
periph_c_file.write(
10461078
periph_c_template.render(
10471079
year=year,
@@ -1067,18 +1099,7 @@ def print_peripheral():
10671099
),
10681100
(can_pinmap(canrd_list), can_pinmap(cantd_list)),
10691101
[eth_pinmap()],
1070-
(
1071-
xspi_pinmap(xspidata0_list),
1072-
xspi_pinmap(xspidata1_list),
1073-
xspi_pinmap(xspidata2_list),
1074-
xspi_pinmap(xspidata3_list),
1075-
xspi_pinmap(ospidata4_list),
1076-
xspi_pinmap(ospidata5_list),
1077-
xspi_pinmap(ospidata6_list),
1078-
xspi_pinmap(ospidata7_list),
1079-
xspi_pinmap(xspisclk_list),
1080-
xspi_pinmap(xspissel_list),
1081-
),
1102+
xspi_pinmaps,
10821103
usb_pinmmap,
10831104
(
10841105
sdx_pinmap(sdxcmd_list),
@@ -1652,7 +1673,10 @@ def sort_my_lists():
16521673
ospidata6_list.sort(key=natural_sortkey)
16531674
ospidata7_list.sort(key=natural_sortkey)
16541675
xspisclk_list.sort(key=natural_sortkey)
1655-
xspissel_list.sort(key=natural_sortkey)
1676+
xspincs1_list.sort(key=natural_sortkey)
1677+
xspincs2_list.sort(key=natural_sortkey)
1678+
xspinclk_list.sort(key=natural_sortkey)
1679+
xspidqs_list.sort(key=natural_sortkey)
16561680
syswkup_list.sort(key=natural_sortkey)
16571681
usb_list.sort(key=natural_sortkey)
16581682
usb_otgfs_list.sort(key=natural_sortkey)
@@ -1705,7 +1729,10 @@ def clean_all_lists():
17051729
del ospidata6_list[:]
17061730
del ospidata7_list[:]
17071731
del xspisclk_list[:]
1708-
del xspissel_list[:]
1732+
del xspincs1_list[:]
1733+
del xspincs2_list[:]
1734+
del xspinclk_list[:]
1735+
del xspidqs_list[:]
17091736
del syswkup_list[:]
17101737
del usb_list[:]
17111738
del usb_otgfs_list[:]
@@ -1756,7 +1783,10 @@ def manage_alternate():
17561783
update_alternate(ospidata6_list)
17571784
update_alternate(ospidata7_list)
17581785
update_alternate(xspisclk_list)
1759-
update_alternate(xspissel_list)
1786+
update_alternate(xspincs1_list)
1787+
update_alternate(xspincs2_list)
1788+
update_alternate(xspinclk_list)
1789+
update_alternate(xspidqs_list)
17601790
update_alternate(syswkup_list)
17611791
update_alternate(usb_list)
17621792
update_alternate(usb_otgfs_list)

‎libraries/SrcWrapper/inc/PeripheralPins.h‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ extern const PinMap PinMap_QUADSPI_DATA1[];
8080
extern const PinMap PinMap_QUADSPI_DATA2[];
8181
extern const PinMap PinMap_QUADSPI_DATA3[];
8282
extern const PinMap PinMap_QUADSPI_SCLK[];
83-
extern const PinMap PinMap_QUADSPI_SSEL[];
83+
extern const PinMap PinMap_QUADSPI_NCS1[];
84+
extern const PinMap PinMap_QUADSPI_NCS2[];
8485

8586
//*** OCTOSPI ***
8687
extern const PinMap PinMap_OCTOSPI_DATA0[];
@@ -92,7 +93,25 @@ extern const PinMap PinMap_OCTOSPI_DATA5[];
9293
extern const PinMap PinMap_OCTOSPI_DATA6[];
9394
extern const PinMap PinMap_OCTOSPI_DATA7[];
9495
extern const PinMap PinMap_OCTOSPI_SCLK[];
95-
extern const PinMap PinMap_OCTOSPI_SSEL[];
96+
extern const PinMap PinMap_OCTOSPI_NCS1[];
97+
extern const PinMap PinMap_OCTOSPI_NCS2[];
98+
extern const PinMap PinMap_OCTOSPI_NCLK[];
99+
extern const PinMap PinMap_OCTOSPI_DQS[];
100+
101+
//*** XSPI ***
102+
extern const PinMap PinMap_XSPI_DATA0[];
103+
extern const PinMap PinMap_XSPI_DATA1[];
104+
extern const PinMap PinMap_XSPI_DATA2[];
105+
extern const PinMap PinMap_XSPI_DATA3[];
106+
extern const PinMap PinMap_XSPI_DATA4[];
107+
extern const PinMap PinMap_XSPI_DATA5[];
108+
extern const PinMap PinMap_XSPI_DATA6[];
109+
extern const PinMap PinMap_XSPI_DATA7[];
110+
extern const PinMap PinMap_XSPI_SCLK[];
111+
extern const PinMap PinMap_XSPI_NCS1[];
112+
extern const PinMap PinMap_XSPI_NCS2[];
113+
extern const PinMap PinMap_XSPI_NCLK[];
114+
extern const PinMap PinMap_XSPI_DQS[];
96115

97116
//*** USB ***
98117
extern const PinMap PinMap_USB[];

0 commit comments

Comments
 (0)