Skip to content

Commit 696c44f

Browse files
committed
Add CH5xx support to PIO integration
1 parent 9ba0dc6 commit 696c44f

File tree

2 files changed

+113
-5
lines changed

2 files changed

+113
-5
lines changed

.github/gen_ldscript.py

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,20 @@ def get_ld_defines(chip_name: str):
88
target_mcu: str = ""
99
mcu_package: int = 0
1010
target_mcu_ld: int = 0
11-
if chip_name.startswith("ch32v003"):
12-
target_mcu = "CH32V003"
13-
target_mcu_ld = 0
11+
if chip_name.startswith("ch32v00"):
12+
target_mcu = chip_name.upper()[0:len("ch32v00x")]
13+
mcu_package = 1
14+
if "003" in chip_name:
15+
target_mcu_ld = 0
16+
elif "002" in chip_name:
17+
target_mcu_ld = 5
18+
elif "004" in chip_name or "005" in chip_name:
19+
target_mcu_ld = 6
20+
elif "006" in chip_name or "007" in chip_name:
21+
target_mcu_ld = 7
22+
else:
23+
sys.stdout.write("Unknown CH32V00x variant %s\n" % chip_name)
24+
env.Exit(-1)
1425
else:
1526
mcu_package = 1
1627
if chip_name.startswith("ch32v10"):
@@ -90,8 +101,57 @@ def get_ld_defines(chip_name: str):
90101
elif "rb" in chip_name:
91102
mcu_package = 2
92103
target_mcu_ld = 3
104+
elif chip_name.startswith("ch57"):
105+
# CH570 / CH571 / CH572 / CH573
106+
target_mcu = "CH57X"
107+
if "570" in chip_name:
108+
mcu_package = 0
109+
elif "571" in chip_name:
110+
mcu_package = 1
111+
elif "572" in chip_name:
112+
mcu_package = 2
113+
elif "573" in chip_name:
114+
mcu_package = 3
115+
else:
116+
sys.stdout.write("Unknown CH57x variant %s\n" % chip_name)
117+
env.Exit(-1)
118+
target_mcu_ld = 10
119+
elif chip_name.startswith("ch58"):
120+
# CH582 / CH583 / CH584 / CH585
121+
target_mcu = "CH58X"
122+
if "582" in chip_name:
123+
mcu_package = 2
124+
elif "583" in chip_name:
125+
mcu_package = 3
126+
elif "584" in chip_name:
127+
mcu_package = 4
128+
elif "585" in chip_name:
129+
mcu_package = 5
130+
else:
131+
sys.stdout.write("Unknown CH58x variant %s\n" % chip_name)
132+
env.Exit(-1)
133+
target_mcu_ld = 8
134+
elif chip_name.startswith("ch59"):
135+
# CH591 / CH592
136+
target_mcu = "CH59X"
137+
if "591" in chip_name:
138+
mcu_package = 1
139+
elif "592" in chip_name:
140+
mcu_package = 2
141+
else:
142+
sys.stdout.write("Unknown CH59x variant %s\n" % chip_name)
143+
env.Exit(-1)
144+
target_mcu_ld = 9
145+
elif chip_name.startswith("ch32h41"):
146+
target_mcu = chip_name.upper()[0:len("ch32h41x")]
147+
mcu_package = 1
148+
if "416" in chip_name:
149+
mcu_package = 2
150+
elif "415" in chip_name:
151+
mcu_package = 3
152+
target_mcu_ld = 11
93153
else:
94-
sys.stdout.write("Unkonwn MCU %s\n" % chip_name)
154+
sys.stdout.write("Unknown MCU %s\n" % chip_name)
95155
env.Exit(-1)
96156
return (target_mcu, mcu_package, target_mcu_ld)
97157

@@ -101,6 +161,15 @@ def get_ld_defines(chip_name: str):
101161
# retrieve needed macro values
102162
target_mcu, mcu_package, target_mcu_ld = get_ld_defines(chip_name)
103163

