Ask Embedder to capture analog signals — clock, reset, rails, comm lines — over LAN/SCPI on a Siglent SDS800X HD
In debug mode, Embedder can drive a Siglent SDS800X HD bench scope over LAN to capture analog waveforms. Supported models: SDS802X HD, SDS804X HD, SDS812X HD, SDS814X HD, SDS822X HD, SDS824X HD. Captures auto-publish to the Power tab of the Console panel (VS Code extension and standalone app).
Oscilloscope support is in beta. The SDS800X HD family is fully supported. Other LXI / SCPI scopes may work for some features but aren’t fully verified — expect rough edges.
Embedder installs pyvisa and pyvisa-py automatically the first time you run a scope script — approve the install when prompted.
3
Connect the scope to LAN
Connect the scope to the same LAN as your host (Ethernet or Wi-Fi). Embedder browses mDNS (_lxi._tcp / _vxi-11._tcp / _scpi-raw._tcp) on every non-internal IPv4 NIC, so any LXI-compliant scope shows up in hardware_status under metadata.discoveredScopes with its vendor, model, serial, firmware, ip, and hostname.If discoveredScopes is empty (corporate Wi-Fi, AP isolation, mDNS blocked), set the IP directly:
export EMBEDDER_SCOPE_HOST=192.168.1.20
Read the scope’s IP from the front panel under Utility → Menu → I/O → LAN Config (DHCP is on by default). Quick reachability check: open http://<ip> in a browser and you should see the scope’s built-in LXI status page.
> connect to the SDS812X HD on the LAN, set channel 1 to 500mV/div DC, timebase 1ms/div, trigger on rising C1 at 1.5V, single-shot capture, and tell me the rise time
The agent arms a single-shot trigger, blocks until it fires, and reads the frozen acquisition. Rise time comes back via the scope’s built-in measurement.
Embedder driving an SDS812X HD capture in debug mode
Screenshot the scope display:
embedder
> grab a BMP screenshot of the current scope display and save it under /tmp/scope.bmp
Check rail integrity under load:
embedder
> probe VDD while I enable the radio peripheral. is the rail clean?
The agent records a high-rate analog trace, looks for droop or ringing, and reports min / max / avg.Measure interrupt latency:
embedder
> i toggle a GPIO at the start of EXTI0_IRQHandler. trigger on the rising edge of channel 1, capture both the trigger line and the GPIO, and tell me the latency.
You’ll need a debug GPIO toggle in your ISR; the agent computes the time delta from the captured trace.Verify SPI clock at high rate:
embedder
> capture SPI SCK on the SDS812X with the maximum memory depth — is the edge clean? are there reflections?
Use this when the logic analyzer is decoding garbage — signal-integrity failures look fine in the digital decode but show up clearly on the scope. The 12-bit ADC and longer memory depth surface ringing and overshoot that lower-resolution captures miss.Drop to raw SCPI:
embedder
> on the SDS812X, set memory depth to 100K with `:ACQ:MDEP 100K`, then run rise/fall measurements on channel 1
Reach for raw SCPI when the helper layer doesn’t cover what you need — the Siglent SDS Series Programming Guide (EN11G) is the full API reference.
The agent writes a Python script that opens a SCPI session over LAN, configures channels and timebase, arms the trigger, captures the waveform, and publishes the result to the Power tab. The chart is shared with power-analyzer traces, so you can correlate analog scope captures with current measurements on the same timeline.
Check that the scope is on the same LAN as your host and that you can open http://<ip> in a browser. If mDNS is blocked (corporate Wi-Fi, AP isolation), set EMBEDDER_SCOPE_HOST=<ip> and re-run hardware_status. If discoveredScopes shows the scope but reachable: false, follow the suggestedFix (typically a subnet alias like sudo ifconfig <iface> alias <ip>/<cidr>).
Trigger never fires
A single-shot capture times out after 5 s by default. Check the trigger source, level, and coupling, or ask the agent to use a longer timeout: “wait up to 30 seconds for the trigger”.
Trace clipped at the top or bottom
V/div is too coarse for the signal — the trace runs into the rails. Ask the agent to “drop V/div to 200 mV” or whatever fits. The opposite (V/div too fine) shows a flat-looking line because the signal is way bigger than the visible window.
Capture or screenshot looks wrong on a non-SDS800X HD scope
Some helpers are tuned for the SDS800X HD’s specifics. On other LXI / SCPI scopes those helpers may misparse data or fail — fall back to raw scope_query / scope_write calls and the vendor’s programming guide, or stick to a verified SDS800X HD model for full coverage.