Releases: PyMCU/RP2040Sharp
Release list
v1.0.1
RP2040Sharp v1.0.1 — first stable BUSL release 🎉
First stable release under the Business Source License 1.1 (whole project BUSL-1.1, converts to MIT on the Change Date).
✨ Included
fix(pwm): implement PWMCSR.DIVMODE(B-pin gated and edge-count modes). Unit: 521/0.
📦 NuGet
RP2040Sharp, RP2040Sharp.TestKit, RP2040Sharp.Wireless, RP2040Sharp.NanoFramework.TestKit @ 1.0.1.
🤖 Generated with Claude Code
v1.0.1-beta.12
RP2040Sharp v1.0.1-beta.12
⚖️ Licensing correction
The entire project is BUSL-1.1 — the emulator core (RP2040Sharp) and every package — converting to MIT on the Change Date. The core is no longer MIT. MIT is retained in LICENSE only as attribution for the rp2040js-derived (© Uri Shaked) portions of the core.
All four packages now publish under BUSL-1.1.
🤖 Generated with Claude Code
v1.0.1-beta.11
RP2040Sharp v1.0.1-beta.11
🐛 Fix
- ARMv6-M exception priority model — a GPIO IRQ no longer self-preempts. Corrects the Cortex-M0+ exception priority/preemption handling (
CortexM0Plus,SystemOps,PpbPeripheral); addsMicroPythonGpioIrqTests.
Verified: unit 516/0, new GPIO IRQ integration test 2/0. BUSL Change Date stamped to release + 4 years (rolling).
🤖 Generated with Claude Code
v1.0.1-beta.10
RP2040Sharp v1.0.1-beta.10
⚙️ CI / Licensing
- First release built with the rolling BUSL Change Date automation: the packaged license
Change Dateis now stamped to release date + 4 years at pack time, so every version gets its own full 4-year window before converting to MIT.
Dual model unchanged: RP2040Sharp core is MIT; RP2040Sharp.TestKit, RP2040Sharp.Wireless, RP2040Sharp.NanoFramework.TestKit are BUSL-1.1.
🤖 Generated with Claude Code
v1.0.1-beta.9
RP2040Sharp v1.0.1-beta.9
⚖️ Licensing (clarification only)
Sharpens the BUSL-1.1 commercial-use exception — no functional code change:
- The Commercial Use definition (a)/(b)/(c) is now authoritative; the free-use list (personal / hobby / educational / academic / evaluation / OSS) is subordinate to it.
- Uniform Change Date 2030-07-11 → converts to MIT (per-version).
Dual model unchanged: RP2040Sharp core is MIT; RP2040Sharp.TestKit, RP2040Sharp.Wireless, RP2040Sharp.NanoFramework.TestKit are BUSL-1.1.
🤖 Generated with Claude Code
v1.0.1-beta.8
RP2040Sharp v1.0.1-beta.8
✨ Changes
- RTC and SSI peripheral corrections.
- DREQ-paced DMA:
OnRxPushnow fires fromInjectRxData. - New integration coverage: CYW43 HTTP RX, FreeRTOS kernel, MicroPython REPL, PyMCU-vs-MicroPython benchmark.
- Built on top of the
NfClr.Coreextraction + Trusted Publishing (1.0.1-beta.6).
Supersedes v1.0.1-beta.7, which was tagged from a stale base and has been withdrawn.
⚖️ Licensing (unchanged dual model)
| Package | License |
|---|---|
RP2040Sharp (core) |
MIT |
RP2040Sharp.TestKit |
BUSL-1.1 → MIT on 2030-06-25 |
RP2040Sharp.Wireless |
BUSL-1.1 → MIT on 2030-06-25 |
RP2040Sharp.NanoFramework.TestKit |
BUSL-1.1 → MIT on 2030-06-25 |
📦 NuGet
All four packages @ 1.0.1-beta.8.
🤖 Generated with Claude Code
Pre-Release v1.0.1-beta.6
Follow-up to v1.0.1-beta.5.
This release extracts the chip-agnostic nanoCLR introspection into a shared package and
moves publishing to NuGet Trusted Publishing. Licensing is unchanged — only the RP2040Sharp
core is MIT; the rest are BUSL-1.1.
🔧 Changed
- Extracted the nanoCLR introspection into
NfClr.Core.
ClrInspector,ClrLayout, the heap walk andClrSessionnow live once in the shared
NfClr.Corepackage (1.0.0-beta.1).RP2040Sharp.NanoFramework.TestKitkeeps only the
RP2040IClrMemory/IClrHostadapter (Rp2040ClrHost/Rp2040ClrMemory) and depends on
NfClr.Corevia PackageReference.NanoClrHarnessis now a thin facade overClrSession;
firmware symbols, layout and checksums derive from the nanoCLR ELF/DWARF when present. - Publishing migrated to NuGet Trusted Publishing (OIDC) — short-lived keys minted from the
GitHub OIDC token, no long-livedNUGET_API_KEY.
📦 Packages
# MIT core
dotnet add package RP2040Sharp --version 1.0.1-beta.6
# BUSL-1.1
dotnet add package RP2040Sharp.TestKit --version 1.0.1-beta.6
dotnet add package RP2040Sharp.Wireless --version 1.0.1-beta.6
dotnet add package RP2040Sharp.NanoFramework.TestKit --version 1.0.1-beta.6 # now depends on NfClr.CoreFull changelog: https://github.com/PyMCU/RP2040Sharp/blob/master/CHANGELOG.md
Pre-Release v1.0.1-beta.5
Follow-up to v1.0.1-beta.4
that fixes the nanoFramework TestKit package name. Same licensing model: only the
RP2040Sharp core is MIT; RP2040Sharp.TestKit, RP2040Sharp.Wireless and
RP2040Sharp.NanoFramework.TestKit are BUSL-1.1 (converts to MIT on 2030-06-25).
🔧 Changed
- Renamed the nanoFramework TestKit package
RP2040Sharp.TestKit.NanoFramework→
RP2040Sharp.NanoFramework.TestKit— the previous id had its segments reversed. The
rename is full and consistent:- package id, assembly (
RP2040Sharp.NanoFramework.TestKit.dll) - namespaces:
RP2040.NanoFramework.TestKit/…SourceGen→
RP2040Sharp.NanoFramework.TestKit/…SourceGen - bundled NanoSymbols analyzer + the
buildTransitivetargets file
- package id, assembly (
⚠️ Migration (for nanoFramework TestKit users)
- dotnet add package RP2040Sharp.TestKit.NanoFramework
+ dotnet add package RP2040Sharp.NanoFramework.TestKit- using RP2040.NanoFramework.TestKit;
+ using RP2040Sharp.NanoFramework.TestKit;The old RP2040Sharp.TestKit.NanoFramework package (beta.2–beta.4) is unlisted.
📦 Packages
# MIT core
dotnet add package RP2040Sharp --version 1.0.1-beta.5
# BUSL-1.1
dotnet add package RP2040Sharp.TestKit --version 1.0.1-beta.5
dotnet add package RP2040Sharp.Wireless --version 1.0.1-beta.5
dotnet add package RP2040Sharp.NanoFramework.TestKit --version 1.0.1-beta.5Full changelog: https://github.com/PyMCU/RP2040Sharp/blob/master/CHANGELOG.md
Pre-Release v1.0.1-beta.4
Follow-up to v1.0.1-beta.3
that finishes the Wireless rename so the published package is internally consistent. Same
licensing model: only the RP2040Sharp core is MIT; RP2040Sharp.TestKit,
RP2040Sharp.Wireless and RP2040Sharp.TestKit.NanoFramework are BUSL-1.1 (license
file; free for individuals/personal/education/research/evaluation/open-source — Commercial
Use, i.e. enterprise CI/CD or revenue-generating products/services, needs a license;
converts to MIT on 2030-06-25).
🔧 Changed
RP2040Sharp.Wireless: assembly and namespaces renamed to match the package id.- DLL:
RP2040.Wireless.dll→RP2040Sharp.Wireless.dll - Namespaces:
RP2040.Wireless.Ble/RP2040.Wireless.Cyw43→
RP2040Sharp.Wireless.Ble/RP2040Sharp.Wireless.Cyw43
- DLL:
⚠️ Breaking (only for RP2040Sharp.Wireless consumers)
Update your using directives:
- using RP2040.Wireless.Cyw43;
- using RP2040.Wireless.Ble;
+ using RP2040Sharp.Wireless.Cyw43;
+ using RP2040Sharp.Wireless.Ble;📦 Packages
# MIT core
dotnet add package RP2040Sharp --version 1.0.1-beta.4
# BUSL-1.1
dotnet add package RP2040Sharp.TestKit --version 1.0.1-beta.4
dotnet add package RP2040Sharp.Wireless --version 1.0.1-beta.4
dotnet add package RP2040Sharp.TestKit.NanoFramework --version 1.0.1-beta.4Full changelog: https://github.com/PyMCU/RP2040Sharp/blob/master/CHANGELOG.md
Pre-Release v1.0.1-beta.3
Re-cut of 1.0.1-beta.2, which only partially published. This release ships the full
BUSL-1.1 package set with a clean licensing and naming model, plus the CYW43439
wireless stack, a second bootrom revision, and a nanoFramework integration-test harness.
No breaking changes — the public API remains stable under
Semantic Versioning. Everything from
v1.0.1-beta.1 still
applies.
🔒 Licensing
Only the RP2040Sharp emulator core stays MIT. Every other package —
RP2040Sharp.TestKit, RP2040Sharp.Wireless, and RP2040Sharp.TestKit.NanoFramework —
is BUSL-1.1, shipped as a license file with a generous Additional Use Grant:
- Free for individuals and for personal, hobby, educational, academic-research,
evaluation, and open-source use. - Commercial Use — using the packages in enterprise CI/CD (automated build/test
pipelines run by or for a for-profit organization) or in products/services that
generate revenue — requires a separate commercial license. - Change Date 2030-06-25 (4 years): on that date the BUSL packages convert to MIT.
✨ Added
RP2040Sharp.Wireless(BUSL-1.1) — firmware-agnostic CYW43439 Wi-Fi + Bluetooth LE
virtualization for the Raspberry Pi Pico W: the gSPI bus (bit-banged through PIO), the
SDIO backplane and firmware download, the WHD/SDPCM control + Ethernet data plane, and
the BT HCI shared-bus transport. Unmodified firmware (pico-sdk, MicroPython,
CircuitPython) runs in STA and SoftAP modes against a virtual access point; BLE
advertises/scans/connects and relays GATT between virtual devices.RP2040Sharp.TestKit.NanoFramework(BUSL-1.1) — boot a deployed .NET nanoFramework
app on the emulator and assert against it from xUnit: native-function-by-symbol runs,
managed static and instance fields read by name,RunUntila managed method/variable,
and a native-checksum compatibility guard. A bundled NanoSymbols source generator
(shipped as an analyzer, wired by abuildTransitivetargets file) emits a
strongly-typed symbols class for the app's methods and static fields.- B2 bootrom + revision selection, PIO FIFO probe, and an emulator strict mode
that surfaces silent accuracy gaps.
🔧 Changed
RP2040Sharp.TestKitis now BUSL-1.1 (was MIT).- Renamed the Wireless package
RP2040.Wireless→RP2040Sharp.Wirelessfor a
consistentRP2040Sharp.*id prefix. - Renamed the solution
RP2040.sln→RP2040Sharp.sln. - BUSL packages ship the license as a file (
LICENSE-BUSL.txt) instead of an SPDX
expression, which nuget.org does not accept for BUSL-1.1.
🐛 Fixed
- SSI direct-command flash RX so the bootrom/CLR flash-access path works.
- PIO RESET gating for PIO blocks.
- USB CDC OUT delivery moved to a push model;
EP_ABORTno longer drops deferred
completions.
⚠️ Note on 1.0.1-beta.2
1.0.1-beta.2 published only partially and is yanked/superseded by this release. Use
1.0.1-beta.3.
📦 Packages
# MIT core
dotnet add package RP2040Sharp --version 1.0.1-beta.3
# BUSL-1.1
dotnet add package RP2040Sharp.TestKit --version 1.0.1-beta.3
dotnet add package RP2040Sharp.Wireless --version 1.0.1-beta.3
dotnet add package RP2040Sharp.TestKit.NanoFramework --version 1.0.1-beta.3Full changelog: https://github.com/PyMCU/RP2040Sharp/blob/master/CHANGELOG.md