164+
# some header files also use these macros, so inject them
165+
env.Append(
166+
CPPDEFINES=[
167+
("TARGET_MCU", target_mcu),
168+
("MCU_PACKAGE", mcu_package),
169+
("TARGET_MCU_LD", target_mcu_ld)
170+
]
171+
)
172+
104173
# Let the LD script be generated right before the .elf is built
105174
env.AddPreAction(
106175
"$BUILD_DIR/${PROGNAME}.elf",

platformio.ini

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ platform = https://github.com/Community-PIO-CH32V/platform-ch32v.git
88
monitor_speed = 115200
99
; default upload and debug protocol is "wch-link", using OpenOCD and
1010
; expecting a WCH-LinkE programming adapter.
11-
; To use minichlink, uncomment this
11+
; To use minichlink (handles WCH-Link(E), and some USB ISP), uncomment this
1212
;upload_protocol = minichlink
13+
; can also use minichlink for SWD debugging. beware: step over not working
14+
; correctly, only use "set breakpoint" and "continue".
15+
;debug_tool = minichlink
1316
; additionally uncomment this to use ardulink on a specific COM port
1417
;upload_flags =
1518
; -c
1619
; COM3
20+
; to use USB ISP uploader (usually for CH5xx, V20x, V30x), uncomment this
21+
; remember to replug the device in bootloader mode for it to be visible
22+
;upload_protocol = isp
1723

1824
; for examples that use ch32fun as their base
1925
[fun_base]
@@ -51,6 +57,15 @@ build_flags = ${fun_base.build_flags} -DCH32X03x -std=gnu11
5157
build_unflags = -std=gnu99
5258
board = genericCH32X035C8T6
5359

60+
[fun_base_5xx]
61+
extends = fun_base
62+
build_flags = ${fun_base.build_flags} -DCH5xx -std=gnu11
63+
build_unflags = -std=gnu99
64+
; select the exact chip here!
65+
;board = genericCH573F
66+
board = genericCH582F
67+
;board = genericCH592X
68+
5469
; If creating a new example:
5570
; 1. Add new [env:name]
5671
; 2. Set the extends to the fun_base_{003, 103, 203, 307, x035} as needed
@@ -297,3 +312,27 @@ build_src_filter = ${fun_base.build_src_filter} +<examples_x035/usbdevice/usbdev
297312
[env:x035_usbpd_sink]
298313
extends = fun_base_x035
299314
build_src_filter = ${fun_base.build_src_filter} +<examples_x035/usbpd_sink/usbpd_sink.c>
315+
316+
[env:ch5xx_blink]
317+
extends = fun_base_5xx
318+
build_src_filter = ${fun_base.build_src_filter} +<examples_ch5xx/blink>
319+
320+
[env:ch5xx_usbfs_cdc_tty]
321+
extends = fun_base_5xx
322+
build_src_filter = ${fun_base.build_src_filter} +<examples_usb/USBFS/usbfs_cdc_tty>
323+
324+
[env:ch5xx_boot_button]
325+
extends = fun_base_5xx
326+
build_src_filter = ${fun_base.build_src_filter} +<examples_ch5xx/boot_button>
327+
328+
[env:ch5xx_ble_beacon]
329+
extends = fun_base_5xx
330+
build_src_filter = ${fun_base.build_src_filter} +<examples_ch5xx/ble_beacon>
331+
332+
[env:ch5xx_iSLER]
333+
extends = fun_base_5xx
334+
build_src_filter = ${fun_base.build_src_filter} +<examples_ch5xx/iSLER>
335+
336+
[env:ch5xx_debugprintfdemo]
337+
extends = fun_base_5xx
338+
build_src_filter = ${fun_base.build_src_filter} +<examples_ch5xx/debugprintfdemo>

0 commit comments

Comments
 (0)