Hardware bugs rarely respect tool boundaries. A current spike happens because of a firmware code path. An I²C NACK looks fine on the protocol decoder until you scope the rise time. In debug mode, Embedder can mix GDB, the logic analyzer, the scope, and the power analyzer in a single script — and you can ask for it in plain language. This page shows three example multi-tool prompts and what the agent does for each.Documentation Index
Fetch the complete documentation index at: https://docs.embedder.com/llms.txt
Use this file to discover all available pages before exploring further.
Scenario 1: Sleep-current regression on a BLE board
Symptom: sleep current rose from 8 µA to 380 µA after a recent commit. Prompt:embedder
- Triggers a Joulescope capture only during the sleep window using the firmware’s GPI0 marker.
- Uses the JS220’s hardware UART decoder on GPI1 to decode the DUT’s log lines in parallel —
enter_sleep/wakemarkers will line up with the current trace. - Connects GDB non-intrusively mid-capture so it can read the RTC peripheral and
g_last_wakeup_sourcewithout disturbing the sleep state. - Reports avg sleep current, the decoded UART bytes, and the register values.
enter_sleep during the high-current window, a peripheral didn’t power down. If g_last_wakeup_source is unexpected, an interrupt is firing repeatedly.
Scenario 2: Intermittent I²C NACK during sensor bring-up
Symptom: the sensor returns valid data 95% of the time, NACKs the rest. Pure software state inspection didn’t reveal anything. Prompt:embedder
- Connects GDB and arms the breakpoint.
- Starts a manual logic-analyzer capture with an I²C decoder.
- Continues execution and waits.
- When the error fires, reads the error register, exports the analyzer table, and saves the capture file.
- Reports the failing transaction byte and links to the saved capture.
Scenario 3: Brown-out under motor load
Symptom: the MCU resets when the motor PWM kicks in. You suspect a rail droop, but it could also be a software fault. Prompt:embedder
- Arms a single-shot droop trigger on the Siglent and captures the rail.
- Captures PWM and Hall sensor lines on the Saleae in parallel.
- After the fault, connects GDB non-intrusively and reads
SCB->CFSR(0xE000ED28) andSCB->HFSR(0xE000ED2C). - Reports the rail trace, the digital capture path, and the decoded fault registers.
CFSR shows a UsageFault (UNDEFINSTR, UNALIGNED), it’s software — set a breakpoint on the fault handler and read the stacked PC.
Tips for multi-tool prompts
- Mention every observable you want. “Capture I²C and read the error register” is much clearer than “debug the I²C bus” — the agent doesn’t have to guess what counts as success.
- Mention the trigger. If you want the capture to start on a GPIO edge, a GDB breakpoint, or a timed window, say so. Otherwise the agent picks a default.
- Say “without resetting” if you don’t want the agent to flash or reset mid-investigation. The non-intrusive attach pattern keeps the chip running.
- Order matters when describing tools. “Set a breakpoint, then start the capture” is sequential; “start the capture, then continue execution” sets up monitoring before the action.
What makes multi-tool workflows possible
Behind the scenes, debug mode wires a few primitives together that make it natural to chain instruments:- One Python prelude per script — every connected instrument’s helpers are available without imports.
- Shared capture timeline — Logic and Power tabs publish from one coordinator, so simultaneous captures share a timebase in the Console panel (VS Code extension and standalone app).
- Joulescope GPI triggers (
gpi0–gpi3) — capture only the window of interest by firmware-driven GPIO edges. - JS220 hardware UART decoder — DUT log lines decoded in parallel with current sampling.
- Digilent external triggers (
external1–external4,t1,t2) — slave a Digilent logic capture to an external GPIO edge. - Non-intrusive GDB attach — register snapshots without resetting a live target.
When to ask for a combined workflow
Reach for multi-tool prompts when:- You need temporal correlation across instruments (current event ↔ log line ↔ register value).
- The bug is intermittent and you want one trigger to freeze every observable at once.
- The hypothesis spans the hardware / software boundary — e.g. “is this a brown-out or a software fault?”.
Next steps
Debug mode overview
Back to the OHPV loop.
Best practices
General tips for keeping sessions focused.