Ask Embedder to capture and decode SPI, I²C, UART, CAN, USB, and 20 other digital protocols
In debug mode, Embedder can drive a Saleae or Digilent logic analyzer to capture digital signals, decode them as protocol frames, and surface the results in the Logic tab of the Console panel (VS Code extension and standalone app). Describe what you want to see — “capture I²C”, “show me the SPI frames” — and the agent handles the rest.
Logic analyzer support is in beta. Both vendors are supported through one agnostic API; the prompts you write are the same either way.
Install Saleae Logic 2 and enable the Automation API:
Open Logic 2.
Click the Automation button at the bottom right.
In the popup, toggle Automation Server to ON.
Enabling the Saleae Logic 2 Automation API
Embedder installs the logic2-automation Python package automatically on first use.
Install Digilent WaveForms. Embedder installs dwfpy automatically on first use. The same Analog Discovery 3 also serves as an oscilloscope.
3
Wire your probes
Connect digital channels to your DUT signals. Note which channel index goes to which signal — you’ll mention them in your prompt.
Match the analyzer’s threshold to your DUT’s logic level (Saleae supports 0.0, 1.2, 1.8, 3.3 V; AD3 has a fixed threshold). 1.8 V signals at a 3.3 V threshold capture nothing.
4
Set up the desktop app correctly
Saleae: Logic 2 must be running with the Automation API enabled — Embedder talks to the live app over port 10430. Don’t quit Logic 2 before prompting.
Digilent: WaveForms must be closed. The AD3 only accepts one process at a time; if WaveForms has the device open, Embedder’s dwfpy will fail to claim it.
> capture 2 seconds of I²C on SDA=channel 0, SCL=channel 1, decode it, and show me the addresses
Embedder driving a Saleae capture and decoding the result
Capture SPI without setting it up:
embedder
> the SPI flash isn't responding — capture the bus and tell me what's happening
If the agent doesn’t know your wiring, it’ll ask. Include channel assignments in your prompt to skip the question.UART at a non-standard baud:
embedder
> capture UART on channel 0 at 230400 baud for 5 seconds and decode it
Trigger on an event (Digilent only):
embedder
> wait for a rising edge on channel 4, then capture I²C for 1 second
Saleae captures are timed only — for cross-tool triggers, see Combined workflows.Catch an intermittent bug:
embedder
> start a manual capture of CAN, I'll let it run while I reproduce the fault
The agent starts an open-ended capture and waits. When you say “stop the capture and decode it”, it finalizes and exports.Decode a less-common protocol:
embedder
> decode the LIN bus on channel 0 at 19200 baud, version 2.x
The agent writes a Python script that captures the requested channels, attaches a protocol decoder, and exports CSVs (decoded frames in hex) plus a native capture file. Captures auto-publish to the Logic tab of the Console panel (VS Code extension and standalone app) with waveform + decoded frames side by side, and persist under .embedder/captures/<sessionId>/<captureId>/ so you can come back to them later. TUI users get the same persisted files but no interactive chart.
Check the threshold. Capturing 1.8 V signals at a 3.3 V threshold (default) gives a flat zero. On Saleae, set it explicitly: “use a 1.8V threshold”. On AD3, use a level shifter.
Decoded frames look like garbage
Wrong baud / clock / bits. UART defaults to 115200 8N1; SPI defaults to 8 bits per transfer. Mention the actual settings in your prompt.
Sample rate auto-snapped
The capture helper auto-snaps unsupported rates to the nearest valid rate and warns. If you need more bandwidth, ask: “use the maximum supported sample rate for this device”.
Capture immediately fails
For Saleae, Logic 2 must be running with the Automation Server toggled on (Automation button in the bottom right). For Digilent, the WaveForms desktop app must be closed — the AD3 only accepts one process at a time.