~/projects/edgeflasher

EdgeFlasher

Een eigen SWD-programmer en I²C-tool voor Nordic nRF54L15: een RP2040 als CMSIS-DAP-probe, een card-edge connector om boards direct in te steken, en een desktop-app erbij. A custom SWD programmer and I²C tool for Nordic nRF54L15: an RP2040 as CMSIS-DAP probe, a card-edge connector to plug boards straight in, and a companion desktop app.

EdgeFlasher-board van bovenaf: groene print met zwarte card-edge connector links, RP2040 in het midden, USB-C onderaan
EdgeFlasher DEV, rev 2.0EdgeFlasher DEV, rev 2.0

Waarom

Er staan meerdere projecten op stapel die draaien op het nRF-platform van Nordic Semiconductor. Voor al die boards wilde ik één devkit die programmeren, debuggen en testen simpel maakt: board erin, knop indrukken, klaar. Geen gepiel met losse draadjes en een rij command-line tools.

Hardware

Het hart is een RP2040 met 2 MB flash en een 12 MHz-kristal. Hij meldt zich over USB-C als standaard CMSIS-DAP-debugprobe, met daarnaast een USB-I²C-interface.

Close-up van de RP2040 (U2) met flash (U3), kristal (Y1), niveauvertalers en de RESET- en BOOT-knoppen
RP2040, W25Q16JV, 12 MHz

Het target draait op zijn eigen spanning, ergens tussen 1,8 en 3,6 V. Daarom zit er tussen probe en target een laag niveauvertalers. In totaal zitten er 8 IC's op het board:

refchipfunctie
U1USBLC6-2P6ESD-bescherming van de USB-datalijnen
IC1AP2112K-3.33,3 V-spanningsregelaar
U2RP2040Microcontroller voor de debugprobe en de USB-I²C-interface
U3W25Q16JVFlashgeheugen voor de firmware (16 Mbit / 2 MB)
U4TXU0304Vertaling van signaalspanningen tussen probe en target
U5SN74LVC1G125Signaalbuffer met uitschakelbare uitgang
U6TCA9517I²C-buffer en niveauvertaler
U7SN74AXC1T45Enkelkanaals niveauvertaler

Daarnaast nog twee BSS138-MOSFETs (Q1, Q2) en een TARGET PWR-jumper om het target vanuit de probe te voeden.

De connector

De naam zegt het al: het target heeft zelf edge-fingers en gaat direct in een 20-polige card-edge connector. Geen pogo-pins en geen kabeltjes. En het is poka-yoke: hoe je een board er ook in steekt, het werkt altijd en er kan niks stuk.

Close-up van de zwarte 20-polige card-edge connector met vergulde veercontacten
20-polige card-edge connector

Waarom "nRF54 ONLY"?

Er bestaat ook een oudere serie EdgeFlashers: de MicroFlasher. Die heeft alleen een CH340 aan boord, een USB-naar-serieel-chip, en kan dus geen SWD. Om verwarring tussen de twee te voorkomen staat de waarschuwing op beide kanten van de print.

Firmware & Studio

De probe-firmware is geschreven in C op Zephyr. Bij de hardware hoort EdgeFlasher Studio, een native app in Swift: "Flash, poke and probe your nRF54L15, no Python required."

Met Studio verbind en identificeer je probe en target, flash je firmware, maak je een vergrendelde chip weer vrij met Erase All & Unlock, scan en lees je de I²C-bus en update je de firmware van de probe zelf. De knop Identify laat de LED op het board knipperen, handig als er meerdere probes aan je laptop hangen.

Screenshot van EdgeFlasher Studio met probe-info, targetstatus en een log
EdgeFlasher Studio 1.0

In één keer goed

Dit is mijn eerste 4-laags board, en verbazingwekkend genoeg werkte de eerste revisie meteen.

Achterkant

74 componenten in totaal, waarvan 41 op de onderkant: vooral passives. En natuurlijk het logo in de silkscreen.

Why

Several upcoming projects run on Nordic Semiconductor's nRF platform. For all of those boards I wanted one devkit that makes programming, debugging and testing simple: plug the board in, press a button, done. No fiddling with loose wires and a stack of command-line tools.

Hardware

At its heart is an RP2040 with 2 MB of flash and a 12 MHz crystal. Over USB-C it shows up as a standard CMSIS-DAP debug probe, plus a USB-I²C interface.

Close-up of the RP2040 (U2) with flash (U3), crystal (Y1), level translators and the RESET and BOOT buttons
RP2040, W25Q16JV, 12 MHz

The target runs at its own voltage, anywhere from 1.8 to 3.6 V. That's why there's a layer of level translators between probe and target. The board has 8 ICs in total:

refchipfunction
U1USBLC6-2P6ESD protection for the USB data lines
IC1AP2112K-3.33.3 V regulator
U2RP2040Microcontroller for the debug probe and the USB-I²C interface
U3W25Q16JVFirmware flash (16 Mbit / 2 MB)
U4TXU0304Voltage translation between probe and target
U5SN74LVC1G125Signal buffer with tri-state output
U6TCA9517I²C buffer and level translator
U7SN74AXC1T45Single-channel level translator

Plus two BSS138 MOSFETs (Q1, Q2) and a TARGET PWR jumper to power the target from the probe.

The connector

The name gives it away: the target has its own edge fingers and goes straight into a 20-position card-edge connector. No pogo pins, no cables. And it's poka-yoke: whichever way you plug a board in, it always works and nothing can break.

Close-up of the black 20-position card-edge connector with gold spring contacts
20-position card-edge connector

Why "nRF54 ONLY"?

There's also an older series of EdgeFlashers: the MicroFlasher. Those only carry a CH340, a USB-to-serial chip, so they can't do SWD. To avoid mixing the two up, the warning is printed on both sides of the board.

Firmware & Studio

The probe firmware is written in C on Zephyr. The hardware comes with EdgeFlasher Studio, a native app written in Swift: "Flash, poke and probe your nRF54L15, no Python required."

Studio lets you connect and identify probe and target, flash firmware, recover a locked chip with Erase All & Unlock, scan and read the I²C bus, and update the probe's own firmware. The Identify button blinks the LED on the board, handy when several probes are plugged into your laptop.

Screenshot of EdgeFlasher Studio showing probe info, target status and a log
EdgeFlasher Studio 1.0

Right first time

This is my first 4-layer board, and surprisingly enough the first revision worked straight away.

Back side

74 components in total, 41 of them on the bottom: mostly passives. And of course the logo in the silkscreen.