{"id":50276901,"url":"https://github.com/dunknowcoding/arduinonrf","last_synced_at":"2026-05-27T21:02:41.121Z","repository":{"id":358978874,"uuid":"1226753785","full_name":"dunknowcoding/ArduinoNRF","owner":"dunknowcoding","description":"(Beta) Third-party Arduino board library for Arduino IDE 2.x. Designed specially for on-sale NRF development boards","archived":false,"fork":false,"pushed_at":"2026-05-19T21:47:55.000Z","size":434,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T00:41:22.554Z","etag":null,"topics":["arduino-ide-library","clone","e-commerce","nrf52833","nrf52840"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dunknowcoding.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-01T19:47:28.000Z","updated_at":"2026-05-19T21:47:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dunknowcoding/ArduinoNRF","commit_stats":null,"previous_names":["dunknowcoding/arduinonrf"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/dunknowcoding/ArduinoNRF","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunknowcoding%2FArduinoNRF","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunknowcoding%2FArduinoNRF/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunknowcoding%2FArduinoNRF/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunknowcoding%2FArduinoNRF/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dunknowcoding","download_url":"https://codeload.github.com/dunknowcoding/ArduinoNRF/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dunknowcoding%2FArduinoNRF/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33583399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino-ide-library","clone","e-commerce","nrf52833","nrf52840"],"created_at":"2026-05-27T21:02:38.569Z","updated_at":"2026-05-27T21:02:41.113Z","avatar_url":"https://github.com/dunknowcoding.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ArduinoNRF\n\n### An Arduino core for budget nRF52840 clones — with *hands-free uploads* and *single-cable source debugging*\n\n[![platform](https://img.shields.io/badge/platform-Arduino-00979D)](https://www.arduino.cc/)\n[![mcu](https://img.shields.io/badge/MCU-nRF52840%20%2F%20nRF52833-0a7bbb)](https://www.nordicsemi.com/)\n[![boards](https://img.shields.io/badge/boards-10-success)](#-supported-boards)\n[![version](https://img.shields.io/badge/version-0.0.1-blue)](docs/release/RELEASE_NOTES_v0.0.1.md)\n[![upload](https://img.shields.io/badge/upload-no%20button%2C%20one%20cable-brightgreen)](#-hands-free-uploads)\n[![debug](https://img.shields.io/badge/debug-USB%20CDC%20GDB%20stub-orange)](#-single-cable-debugging)\n\n*Flash and debug an AliExpress ProMicro nRF52840 — the kind with no reset button and no SWD header — over a single USB cable, straight from the Arduino IDE.*\n\n\u003c/div\u003e\n\n---\n\n## Why this core exists\n\nThe cheap nRF52840 clones (AliExpress \"ProMicro nRF52840\", SuperMini, nRFMicro, …) are fantastic value, but they usually ship without workable board library for Arduino IDE 2.x, which makes those boards extremely difficult to use and debug. Widely-used ProMicro even comes without reset buttons and usable SWD pins (it does has the pads). **NiusRobotLab** developed this easy-to-use, Arduino IDE compatible third-party board library that makes every upload automatically as a double-tap-reset dance, and source-level debugging possible merely using **single USB cable**. **No debugger needed any more!** If you would like to support our work, test this repo with your own nRF board then tell me any issues or possible fix.\n\n## ✨ Highlights\n\n| | Feature | What it means for you |\n|---|---|---|\n| 🔌 | **Hands-free uploads** | Click **Upload**. The firmware reboots itself into the bootloader over the USB-CDC maintenance port — **no button, no double-reset, no jumper**. |\n| 🐞 | **Single-cable debugging** | Click **Debug** in Arduino IDE 2 and get **breakpoints, step in/over/out, registers, memory, watchpoints and pause** — all over the *same* USB cable, with **no external SWD/J-Link probe**. |\n| 🧩 | **10 boards, one package** | ProMicro (*verified*), nice!nano v2, SuperMini, nRFMicro, XIAO-like, dev boards and more — installed from one Board Manager URL. |\n| 📋 | **Truth-oriented metadata** | ADC, PWM, BLE and bus capabilities are documented as *verified*, not aspirational. No silent overclaiming. |\n| 🛡️ | **Robust upload pipeline** | Double-click-safe, coexists with a live debug session, rejects the wrong COM with a clear message, and caches slow port scans for speed. |\n\n---\n\n## 🚀 Quick start\n\n### 1. Install the core\n\nIn **Arduino IDE → Settings → Additional Boards Manager URLs**, add:\n\n```raw\nhttps://raw.githubusercontent.com/dunknowcoding/ArduinoNRF/main/package_arduinonrf_index.json\n```\n\nThen open **Boards Manager**, search **ArduinoNRF**, and install. (CLI: `arduino-cli core install arduinonrf:nrf52 --additional-urls \u003curl above\u003e`.)\n\n### 2. Pick your board\n\n**Tools → Board → ArduinoNRF nRF52** → e.g. *AliExpress ProMicro nRF52840*. Select the board's COM port under **Tools → Port**.\n\n\u003e 💡 With `usbcdc=enabled` the board shows **two** COM ports: a **user** port (your `Serial`) and a **service/maintenance** port. Use the **service** port (usually the lower COM index / `MI_00`) for uploads and debugging — picking the user port is rejected with a clear message.\n\n### 3. Upload\n\nHit **Upload**. The first time the board is in application mode, the core's 1200-bps touch reboots it into the bootloader automatically and the new firmware streams in. No button press. 🎉\n\n### 4. Debug (optional, one cable)\n\nSelect the `usbgdbstub` build profile, open `examples → UsbGdbStubBreakpoint`, and press **Debug**. Set breakpoints in the gutter and step through your code — the GDB stub lives in the firmware and talks over the maintenance CDC. See **[docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md](docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md)**.\n\n---\n\n## 🔌 Hands-free uploads\n\nMost clone cores can only enter the bootloader via a physical double-reset. ArduinoNRF's firmware watches the **maintenance CDC** for the classic 1200-bps \"touch\" and reboots itself into the UF2/serial-DFU bootloader via `SYSRESETREQ` — so `arduino-cli upload` (and the IDE Upload button) work with **no hands on the board**.\n\nThe host-side pipeline (`upload.ps1`) is hardened against the messy real world:\n\n- **Double-click safe** — a per-port lock makes a second Upload fail fast *before* any touch, so two uploads can never interleave and corrupt flash.\n- **Coexists with debugging** — if a debug session holds the port, the upload signals the debug bridge to release it, then proceeds.\n- **Wrong-port guard** — selecting the *user* CDC instead of the service CDC is rejected with an actionable message; your firmware is never touched.\n- **Fast** — slow Windows PnP enumerations are cached during the stable pre-touch window (~3 s saved per upload).\n\nSee **[docs/uploads/hands_free_upload.md](docs/uploads/hands_free_upload.md)** and **[docs/platform/UPLOAD_BEHAVIOR.md](docs/platform/UPLOAD_BEHAVIOR.md)**.\n\n## 🐞 Single-cable debugging\n\nA small GDB stub compiled into the firmware uses the Cortex-M **DebugMonitor** exception plus the **FPB** (hardware breakpoints) and **DWT** (watchpoints). A host bridge proxies Arduino IDE 2's `cortex-debug` over the maintenance USB-CDC port, so you get a full debug experience **without any external probe**:\n\n✅ breakpoints · ✅ single-step (in/over/out) · ✅ registers \u0026 memory · ✅ data watchpoints · ✅ pause/halt · ✅ peripheral (SVD) reads · ✅ user `Serial` keeps working concurrently on the second CDC\n\n\u003e Verified end-to-end on the AliExpress ProMicro nRF52840 clone. Boards that expose real SWD pads can also use the classic OpenOCD/CMSIS-DAP route.\n\nSee **[docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md](docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md)**.\n\n---\n\n## 🧩 Supported boards\n\n| Board | MCU | Notes |\n|---|---|---|\n| **AliExpress ProMicro nRF52840** | nRF52840 | Primary target — hands-free upload **and** single-cable debug verified |\n| nice!nano v2 | nRF52840 | Reference-backed LFCLK + secondary-bus metadata |\n| SuperMini nRF52840 | nRF52840 | Check VCC behavior under USB power |\n| nRFMicro nRF52840 | nRF52840 | Reference-backed secondary-bus metadata |\n| Mini nRF52840 | nRF52840 | |\n| XIAO-like nRF52840 | nRF52840 | |\n| Generic nRF52840 Dev Board | nRF52840 | |\n| Generic nRF52833 Dev Board | nRF52833 | |\n| Pitaya Go nRF52840 | nRF52840 | |\n| nRF52840 USB Dongle | nRF52840 | |\n\nPer-board reference docs live in **[docs/boards/](docs/boards/)**; the support matrix is in **[docs/platform/BOARD_SUPPORT_STATUS.md](docs/platform/BOARD_SUPPORT_STATUS.md)**.\n\n## ⚙️ Capabilities \u0026 honest limits\n\n| Area | Status |\n|---|---|\n| **GPIO / Serial / SPI / Wire** | ✅ Supported; global `Wire1`/`SPI1` exist but stay disabled on boards without verified secondary-bus pins |\n| **ADC** | ✅ SAADC-backed `analogRead`, plus `analogReadVDD()` / `analogReadVDDHDIV5()` |\n| **PWM** | ⚠️ Single shared `PWM0` group — up to 4 routed outputs sharing one frequency domain |\n| **BLE** | ⚠️ Advertising-only self-hosted facade — **not** a full connection-oriented GATT stack |\n| **EEPROM** | ✅ Emulated (see EEPROM examples) |\n| **Upload** | ✅ Hands-free serial-DFU on the maintenance CDC; SWD/OpenOCD also available |\n| **Debug** | ✅ USB-CDC GDB stub (no probe) on ProMicro; SWD route for boards with pads |\n\n**Gaps vs. mature Adafruit/Nordic cores:** no SoftDevice menu or Bluefruit/TinyUSB BLE stack; not every clone USB profile is claimed interchangeable (the validated path is `promicroserialnosd`). With `usbcdc=disabled` the board stays uploadable *from the bootloader* but its in-app touch is unreliable — **keep `usbcdc=enabled`** for the hands-free workflow.\n\n---\n\n## 📚 Documentation\n\nEverything beyond this README lives under **[docs/](docs/)** — start at **[docs/README.md](docs/README.md)** for the full index. Highlights:\n\n- 🧪 **[docs/VALIDATION.md](docs/VALIDATION.md)** — what's been tested on real hardware, and how to reproduce it\n- 🔼 **[docs/uploads/](docs/uploads/)** — hands-free, double-reset, and SWD-only upload routes\n- 🐞 **[docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md](docs/platform/ARDUINO_IDE2_USB_GDBSTUB.md)** — single-cable debug setup\n- 🧷 **[docs/platform/USB_1200_TOUCH_V1_FIX.md](docs/platform/USB_1200_TOUCH_V1_FIX.md)** — the firmware fixes behind hands-free upload\n- 🧩 **[docs/boards/](docs/boards/)** — per-board reference\n- 📦 **[docs/release/](docs/release/)** — release flow and notes\n\n## 🛠️ Repository layout\n\n```raw\nhardware/arduinonrf/nrf52/    # the Arduino platform: cores, variants, boards.txt, tools\nexamples/                     # ~50 examples incl. UsbGdbStub* and capability self-tests\ndocs/                         # all documentation (the only place docs live)\nscripts/ , tools/             # build, release, and hardware-validation helpers\npackage_arduinonrf_index.json # Board Manager index\n```\n\n## 🤝 Contributing \u0026 license\n\nIssues and PRs welcome at **[github.com/dunknowcoding/ArduinoNRF](https://github.com/dunknowcoding/ArduinoNRF)**. The guiding principle: **document what the hardware verifiably does** — if a capability isn't proven on a board, it isn't claimed.\n\n\u003e ℹ️ A formal open-source license has not yet been added to this repository. Until one is present, treat the code as \"all rights reserved\" and ask before redistributing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdunknowcoding%2Farduinonrf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdunknowcoding%2Farduinonrf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdunknowcoding%2Farduinonrf/lists"}