Skip to content

Commit 54296e1

Browse files
committed
release: prepare 1.0.9 upload safeguards
1 parent 624320f commit 54296e1

19 files changed

Lines changed: 306 additions & 65 deletions

docs/RELEASE_1.0.9.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# nRF54 Arduino Core 1.0.9
2+
3+
`1.0.9` adds Arduino IDE 1.x upload compatibility and tightens the native
4+
upload path following [issue #102](https://github.com/lolren/nrf54-arduino-core/issues/102)
5+
and [discussion #103](https://github.com/lolren/nrf54-arduino-core/discussions/103).
6+
7+
## Arduino IDE 1.x compatibility
8+
9+
- Define the upload and programmer `params.verbose` and `params.quiet`
10+
properties required by Arduino IDE 1.8.x.
11+
- Keep those properties empty, so Arduino IDE 2.x and Arduino CLI expand the
12+
same upload commands in quiet and verbose modes.
13+
- Cover the default uploader and Upload Using Programmer recipes.
14+
15+
## LM20A upload safeguards
16+
17+
- Bundle [nRF OCD 0.3.8](https://github.com/lolren/open-nrf-ocd/releases/tag/v0.3.8).
18+
- Reject a selected nRF54L15 target when the onboard LM20A CMSIS-DAP probe is
19+
connected, and reject the crossed case, before sending any CMSIS-DAP command.
20+
- Leave external CMSIS-DAP probes available because their USB identity cannot
21+
determine which target is attached.
22+
- On Windows, stop after the successful resetting upload instead of opening a
23+
second probe session to write DHCSR. This preserves the command-free
24+
post-reset boundary introduced in 1.0.8 on every native upload path.
25+
26+
## SAMD11 BOOTPROT boundary
27+
28+
The onboard SAMD11 exposes CMSIS-DAP access to the downstream nRF54 target, not
29+
to its own NVM user row. The native uploader therefore cannot set SAMD11
30+
BOOTPROT or repair a SAMD11 that no longer enumerates. Version 1.0.9 does not
31+
guess a fuse value: the discussion does not provide Seeed's factory firmware
32+
layout, a supported protection size, or a redistributable recovery image.
33+
34+
## Validation
35+
36+
- nRF OCD unit tests cover both matching onboard probe/target pairs, both
37+
crossed pairs, external probes, and command-free post-reset teardown.
38+
- Release binaries build for Linux x86-64, ARM64, and ARMHF and Windows x86-64
39+
and x86. Their published checksum manifest and corresponding source verify.
40+
- Arduino CLI expands the default upload recipe in quiet and verbose modes,
41+
and the focused upload and release-version suites pass.
42+
- No new hardware upload was performed for this release.
43+
44+
## Install or upgrade
45+
46+
```bash
47+
arduino-cli core update-index
48+
arduino-cli core install "nrf54l15clean:nrf54l15clean@1.0.9"
49+
```
50+
51+
[Full changes since v1.0.8](https://github.com/lolren/nrf54-arduino-core/compare/v1.0.8...v1.0.9)

hardware/nrf54l15clean/nrf54l15clean/cores/nrf54l15/CoreVersionGenerated.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#define ARDUINO_NRF54L15_CLEAN_VERSION_MAJOR 1
55
#define ARDUINO_NRF54L15_CLEAN_VERSION_MINOR 0
6-
#define ARDUINO_NRF54L15_CLEAN_VERSION_PATCH 8
6+
#define ARDUINO_NRF54L15_CLEAN_VERSION_PATCH 9
77
#define ARDUINO_NRF54L15_CLEAN_VERSION_PRERELEASE ""
88
#define ARDUINO_NRF54L15_CLEAN_VERSION_IS_PRERELEASE 0
99

@@ -16,6 +16,6 @@
1616
ARDUINO_NRF54L15_CLEAN_VERSION_MINOR, \
1717
ARDUINO_NRF54L15_CLEAN_VERSION_PATCH)
1818

19-
#define ARDUINO_NRF54L15_CLEAN_VERSION_STRING "1.0.8"
19+
#define ARDUINO_NRF54L15_CLEAN_VERSION_STRING "1.0.9"
2020

2121
#endif // NRF54L15_CLEAN_CORE_VERSION_GENERATED_H

hardware/nrf54l15clean/nrf54l15clean/cores/nrf54lm20b/CoreVersionGenerated.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#define ARDUINO_NRF54L15_CLEAN_VERSION_MAJOR 1
55
#define ARDUINO_NRF54L15_CLEAN_VERSION_MINOR 0
6-
#define ARDUINO_NRF54L15_CLEAN_VERSION_PATCH 8
6+
#define ARDUINO_NRF54L15_CLEAN_VERSION_PATCH 9
77
#define ARDUINO_NRF54L15_CLEAN_VERSION_PRERELEASE ""
88
#define ARDUINO_NRF54L15_CLEAN_VERSION_IS_PRERELEASE 0
99

@@ -16,6 +16,6 @@
1616
ARDUINO_NRF54L15_CLEAN_VERSION_MINOR, \
1717
ARDUINO_NRF54L15_CLEAN_VERSION_PATCH)
1818

19-
#define ARDUINO_NRF54L15_CLEAN_VERSION_STRING "1.0.8"
19+
#define ARDUINO_NRF54L15_CLEAN_VERSION_STRING "1.0.9"
2020

2121
#endif // NRF54L15_CLEAN_CORE_VERSION_GENERATED_H

hardware/nrf54l15clean/nrf54l15clean/platform.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=nRF54L15 Boards
2-
version=1.0.8
2+
version=1.0.9
33
category=Arduino
44

55
# Python launcher for upload helper.
@@ -88,12 +88,16 @@ tools.nrf54upload.cmd.path={tools.nrf54upload.path}/upload.py
8888
# transport failures can fall back to pyOCD recovery automatically.
8989
tools.nrf54ocd.path={runtime.platform.path}/tools
9090
tools.nrf54ocd.cmd.path={tools.nrf54ocd.path}/nrf_ocd
91+
tools.nrf54ocd.upload.params.verbose=
92+
tools.nrf54ocd.upload.params.quiet=
9193
tools.nrf54ocd.upload.pattern="{tools.python3.cmd}" {tools.python3.args} "{tools.nrf54upload.cmd.path}" --hex "{build.path}/{build.project_name}.hex" --uf2 "{build.path}/{build.project_name}.uf2" --port "{serial.port}" --runner "nrf_ocd" --target "{upload.target}" --uid "{upload.uid}" --openocd-script "{upload.openocd_script}" --openocd-speed "{upload.openocd_speed}" --openocd-bin "{upload.openocd_bin}" --host-tools-path "{runtime.tools.nrf54l15hosttools.path}" --uf2-drive "{upload.uf2_drive}" --uf2-labels "{upload.uf2_labels}" --uf2-timeout "{upload.uf2_timeout}" --pyocd-safe "{upload.pyocd_safe}"
9294
tools.nrf54ocd.upload.pattern.windows=powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "{runtime.platform.path}/tools/upload_windows.ps1" -HexPath "{build.path}/{build.project_name}.hex" -Port "{serial.port}" -Target "{upload.target}"
9395
# macOS does not have a bundled nrf_ocd binary yet, so keep the recovery uploader there.
9496
tools.nrf54ocd.upload.pattern.macosx="{tools.python3.cmd}" {tools.python3.args} "{tools.nrf54upload.cmd.path}" --hex "{build.path}/{build.project_name}.hex" --uf2 "{build.path}/{build.project_name}.uf2" --port "{serial.port}" --runner "pyocd" --target "{upload.target}" --uid "{upload.uid}" --openocd-script "{upload.openocd_script}" --openocd-speed "{upload.openocd_speed}" --openocd-bin "{upload.openocd_bin}" --host-tools-path "{runtime.tools.nrf54l15hosttools.path}" --uf2-drive "{upload.uf2_drive}" --uf2-labels "{upload.uf2_labels}" --uf2-timeout "{upload.uf2_timeout}" --pyocd-safe "{upload.pyocd_safe}"
9597

9698
# Explicit recovery uploader. This intentionally stays Python-based on every OS.
99+
tools.nrf54upload.upload.params.verbose=
100+
tools.nrf54upload.upload.params.quiet=
97101
tools.nrf54upload.upload.pattern="{tools.python3.cmd}" {tools.python3.args} "{tools.nrf54upload.cmd.path}" --hex "{build.path}/{build.project_name}.hex" --uf2 "{build.path}/{build.project_name}.uf2" --port "{serial.port}" --runner "{upload.runner}" --target "{upload.target}" --uid "{upload.uid}" --openocd-script "{upload.openocd_script}" --openocd-speed "{upload.openocd_speed}" --openocd-bin "{upload.openocd_bin}" --host-tools-path "{runtime.tools.nrf54l15hosttools.path}" --uf2-drive "{upload.uf2_drive}" --uf2-labels "{upload.uf2_labels}" --uf2-timeout "{upload.uf2_timeout}" --pyocd-safe "{upload.pyocd_safe}"
98102

99103
tools.nrf54uf2.path={runtime.platform.path}/tools/uf2
@@ -104,6 +108,8 @@ tools.nrf54uf2.uf2conv.path={tools.nrf54uf2.path}/uf2conv.py
104108
# uploads, with the selected programmer supplying the runner explicitly.
105109
tools.nrf54program.path={runtime.platform.path}/tools
106110
tools.nrf54program.cmd.path={tools.nrf54program.path}/upload.py
111+
tools.nrf54program.program.params.verbose=
112+
tools.nrf54program.program.params.quiet=
107113
tools.nrf54program.program.pattern="{tools.python3.cmd}" {tools.python3.args} "{tools.nrf54program.cmd.path}" --hex "{build.path}/{build.project_name}.hex" --uf2 "{build.path}/{build.project_name}.uf2" --port "{serial.port}" --runner "pyocd" --target "{upload.target}" --uid "{upload.uid}" --openocd-script "{upload.openocd_script}" --openocd-speed "{upload.openocd_speed}" --openocd-bin "{upload.openocd_bin}" --host-tools-path "{runtime.tools.nrf54l15hosttools.path}" --uf2-drive "{upload.uf2_drive}" --uf2-labels "{upload.uf2_labels}" --uf2-timeout "{upload.uf2_timeout}" --pyocd-safe "{upload.pyocd_safe}"
108114

109115
# LM20A pyOCD target support is registered at upload time via
1.57 KB
Binary file not shown.

hardware/nrf54l15clean/nrf54l15clean/tools/nrf_ocd-compliance/README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# nRF OCD Corresponding Source
22

3-
The platform's Linux `tools/nrf_ocd` executable is nRF OCD `v0.3.7`. It was
3+
The platform's Linux `tools/nrf_ocd` executable is nRF OCD `v0.3.8`. It was
44
built from nRF OCD source and statically linked with libusb `1.0.27`. Most nRF
55
OCD code is project-owned MIT work; the target, flash-algorithm, and USB
66
transport portions identified in
@@ -10,14 +10,15 @@ recipients can inspect, modify, and relink the complete work.
1010

1111
| File | Role | SHA-256 |
1212
|---|---|---|
13-
| `../nrf_ocd` | Distributed Linux x86-64 executable | `9013a6ad6a1bae2788750470502c863b3dfd4ff321f442e2f36c846deacfb31c` |
14-
| `open-nrf-ocd-v0.3.7-source.tar.gz` | Exact application source from the annotated `v0.3.7` release tag | `b1130ef1b05df1b2cd656189d2f5c7333e86b86055c03ed86ab380b00e405b95` |
13+
| `../nrf_ocd` | Distributed Linux x86-64 executable | `b05cc011852292f71119eab836bde413dec9dbf1e70428dce1020037f2d547a0` |
14+
| `open-nrf-ocd-v0.3.8-source.tar.gz` | Exact application source from the annotated `v0.3.8` release tag | `962c788d860b968d27917d3cdc35c7b4df28cf4bdae6000fef853c7b9743c27c` |
1515
| `libusb-1.0.27.tar.bz2` | Corresponding libusb source | `ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575` |
1616

1717
The application archive records commit
18-
`90c1845462050a6ab68ed73eba4ea0a8a8330872` and contains the exact source used
19-
for the published `v0.3.7` binaries, including command-free post-reset
20-
teardown, bounded SWD transfer recovery, and their regression tests.
18+
`2de1a130753e1980178fd796f7c68fe446da249b` and contains the exact source used
19+
for the published `v0.3.8` binaries, including the onboard probe/target guard,
20+
command-free post-reset teardown, bounded SWD transfer recovery, and their
21+
regression tests.
2122

2223
Project-owned nRF OCD portions are provided under the adjacent
2324
[MIT license](nrf_ocd-MIT.txt). The identified pyOCD-derived portions use the

hardware/nrf54l15clean/nrf54l15clean/tools/nrf_ocd-compliance/nrf_ocd-THIRD_PARTY_NOTICES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ terms below.
66

77
## pyOCD
88

9-
The following nRF OCD `v0.3.7` source paths contain material adapted from or
9+
The following nRF OCD `v0.3.8` source paths contain material adapted from or
1010
behavior directly derived from pyOCD `0.44.1`:
1111

1212
- `src/flash_algo_nrf54l.c`
Binary file not shown.
Binary file not shown.

hardware/nrf54l15clean/nrf54l15clean/tools/nrf_ocd-compliance/rebuild-linux-x86_64.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ BUILD="$WORK/libusb-build"
1111

1212
rm -rf "$APP" "$LIBUSB" "$PREFIX" "$BUILD"
1313
mkdir -p "$APP" "$BUILD"
14-
tar -xzf "$ROOT/open-nrf-ocd-v0.3.7-source.tar.gz" -C "$APP" --strip-components=1
14+
tar -xzf "$ROOT/open-nrf-ocd-v0.3.8-source.tar.gz" -C "$APP" --strip-components=1
1515
tar -xjf "$ROOT/libusb-1.0.27.tar.bz2" -C "$WORK"
1616

1717
read -r -a CC_COMMAND <<< "${NRF_OCD_CC:-cc}"

0 commit comments

Comments
 (0)