SIGLENT SDS1104X-E — 100 MHz · 4 ch · 1 GSa/s · 14 Mpts — Trig'd

SDS1104X-E the four-channel bench scope, end to end

A 100 MHz, four-channel, 8-bit SPO oscilloscope built around two 1 GSa/s ADCs — C1+C2 share one, C3+C4 share the other — with a 7-inch 800×480 screen ruled 8 vertical × 14 horizontal divisions. Almost everything that surprises people about this instrument follows from those three facts: the ADC pairing sets your real sample rate, the 8 bits set your real resolution, and the 14-division grid (not the usual 10) sets every time-axis calculation you will ever write against it. This sheet covers the acquisition chain, the probing that decides whether any of it is true, the full SCPI surface, the on-disk binary format, and the traps — Siglent's own documentation plus the field knowledge it leaves out.

model SDS1104X-E · 4-channel bandwidth 100 MHz (−3 dB) sample rate 1 GSa/s (1 ch per ADC) · 500 MSa/s (both) memory 14 Mpts / 7 Mpts vertical 8-bit · 500 µV–10 V/div grid 8 × 10 14 div capture rate 100k wfm/s · 400k in Sequence ports LAN · USB-TMC · Trig-Out · SBUS
Fig. 1 — SDS1104X-E front panel · control locations SIGLENT SDS1104X-E Digital Oscilloscope 100 MHz · Quad 500 MSa/s · Dual 1 GSa/s 14 horizontal × 8 vertical divisions C1 C2 C3 C4 USB SBUS Intensity / Adjust push = Select Cursors Acquire Save Recall Measure Display Persist Utility Clear Sweeps Decode History Run Stop Auto Setup Default Navigate Vertical 1 2 3 4 Digital V ↔ mV push = Variable Math Ref Position push = Zero Horizontal s ↔ ns push = Zoom Roll Search ◀ Position ▶ push = Zero Trigger Setup Auto Norm Single Level push = 50% 1 2 3 4 All inputs 1 MΩ ∥ 17 pF · 400 Vpk Universal knob Turn to select · push to confirm push again for a numeric keypad Common function menus Cursors · Acquire · Save/Recall Measure · Display/Persist · Utility Clear Sweeps · Decode · History One press each — no menu diving Run/Stop · Auto Setup · Default Default is re-bindable to your own setup LCD display 7 in · 800 × 480 · 8 vertical × 14 horizontal divisions Menu softkeys + Menu on/off Six keys follow the on-screen strip; the round key hides it for more width Navigate + transport Step through time, history frames, or search events Trigger Setup · Auto · Norm · Single Level knob — push for 50 % Horizontal Scale — push for Zoom Position — push to zero delay Analog inputs C1–C4 1 MΩ ∥ 17 pF · 400 Vpk max C1+C2 share one ADC, C3+C4 the other Power USB host Screenshots, firmware, logs, setups SBUS — logic pod only Non-standard HDMI shell. Never plug in real HDMI. Probe comp · ground 1 kHz square wave for compensating every probe Vertical Scale — push for Variable Position — push to zero offset
Schematic, not to scale. Every knob on this panel is also a button: the push action is printed in orange beneath it. Numbering follows SIGLENT's own front-panel key in the Quick Start guide.

01 · The Instrument

Four facts about the hardware explain most of this scope's behaviour. Read them once; every later section assumes them.

Two ADCs, four channels

the pairing rule

The four-channel X-E has two 1 GSa/s, 8-bit ADCs and two 14 Mpts memory blocks. They are shared in fixed pairs:

C1 + C2ADC A · memory block A
C3 + C4ADC B · memory block B

One channel active per pair → that channel gets the whole converter: 1 GSa/s and up to 14 Mpts. Both channels of a pair active → the ADC interleaves: 500 MSa/s and 7 Mpts each.

The consequence nobody tells you

If you need two traces at full speed, put them on C1 and C3, not C1 and C2. Same two signals, twice the sample rate and twice the memory. Turning off an unused channel is not cosmetic — it doubles the acquisition quality of its partner.

Ask the scope, don't guess: SARA? returns the live sample rate, SANU? the point count actually acquired.

8 vertical × 14 horizontal divisions

the grid

Most scopes draw a 10-division time axis. This one draws 14. Every horizontal calculation shifts accordingly:

screen spant_span = TDIV × 14 not ×10 time of the first sample in a recordt₀ = −(TDIV × 14 / 2) time of sample ntₙ = t₀ + n / SARA trigger level range, internal±4.5 div from screen centre = ±4.5 × VDIV

Vertically the grid is the conventional 8 divisions, but the ADC codes span ±5 divisions — the waveform byte is centred at 128 with 25 codes per division, so the full 0–255 range covers 10.24 divisions. That is why signals slightly off-screen still decode correctly from a saved file.

Eight bits, and what that costs

vertical resolution

The ADC is 8-bit: 256 levels across 10.24 divisions, 25 codes per division. At 8 divisions of usable screen that is ~0.4 % of full scale per code. Real ENOB on any 8-bit scope lands nearer 5–7 bits once amplifier noise and distortion are counted.

Buying bits back

Fill the screenThe single biggest win. A trace using 6 of 8 divisions has 4× the resolution of one using 1.5.
ERES (HIGH_RES)Boxcar-filters oversampled data: +0.5, 1.5, 2, 2.5 or 3 bits, traded against bandwidth. Works on single-shot.
Average4–1024 acquisitions. Repetitive signals only, and only kills random noise — not distortion or jitter.
20 MHz BW limitFree noise reduction when your signal genuinely lives below 20 MHz.

ERES is real-time and single-shot-safe; Average needs a stable trigger and many identical events. Reaching for Average on a one-shot event gets you the event, once, un-averaged.

SPO: what the display is doing

capture rate

Super Phosphor is Siglent's fast acquisition-and-render engine: up to 100,000 wfm/s in normal mode, 400,000 wfm/s in Sequence. High capture rate is what makes rare glitches visible rather than merely triggerable.

Reading the intensity

256-level intensity grading — bright means "this happened often", dim means "rarely". Color temperature mode maps the same statistic to hue: red = frequent, blue = rare. Turn on Persist (1/5/10/30 s or Infinite) and an infrequent runt separates itself from the main trace by brightness alone.

Dead time still exists. Even at 100k wfm/s the scope is blind most of the time at slow timebases — Sequence mode exists precisely to shrink that gap between segments.

Model family · what you do and don't have

SDS1000X-E
ModelBWCh
SDS1104X-E100 MHz4
SDS1204X-E200 MHz4
SDS1202X-E200 MHz2 + EXT

Four-channel exclusives you own

Bode Plot II · Search & Navigate · web browser control · Label · hardware frequency Counter · Data Logger (Sample + Measure) · NTP · FFT Peaks & Markers · two USB Host ports · SBUS digital header · MSO and USB-AWG options.

What the four-channel gives up

There is no EXT trigger input — only the two-channel model has it. On the 1104X-E your trigger sources are C1–C4 and AC Line. Trigger externally by feeding the signal into a spare channel.

Rise time is bandwidth-bound: typical 3.5 ns on the 100 MHz models, 1.8 ns on the 200 MHz ones.

Options and how they arrive

Utility ▸ Options

Options are license codes keyed to the serial number, entered on the front panel: Utility ▸ Next Page ▸ Options ▸ Install, then type the key with the Universal Knob and press Press To Install. The same menu lists what is already active.

SLA101616 digital channels (MSO). External pod on the SBUS header + activation license.
SAG1021IUSB-powered isolated 25 MHz AWG module. Also the stimulus source for Bode Plot.
WLANUSB Wi-Fi adapter support: Utility ▸ IO Set ▸ Net Interface ▸ WLAN.

SBUS is not HDMI. The connector is a non-standard HDMI-shaped header for Siglent logic pods only. Plugging a real HDMI cable into it damages both devices.

02 · Front Panel

The X-E's design bet is that the ten things you do constantly should each be one button. Learning which knobs push is most of the fluency.

Every knob is also a button

push actions
Horizontal POSITIONpush → reset trigger delay to zero
Horizontal SCALEpush → enter/exit Zoom (delayed sweep)
Vertical POSITIONpush → zero that channel's offset
Trigger LEVELpush → set level to 50 % of the source (= SET50)
Universal Knobpush → confirm a selection, or open the numeric keypad for precise entry

The pop-up keypad on the Universal Knob is the fastest way to enter an exact frequency, threshold or time value anywhere in the menus.

The ten one-button shortcuts

no menu diving
Auto Setupguess vertical, timebase and trigger from the input
Defaultfactory setup — or your own saved setup, see below
Cursorsmanual or tracking cursors
Measureinstalls parameter measurements
Rolljump straight to roll mode (50 ms/div–100 s/div)
Historyreplay the last up-to-80,000 frames
Display/Persistpersistence and intensity grading
Clear Sweepreset persistence, averaging and statistics
Zoomdelayed sweep on the captured record
Printone-press screenshot to USB

Repoint the Default key

Save/Recall ▸ Save ▸ Type ▸ To Default Key stores your current setup behind the Default button. Probe ratios, channel colours, measurement set, trigger style — one press and the bench is back the way you like it. Recall the real factory state from Save/Recall ▸ Recall ▸ Factory Default.

First five minutes with a new scope

bring-up
1 · warm uppower on, wait 30 minutes before any accurate work 2 · self-calibrate with nothing connectedUtility ▸ Do Self Cal then press Single to start 3 · compensate every probe, on its own channelprobe tip → the square-wave pad, ground clip → the ground pad 4 · tell the scope the probe ratioChannel ▸ Probe ▸ 10X the scope cannot detect it 5 · give the clock a time sourceUtility ▸ Date/Time, or set an NTP server

Repeat step 2 whenever the room temperature moves 5 °C or more from the last calibration. It takes a minute and it is the difference between the DC gain spec and a vague number.

Labels and colours

four-channel only

Channel ▸ Label puts text against a trace — SW node, SCL, Vout. With four traces and a decode bus on screen this is the difference between a readable screenshot in a report and a coloured smear.

C1 yellow   C2 magenta   C3 cyan   C4 green — the same order as the probe rings, so colour-code your probe tips to match and never re-derive which trace is which.

03 · Probing

The single largest source of wrong answers on any bench. A 100 MHz scope with a careless ground lead is a 20 MHz scope that lies about overshoot. Almost none of this is in the Siglent manual.

PP510 · the probe in the box

shipped ×4
Attenuationswitchable 1X / 10X
Bandwidth10X: DC–100 MHz · 1X: a few MHz only, and unspecified
Input impedance1 MΩ (1X) / 10 MΩ (10X)
Input capacitance13–17 pF at 10X
Compensation range10–35 pF
RatingCAT II 300 V at 10X · CAT II 150 V at 1X
Cable130 cm

Leave it on 10X and leave the channel on 10X. The scope has no way to sense the switch — a mismatch silently scales every voltage, every measurement and every trigger level by ten.

Why 1X is a trap

10X vs 1X

The switch does not just divide by ten. It changes what the probe is.

10X1X
Tip capacitance13–17 pF~40–60 pF
Bandwidthfull 100 MHzsingle-digit MHz
Loading10 MΩ1 MΩ
Noise floor×10 worse referred to inputbest

At 1X the scope's own input capacitance is no longer cancelled by the compensation network, so the probe becomes a low-pass filter across your circuit. Ringing vanishes — not because it isn't there, but because you filtered it out.

The one good reason to use 1X

Genuinely small, genuinely slow signals — sub-100 mV audio, thermocouple-scale DC, sensor outputs — where the ×10 noise penalty dominates and you don't care about anything above a megahertz.

The ground lead is an inductor

the big one

That 6-inch alligator pigtail is roughly 100–200 nH. In series with the probe's 15 pF tip capacitance it forms a resonant tank hanging off your circuit. Feed it a fast edge and it rings — typically in the tens of MHz, right where you were looking.

the ringing you see is L·C, not your circuitf_ring ≈ 1 / (2π√(L·C)) 120 mm lead ≈ 200 nH, tip ≈ 15 pF→ ≈ 92 MHz of pure measurement artefact

Fixes, best first

Ground springThe little coil that came in the probe bag. Sub-centimetre return. Use it.
Bare-wire wrapStrip the tip barrel, wrap a short bus wire from ground barrel to a nearby ground.
Ground at the nodeReturn to the closest ground pad to the signal, never across the board.
Alligator clipFine for DC rails and slow logic. Not for edges, not for ripple, not for overshoot.

The lead is also an antenna. Near a switching converter it picks up the field of the switch node whether or not it is touching anything.

Compensation

every probe, every channel

Probe the compensation pad on the front panel and look at the square wave's corner:

flat topcompensated — correct rounded, sagging cornerunder-compensated — highs attenuated, edges slow peaked, overshooting cornerover-compensated — highs boosted, fake overshoot

Adjust with a non-metallic trimmer tool. A screwdriver's own capacitance shifts the null while you hold it.

Compensate each probe on the channel it will be used on — the trim cancels that channel's input capacitance, and the four inputs are not identical. Re-check after moving a probe between channels, and any time a scope has been sitting on a shelf.

Measuring supply ripple

the standard recipe

The default probe setup will show you tens of millivolts of ripple that isn't there. The accepted method:

1 · kill the loop antennaremove the ground clip; use the ground spring directly at the output cap 2 · remove the DC pedestal so you can zoom inChannel ▸ Coupling ▸ AC 3 · restrict to the band the spec actually coversChannel ▸ BW Limit ▸ 20M 4 · fill the screen5–20 mV/div, ripple across 4+ divisions 5 · read itMeasure ▸ Pk-Pk and Vrms; state which you quoted

Best practice for a real number is a 50 Ω coax soldered to the rail instead of a probe — but the X-E has no 50 Ω input, so terminate externally with a 50 Ω feedthrough at the BNC.

AC coupling on this scope rolls off below ~2 Hz. It removes DC and slow line-frequency drift, which is usually what you want here and occasionally what you needed to see.

Probe loading

you are part of the circuit

A 10X probe hangs 10 MΩ ∥ ~15 pF on the node. The resistance rarely matters; the capacitance always does.

the probe's impedance falls with frequency|Z_C| = 1 / (2π f C) 15 pF at 10 MHz≈ 1.06 kΩ across your node 15 pF at 100 MHz≈ 106 Ω — now you are the load

On a high-impedance node — a crystal, a reset pin, a feedback divider — the probe can shift the frequency, slow the edge, or stop the oscillator entirely. If touching the probe changes the behaviour, the measurement is invalid, not interesting.

Signal disappears when you probe it? Probe a downstream buffered copy, or use a low-capacitance active probe.

04 · Safety & Input Limits

The parts where being wrong costs you the instrument or considerably more.

This scope is not rated for mains

measurement category

Siglent's own words: the SDS1000X-E "can only be used for measurements within its specified measurement categories" and explicitly "not to use the equipment for measurements on mains circuits". It carries no CAT II / III / IV rating at the instrument. The PP510 probe is CAT II 300 V, but the probe rating does not upgrade the scope.

hard limit1 MΩ input: ≤ 400 Vpk (DC + peak AC below 10 kHz). That is the destruction threshold, not a working range.

Line-connected switching supplies, motor drives, anything referenced to a hot conductor: use a differential probe (DPB series) or an isolated front end (ISFE), rated for the job.

Never float the scope

the classic way to die

All four BNC shells — and EXT on the two-channel model — are bonded to the chassis and to protective earth. That is a safety feature, not an inconvenience.

What clipping the ground lead to a live node does

You short that node to earth through a thin wire. Best case the pigtail acts as a fuse. Worse: destroyed front end, destroyed DUT, an arc flash.

What "just lift the earth pin" does

A cheater plug or isolation transformer puts the entire metal chassis, every BNC shell and every probe ground clip at the potential of whatever you clipped to. The scope becomes an energised object with a screen on it. This kills people; it is the single most-warned-against practice in test and measurement.

The legitimate answers, in order: differential probe · isolated front end (ISFE) · battery-powered isolated handheld · isolate the DUT, never the scope.

Two probes, one hidden short

common ground

Every channel's ground is the same ground. Clip C1's ground to one node and C2's to a different node and you have wired those two nodes together through the scope.

This bites hardest when measuring across a shunt, a high-side switch, or either side of an isolation barrier — the measurement looks plausible while the circuit is being quietly redefined.

Getting a difference safely

two grounded probes, subtract in mathMATH ▸ C1 − C2 — fine only if both nodes share the scope's ground genuinely floating differencedifferential probe — the only correct answer

Math subtraction also throws away dynamic range: two 8-bit channels differenced give you the noise of both and the resolution of neither.

Working limits, at a glance

specs that bite
Input, 1 MΩ≤ 400 Vpk (DC + peak AC < 10 kHz)
Input couplingDC · AC · GND — no 50 Ω on this model
Input C(1 MΩ ±2 %) ∥ 17 pF ±3 pF at the BNC
Offset range±2 V below 118 mV/div · ±20 V to 1.18 V/div · ±200 V to 10 V/div (1X)
Trigger level±4.5 div from screen centre
Digital pod−8 V to +8 V, 4 ns min pulse
Trig Out / Pass-Fail3.3 V TTL output — output only, don't drive it
Mains100–240 V, 50/60 Hz · 50 W max
Operating temp0 – 40 °C, ≤ 3000 m

Offset range shrinks as you zoom in vertically. At 5 mV/div you can only move the trace ±2 V — to look at small ripple on a 12 V rail you must AC-couple, not offset.

05 · Vertical

Per-channel conditioning. Everything here has an SCPI twin, given in the right-hand column of each row.

Channel controls

menu → SCPI
Volts/div500 µV – 10 V/div, 1-2-5 · C1:VDIV 50mV
Offsetrange depends on VDIV · C1:OFST -50mV
CouplingDC / AC / GND · C1:CPL D1M A1M = AC 1 MΩ, GND
BW limit20 MHz ±40 % · BWL C1,ON,C2,ON
Probe0.1X…10000X · C1:ATTN 10
UnitV or A (current probes) · C1:UNIT A
InvertC1:INVS ON also works on MATH
Skew±100 ns · C1:SKEW 3NS
Trace on/offC1:TRA ON — turning one off may double its partner's rate

BWL takes channel/state pairs and can set all four in one message. Every other channel command is prefixed by the channel.

Skew: de-embedding your cables

±100 ns

Two probes of different lengths, or a probe against a coax, differ by nanoseconds. On a 100 MHz scope with <100 ps of inherent channel-to-channel skew, the cable is your error term.

short both probes to the same fast edgemeasure C1→C2 delay Measure ▸ Delay ▸ FRR null it outC2:SKEW 1.4NS confirmthe delay measurement now reads ≈ 0

Do this before any propagation-delay, phase or setup/hold measurement. Skip it and you are reporting the difference in your probe cables.

Noise floor by scale

what to expect
V/divTypical noise (ST-DEV)
< 1 mV/div≤ 0.5 div
< 2 mV/div≤ 0.2 div
≥ 2 mV/div≤ 0.1 div

At 500 µV/div half a division of noise is the instrument, not your circuit. If you need the very bottom of the range, budget for ERES or averaging, and turn on the 20 MHz limit.

Accuracy you can quote

DC gain≤ ±3.0 % at 5 mV–10 V/div · ≤ ±4.0 % at ≤2 mV/div
Offset±(1 %·offset + 1.5 %·8·div + 2 mV)
Timebase±25 ppm
Flatness±1 dB to 10 % BW · ±2 dB to 50 % · +2/−3 dB to 100 %

±25 ppm is 25 µs per second — fine for edges, useless for anything clock-disciplined. Use the hardware counter for frequency, not the timebase.

06 · Horizontal & Acquisition

Timebase, memory and how samples are turned into a trace. This is where the ADC pairing shows up as a number.

Sample rate is derived, not set

the arithmetic

You choose timebase and memory depth; the scope computes sample rate from them and caps it at the ADC limit.

time on screent_span = TDIV × 14 what the scope will try to run atSARA ≈ MSIZ / t_span, clamped to 1 GSa/s or 500 MSa/s example: 1 µs/div, 14 Mpts, one channel per ADC14 µs span · 14 Mpts wanted → clamps to 1 GSa/s → 14 kpts example: 1 ms/div, 14 Mpts14 ms span → 1 GSa/s needs 14 Mpts → fits exactly

So deep memory buys you time, not resolution. It keeps the sample rate pinned at maximum as you slow the timebase down, instead of the scope quietly decimating.

MSIZ7K/70K/700K/7M non-interleaved · 14K/140K/1.4M/14M interleaved
TDIV1 ns/div – 100 s/div
AskSARA? · SANU? · SAST?

The four acquisition modes

ACQW
SAMPLINGplain decimation. The default; the only honest one for unknown signals.
PEAK_DETECTkeeps the min and max of each interval — catches 2 ns glitches at any timebase. Ugly, noisy, and the right first move when hunting a narrow spike.
AVERAGE4–1024 acquisitions. Repetitive signals only.
HIGH_RESERES boxcar filter, +0.5 to +3 bits, works single-shot.
set itACQW AVERAGE,16 · ACQW PEAK_DETECT · ACQW HIGH_RES reset persistence / averaging / statistics:ACQuire:CSWeep = the Clear Sweep key interpolation between samplesSXSA ON sin(x)/x · OFF = linear

Peak-detect is 2 ns on the four-channel models (4 ns on two-channel). It works by keeping envelope extremes, so it exaggerates noise — use it to find the glitch, then switch back to Sampling with a tight trigger to measure it.

Sequence mode

400,000 wfm/s

Sequence divides the record into up to 80,000 segments and fills one per trigger, drawing nothing until the memory is full. Throwing away the display work is what buys the capture rate — and shrinks the dead time between events to almost nothing.

arm itAcquire ▸ Sequence ▸ Segments requires horizontal format = Y-T then walk the segmentsHistory ▸ List each frame carries a µs-accurate timestamp

This is the tool for bursty, rare, or timestamp-sensitive events: a comms packet every few seconds, an intermittent glitch, a start-up sequence. You get every occurrence with the interval between them, instead of one lucky screenshot.

Zoom, Roll and X-Y

display formats

Zoom · delayed sweep

Push the Horizontal Scale knob. The top half keeps the whole record, the bottom expands a window of it. With 14 Mpts behind it, this is how deep memory pays: capture a whole 100 ms start-up, then zoom to a 200 ns edge inside it without re-triggering.

zoom window scale and positionHMAG 1US · HPOS 100ns Format 1 on X-E

Roll

One button. 50 ms/div to 100 s/div, trace scrolls right-to-left with no trigger. For thermal drift, sensor output, slow control loops. Search event count is unlimited in Roll.

X-Y

XYDS ON plots one channel against another — Lissajous figures, I-V curves, transfer characteristics, component testing. Not available with Sequence or History.

Trigger position and delay

pre/post trigger

Pre-trigger is free — the scope is always filling a circular buffer, so it can show you 0–100 % of memory before the trigger. Post-trigger delay reaches out to 10,000 divisions after it.

trigger → screen centreTRDL -4.8US negative = pre-trigger screen centre → trigger (the inverse convention)TIM:DEL -4.8US back to zeropush the Horizontal Position knob

The two commands measure the same interval in opposite directions. Pick one and be consistent, or your scripts will disagree with your screen.

07 · Sampling & Bandwidth

Instrument-independent theory, applied to this instrument's numbers. This is what decides whether a measurement means anything.

The 5× rule

bandwidth

Scope bandwidth should be ≥5× the highest frequency component you care about. At 5× the amplitude error is under ±2 %; at 3× it is roughly −3 %; at 1× you are reading the −3 dB point and under-reporting by 30 %.

rise time from bandwidtht_r ≈ 0.35 / BW this scope, 100 MHzt_r ≈ 3.5 ns — matches the spec exactly signal bandwidth from an observed edgeBW_sig ≈ 0.35 / t_r(signal) what you actually seet_measured = √(t_signal² + t_scope²)

The consequence: a 3.5 ns edge measured on this scope reads ≈4.95 ns. A true 1 ns edge reads 3.64 ns — you are measuring the oscilloscope. Below about 10 ns, treat rise-time numbers from a 100 MHz scope as an upper bound only.

Aliasing

the lie that looks stable

Nyquist's 2× is a reconstruction bound, not a measurement one. In practice you want ≥5 samples per period for a shape you can trust, and 10–20 to measure a rise time.

Undersampled content does not vanish — it folds down and appears as a slow, plausible, rock-steady waveform that is not there. Nothing on the screen flags it.

Catching it

change the timebasea real signal keeps its frequency; an alias moves turn on peak detectACQW PEAK_DETECT hidden fast content suddenly thickens the trace check the actual rateSARA? vs. what you assumed look in the frequency domainMATH ▸ FFT an alias sits at |f_sig − n·f_s|

Slow timebase + deep memory off is the classic aliasing setup: the scope decimates hard and a 10 MHz clock becomes a lazy 30 Hz sine.

Sizing an acquisition

worked example

You want to see the enumeration handshake of a 1 Mbit/s bus, 20 ms long, without losing edge detail.

bit period1 µs → want ≥10 samples/bit → ≥10 MSa/s edges are ~50 ns → real content to0.35/50 ns = 7 MHz → 5× rule wants 35 MHz of scope. Fine. span needed20 ms → TDIV = 20 ms / 14 ≈ 2 ms/div points at 500 MSa/s over 28 ms14 Mpts — exactly the interleaved depth soMSIZ 14M · TDIV 2MS, one channel per ADC pair

Then Zoom into any individual bit without re-arming. That is the whole argument for deep memory in one screen.

08 · Trigger

The digital trigger system is the best part of this instrument. Ten types, all with 1 ns resolution and a 2 ns–4.2 s qualifier window.

Sweep modes

TRMD
AUTOfree-runs if no trigger arrives. Status reads Auto when it is faking and Trig'd when it isn't.
NORMonly sweeps on a real trigger. Status reads Ready while waiting; the last good trace stays frozen.
SINGLEarms once, captures, stops. The mode for one-shot events.

read the statusThe word in the top-left corner is the truth. A stationary trace in Auto may be un-triggered garbage that happens to look periodic. If you cannot get Trig'd, switch to Normal — a blank screen is honest feedback that your trigger condition is wrong.

remote equivalentsTRMD NORM · ARM start one acquisition · STOP is the trigger armed / did it fire?INR? bit 13 (8192) = ready, bit 0 (1) = new signal acquired; reading clears it

The ten trigger types

TRSE
Edgerising / falling / alternating. The default, and holdoff-capable.
Slopeedge speed: time between two levels is <, >, in or out of range. Finds slow edges and weak drivers.
Pulse (Glitch)positive or negative width against a range. The standard glitch hunt.
VideoNTSC, PAL, 720p/1080i/1080p, or Custom line/field.
Windowabsolute or relative band — fires on exit. Good for supply excursions.
Intervaltime between two like edges against a range. Period jitter, missing clocks.
Dropoutedge or state timeout — fires when activity stops. Finds hangs and lost clocks.
Runta pulse that crosses one threshold but not the other. Marginal drive, contention.
PatternAND / OR / NAND / NOR across all four channels, each H, L or X.
SerialI²C, SPI, UART, CAN, LIN — see the next section.
edge, C1, 1.43 µs holdoffTRSE EDGE,SR,C1,HT,TI,HV,1.43uS pulse width between 5 ns and 1 µs on C2TRSE GLIT,SR,C2,HT,P2,HV,5nS,HV2,1uS dropout: nothing for 2.8 ms on C4TRSE DROP,SR,C4,HT,TI,HV,2.8mS video, NTSC, any lineTRSE TV,SR,C1,STAN,NTSC,SYNC,ANY qualifier codesPS/PL/P2/P1 = pulse smaller/larger/in/out · IS/IL/I2/I1 = interval · TI = time

Level, slope and coupling

the basics, remotely
LevelC1:TRLV 52mV — range ±4.5 div from centre
Second levelC1:TRLV2 800mV — runt and slope use both
Auto-centreSET50 — level to 50 % of the source. No effect on dual-level types.
SlopeC1:TRSL POS — POS / NEG / WINDOW
CouplingC1:TRCP AC — see below
Window heightTRWI 2V — relative window type only

Trigger coupling is a filter on the trigger path only

DCeverything
ACblocks DC, attenuates below 8 Hz — use when a large DC offset is dragging your level around
LFREJrejects below 2 MHz — beats 50/60 Hz hum and slow drift
HFREJrejects above 1.2 MHz — stops fast noise from double-triggering an edge

Sensitivity is ±0.2 div internally; ±0.4 div on EXT (two-channel). Jitter <100 ps.

Holdoff · the most under-used control

80 ns – 1.5 s

After a trigger fires, holdoff refuses to re-arm for a set time. It has nothing to do with the trigger condition and everything to do with which of many valid triggers you land on.

When it is the answer

BurstsTrigger keeps re-arming inside a packet, so the display shudders. Set holdoff slightly longer than the burst → every sweep starts at bit 0.
Repetitive patternsA frame containing several similar edges triggers on a different one each time. Holdoff ≈ frame period locks it.
Ringing edgesOne transition crosses the level three times. A short holdoff takes the first crossing and ignores the rest.
NoiseSometimes cheaper than switching to HFREJ.
start here and tune upwardholdoff ≈ 1.1 × the pattern period via TRSE, edge triggerTRSE EDGE,SR,C1,HT,TI,HV,20mS turn it offHT,OFF edge trigger only

Range is 80 ns–1.5 s for Edge and 2 ns–4.2 s for the qualified types. Holdoff is only available on Edge and Dropout as a hold type; the others use the same field for their width/interval qualifier.

Trigger recipes

what to reach for
Rare glitch, width unknownPeak Detect + Persist Infinite → see it → Pulse trigger < the narrowest normal pulse
Missing clock edgeDropout, timeout ≈ 1.5 × period
Bus contention / weak driveRunt
Slow rise on a hot daySlope, time > nominal edge
Supply out of toleranceWindow, absolute, set to the tolerance band
A specific bus statePattern across C1–C4, e.g. TRPA C2,L,C3,H,STATE,AND
Start-up transientSingle + large pre-trigger + deep memory, then Zoom
Intermittent, hours awaySingle + Sequence + walk History timestamps afterwards

09 · Serial Buses

Trigger and decode for five protocols, standard on every unit. Two decoders can run at once.

Setting up any decode

common workflow
1Decode ▸ Decode1 ▸ Type IIC / SPI / UART / CAN / LIN 2 · assign each signal to a channelSignal SCL/SDA, CLK/MISO/MOSI/CS, RX/TX, CAN_H/CAN_L… 3 · set the logic threshold per signalThreshold: −4.5 to +4.5 div not volts — divisions 4 · protocol parametersbaud, bit order, parity, stop bits, idle level 5 · read itList ▸ 1–7 lines tabular event view with timestamps

The threshold is in divisions, not volts. If you rescale the channel, the threshold moves with it. Set the vertical scale first, then the threshold, and re-check after any Auto Setup.

The list view exports: Decode ▸ List ▸ Save writes a *.csv of the decoded frames — the fastest way to get a bus transcript off the instrument.

I²C

TRIIC:*
Trigger onStart · Stop · Restart · No Ack · EEPROM · 7-bit addr+data · 10-bit addr+data · data length
Address7 or 10 bit; R/W = read, write or don't care
Data1–2 bytes for addr+data, 1–12 bytes for length
EEPROMmatches control byte 1010xxx, comparison =, >, <
sources and conditionTRIIC:SCL C1 · TRIIC:SDA C2 · TRIIC:CON NACK address + dataTRIIC:ADDR 0x50 · TRIIC:DATA 0x1F · TRIIC:RW WRITE

No Ack is the single most useful I²C trigger: it fires exactly when a device didn't answer, which is what you were debugging.

SPI, UART

TRSPI:* · TRUART:*

SPI

SignalsCLK, MOSI, MISO, CS (the 4-ch scope can watch all four; 2-ch only two)
Data4–96 bits, values 0/1/X, MSB or LSB first
FramingCS, ~CS, or clock-timeout (TRSPI:CLK:TIM) when there is no chip select

UART

Trigger onStart · Stop · Data · Parity Error
Format5/6/7/8 data bits · None/Odd/Even/Space/Mark parity · 1/1.5/2 stop · idle H or L
Baud600–115200 preset, or custom 300 – 5,000,000 bit/s
Match1 byte, comparison =, >, <

Garbled decode at the right baud usually means the wrong idle level or an inverted line — a UART behind an RS-232 transceiver is idle-low at the connector and idle-high at the MCU.

CAN, LIN

TRCAN:* · TRLIN:*

CAN

Trigger onStart · Remote · ID · ID+Data · Error
IDstandard 11-bit or extended 29-bit
SourceCAN_H, CAN_L, or the difference CAN_H−CAN_L
Baud5 k – 1 M preset, or custom

LIN

Trigger onBreak · Frame ID · ID+Data · Error
Specv1.3 or v2.0
Baud600–19200 preset, custom 300 bit/s – 20 kbit/s

Probing CAN differentially through the scope's own math (CAN_H − CAN_L) works but costs dynamic range; a single-ended CAN_H trace is usually enough to decode and far cleaner.

10 · Measure & Cursors

38 automatic parameters computed by a hardware co-processor over the full record — up to 14 Mpts, not just what is on screen.

Vertical parameters

amplitude
Max · Min · Pk-Pkabsolute extremes of the record
Top · Basemost probable high and low states — the honest levels for a bimodal signal
AmplTop − Base, falling back to Max − Min if unimodal
Mean · Cmeanaverage over all data / over the first cycle
RMS · Crmstrue RMS over all data / first cycle
Stdev · Vstdstandard deviation, all data / first cycle
ROV · RPREovershoot and preshoot around a rising edge
FOV · FPREovershoot and preshoot around a falling edge
Level@Xvoltage at the trigger point

use Ampl, not Pk-PkOn a noisy square wave Pk-Pk includes the noise spikes and the overshoot; Ampl uses the statistical Top and Base and gives you the logic swing you meant. Quote Pk-Pk for ripple and noise, Ampl for signal levels.

Horizontal parameters

timing
Period · Freqmid-threshold, two like-polarity edges
+Wid · −Widwidth at the 50 % level
Rise · Fall10 %–90 % and 90 %–10 %
+Dut · −Dutduty cycle at 50 %
Bwidburst width — first edge to last opposite edge
Delaytrigger → first 50 % transition
Time@Leveltrigger → each rising edge; with Statistics on, gives mean/min/max/σ across frames

Two-channel delay set

Phase · FRR · FRF · FFR · FFF · LRR · LRF · LFR · LFF · Skew — first/last, rising/falling, source A to source B. Installed with MEAD PHA,C2-C4 and read back with C2-C4:MEAD? PHA.

Rise/Fall on a 100 MHz scope is bandwidth-limited — see §07. Below ~10 ns you are reading the instrument.

Gate: measure only what matters

MEGS/MEGA/MEGB

By default a measurement chews the whole record, which is wrong whenever the record contains more than one regime — inrush plus steady state, a preamble plus data, a settling tail.

turn the gate onMEGS ON set the two boundariesMEGA 20us · MEGB 1.68ms A must be ≤ B

Now Freq, RMS, Rise and the rest are computed only between the markers. This is the difference between "average current 3.2 A" and "average current during the 40 ms burst, 3.2 A".

Statistics

accumulate across acquisitionsPASTAT ON · PASTAT RESET to clear read one backPAVA? STAT1cur, mean, min, max, std-dev, count

Four measurements display at once; the statistics table shows five.

Reading measurements remotely

PACU / PAVA?
install a measurement on a channelPACU PKPK,C1 query it directlyC2:PAVA? RISEC2:PAVA RISE,3.600000E-9S everything at onceC1:PAVA? ALL — one message, all 27 scalar parameters by slot, after PACUPAVA? CUST1 · PAVA? CUSTALL clear the displayMEACL control returned precisionFORMat:DATA DOUBLE · SINGLE (7 digits, default) · CUSTOM,4

C1:PAVA? ALL is the single most useful query on the instrument for logging: one round trip returns max, min, pk-pk, top, base, ampl, mean, cmean, stdev, vstd, rms, crms, overshoots, level@x, period, freq, widths, rise, fall, burst width, duties and delays.

Cursors and the counter

manual reads

Cursors

ManualX1, X2, ΔX, 1/ΔT, and Y1, Y2, ΔY
Trackcursors follow the waveform; you move X, Y comes along
RemoteCRMS · CRST · CRTY · CRVA?

1/ΔT is the fast frequency read for anything the automatic Period measurement won't lock onto — a burst, a single cycle, a decaying ring.

Hardware counter 4-channel only

Utility ▸ Counter — a 6-digit hardware frequency counter that runs asynchronously to the acquisition system. It keeps counting while the scope is stopped. Modes: Frequency, Period, Totalizer, with optional statistics and a gate (level or edge, source-paired C1↔C2 and C3↔C4).

display-precision valueCYMT?2.50E+07Hz full precisionCYMT_HW?94.5177261kHz

Below 10 Hz both queries just return "10Hz". The counter is far more accurate than reading Freq off the timebase, but it is still disciplined by the same ±25 ppm reference.

11 · Math & FFT

Eight operators, and a 1 M-point FFT with peak and marker tooling that most scopes in this class don't have.

Math operators

MATH
+ − × ÷two sources. C1-C2 for a floating difference (within grounding limits — see §04)
d/dtdifferentiate — inductor voltage from current, edge-rate visualisation
∫dtintegrate — charge from current, volt-seconds across a transformer
square root
FFTup to 1 Mpt, see the next cards
define, scale and positionDEF EQN,'C1-C2' · MTVD 5V · MTVP 100 read the math trace backMATH:WF? DAT2 — works for everything except FFT

Power measurement pattern: voltage on one channel, current probe on another (set C2:UNIT A), C1×C2 for instantaneous power, then Mean over a gated whole number of cycles for average power.

Math runs on the full acquired record — up to 14 Mpts — not on the 700-odd points you can see.

FFT setup

1 M points

Resolution comes from the time span, not the point count alone:

frequency resolutionΔf = 1 / (TDIV × 14) = 1 / acquisition span highest binf_max = SARA / 2 so for fine resolutionslow the timebase down and raise Maximum Points
DisplaySplit (time above, spectrum below) · Full · Exclusive
ModeNormal · Max-Hold · Average
Vertical unitdBVrms · dBm · Vrms (or dBArms/Arms with a current probe)
HorizontalCenter + Hz/div, or Auto set
Ext Loadset the load resistance so dBm is computed correctly

Max-Hold is the mode for intermittent emissions and frequency-hopping noise — leave it running and the envelope accumulates.

Choosing a window

five options

A window trades frequency resolution against amplitude accuracy and leakage. There is no universally right choice; there is a right choice per question.

WindowUse when
RectangularTransients fully contained in the record, or a signal that is an exact integer number of cycles. Best frequency resolution, worst amplitude accuracy otherwise.
HanningThe default for unknown continuous signals. Good leakage suppression, fair amplitude accuracy.
HammingSimilar to Hanning, slightly narrower main lobe.
Flat TopWhen you need the amplitude of a sine to be right. Best amplitude accuracy, poorest resolution.
BlackmanMinimum leakage — separating a small tone next to a large one. Poorest resolution.

Rule of thumb: measuring a frequency → Hanning. Measuring a level → Flat Top. Hunting a spur next to a carrier → Blackman. Using the rectangular window on a non-integer number of cycles can cost you nearly 4 dB of scallop loss.

Peaks and markers

4-channel only

MATH ▸ FFT ▸ Tools — the part that turns the FFT from a picture into a measurement.

Peaksauto-marks peaks, with a sortable table by amplitude or frequency
Thresholdminimum amplitude to count as a peak
Excursionhow far a peak must rise above its surroundings — this is what stops noise being labelled
Markersup to 8, placeable by frequency, or snapped to peaks
Markers on Harmonicsone press — drops markers on f, 2f, 3f… for THD work
Show Deltaamplitude differences between markers, in dB

Markers on Harmonics + Show Delta gives you harmonic distortion relative to the fundamental without a single manual cursor placement.

FFT remote controlsFFTC centre · FFTS scale · FFTU unit · FFTW window · FFTF fullscreen · FFTT? Hz/div

12 · History, Search & Navigate

The scope is always recording. These three features are how you go back and look at what it already caught.

History

up to 80,000 frames

In Run state the scope continuously fills a frame buffer; press History and you can scroll back through everything it kept — up to 80,000 frames, each with a timestamp accurate to microseconds.

Enablepress History. From Run it stops first; from Stop it stays stopped.
Listturns on the timestamp table — this is the feature
Frame No.A/B — A is displayed, B is the maximum available
Replayplay backward, stop, play forward through frames
Requireshorizontal format = Y-T

Frame count depends on record length and sample rate, and the buffer must actually fill — press Run and wait before expecting the maximum. Fewer points per frame means more frames.

remoteHSMD ON · FRAM 12 · FTIM? timestamp of the current frame · HLST ON

The killer use: something failed once, an hour ago, and you didn't see it. If the scope was running and triggering, it is still in there with the time it happened.

Search

4-channel only

Search scans the already-acquired record for events and marks each with a white triangle. Five types: Edge, Slope, Pulse, Interval, Runt — the same qualifiers as the trigger system, applied after the fact.

Y-T, stoppedmaximum 700 events
Roll, runningunlimited
Roll, stopped700

Search plus 14 Mpts is the real analysis workflow on this scope: capture one long record, then ask "where in here did a pulse narrower than 100 ns occur?" and step to each answer.

Navigate

the ◀ ■ ▶ keys

One button, three modes — the front-panel transport controls change meaning depending on which you pick.

Timescroll the delay position through a long record, at a chosen speed
History Framestep or play through captured frames
Search Eventjump to the previous/next found event (acquisition must be stopped)

Search Event navigation is the pay-off for Search: instead of scrolling 14 million points looking for the glitch, press ▶ and land on it.

Pass/Fail

hardware mask test

A hardware comparator making up to 40,000 pass/fail decisions per second against a mask you generate around a reference trace.

build a mask around the current tracePFST set X and Y tolerancePFCM create pick a source and runPFSC C1 · PFEN ON · PFOP ON stop on the first failurePFFS ON read the talliesPFDD?pass / fail / total counts save or reload a mask:MTESt:MASK:SAVE · :MTESt:MASK:LOAD

The rear Pass/Fail BNC emits a 3.3 V TTL pulse on each verdict — wire it to a counter, a logger, a relay, or the trigger input of another instrument for unattended overnight monitoring.

Combine with Fail Stop and History: the scope runs all night, halts on the first violation, and the frames before it are still in the buffer.

13 · Bode Plot & Data Logging

Two features that turn the scope into a different instrument. Both are four-channel exclusives.

Bode Plot II

frequency response

The scope drives a swept sine into your DUT and measures gain and phase at each point — a frequency response analyser built into a bench scope.

Stimulus sourcethe SAG1021I USB AWG module, or a standalone Siglent SDG generator over USB/LAN
Start frequencyfrom 10 Hz
Span500 Hz minimum, up to 120 MHz (bounded by scope and AWG bandwidth)
Pointsup to 500, linear or per-decade
ChannelsDUT Input + up to three DUT Outputs
Gainset Auto to maximise dynamic range per point
the pathUtility ▸ Next Page ▸ Bode Plot II ▸ Config then, in orderSource → Sweep Mode → Set Sweep → Set Stimulus → Set Channel → Run always do this firstSource ▸ Connection Test

Results export to USB as a data table, and the plot itself can be saved and recalled.

Vari-level sweeps

control loop response

A fixed stimulus amplitude is wrong for power supply loop measurement: too small at low frequency and the response drowns in noise; too large at crossover and you drive the loop non-linear.

Vari-level lets you specify amplitude as a function of frequency — a polyline of joints (frequency, amplitude), linearly interpolated between. The classic power-supply profile is four joints: large amplitude at low frequency, tapering through the crossover region, small at high frequency.

set it upSweep Mode ▸ Vari-level ▸ Set Vari-level edit the tableProfile A–D · Joints count · Edit Table cycles freq / ampl / column precise entrypush the Universal Knob for the numeric keypad

Sweep and stimulus settings in Vari-level are independent of the Simple-mode ones; configuring one does not affect the other. Four profiles are storable.

Measuring a control loop also needs an injection transformer across a break in the feedback path — the scope supplies the sweep and the maths, not the injection network.

Sample Logger

long-duration capture

Records raw sample points for minutes to hours, streaming to internal flash or a USB stick in real time — 1 Sa/s to 25 kSa/s. It logs every enabled channel.

before you start, answer thesewhich channels · what rate · how long · how many bytes · flash or U-disk file*.slg binary; convert with the FileConverter mini-tool

Recall on the instrument lets you scroll and cursor the logged data with the normal timebase and delay knobs. If the log exceeds the scope's DDR, it is read from the U-disk on demand — do not remove the stick while reviewing.

Measure Logger

trending

Logs up to 4 measurement values over time at an interval from 0.1 s to 10 minutes, held in memory and saved afterwards. This is the tool for drift, thermal behaviour, and "does it get worse after an hour".

Internal savebinary only
External save*.mlg binary, CSV, or MATLAB
Recallbinary from internal; binary or MATLAB from external
AnalysisCursors work on the recalled trend

set the clock firstThe SDS1000X-E has no battery-backed clock. After every power-up the time is wrong until you set it manually or let NTP fetch it (Utility ▸ Date/Time ▸ NTP, with Power On Sync). Every log timestamp depends on this.

14 · Files & Formats

Ten save types, and the on-disk binary layout that Siglent documents in a separate PDF most owners never find.

Save types

Save/Recall ▸ Type
TypeExtRecall?
Setups.xmlyes — 20 internal slots
Reference.REFyes — into REFA/B
Binary.BINno
CSV.CSVno
Matlab.DATno
BMP / JPG / PNGimageno
To Default Keyrebinds the Default button
FileConvertertoolcopies the bin→csv utility to your stick

deep recordsDo not save 14 Mpts directly as CSV. It takes minutes and produces an enormous file. Save .BIN and convert on the PC with FileConverter — it handles .bin, .slg and .mlg.

Binary holds all enabled channels in one file. CSV holds the displayed analog channels plus the scope's main settings (toggle with Param Save).

Binary format V1.0

SDS1xx4X-E ≥ 6.1.26

A 2 KB header, then raw channel data from 0x800. No device setup, no channel names — you must decode the header to interpret the bytes.

OffsetField
0x00–0x0fch1–ch4 on/off, int32 each
0x10–0x4fch1–ch4 V/div, 16 bytes each
0x50–0x8fch1–ch4 vertical offset, 16 bytes each
0x90–0xd3digital on, then d0–d15 on/off
0xd4–0xe3time/div
0xe4–0xf3trigger delay
0xf4–0xf7wave_length, int32
0xf8–0x107sample rate
0x108–0x11bdigital wave length + digital sample rate
0x800–enddata, C1→C4 then D0→D15, enabled channels only, back to back

Each 16-byte "value with unit" field is float64 value (8 B) + magnitude index (4 B) + unit index (4 B), little-endian.

magnitude index0 YOCTO · 4 PICO · 5 NANO · 6 MICRO · 7 MILLI · 8 IU · 9 KILO · 10 MEGA · 11 GIGA unit index0 V · 1 A · 13 Hz · 14 S · 15 SA · 16 PTS · 18 DB

Turning bytes into volts

the two formulas
from a saved .BIN file — data is centred at 128V = (byte − 128) × VDIV / 25 + offset from the SCPI WF? stream — data is signedV = code × VDIV / 25 − offset where code = byte, minus 256 if byte > 127 time of sample n, either patht = −(TDIV × 14 / 2) + n / SARA codes per division on this family25

watch the signThe two paths differ. The file format centres at 128 and adds the offset; the WF? stream is two's-complement and subtracts it. Getting this backwards produces a waveform that is correct in shape and wrong in DC level — easy to ship, hard to notice.

Math traces are interpolated: MATH:WF? can return more points than SANU? reports. Divide block length by point count to get the interpolation multiplier, then use it to scale the sample interval.

Setups: internal and external

panel state
20 internal slots*SAV 3 · *RCL 3 · *RCL 0 = factory default to and from a USB stickSTPN DISK,UDSK,FILE,'TEST.xml' · RCPN DISK,UDSK,FILE,'TEST.xml' grab the whole panel state as dataPNSU?#9<9 digits><xml>, restore with PNSU <header><data>

PNSU? is the way to snapshot and restore an exact instrument state from a script. It returns a long block — set the read buffer to 500 kB or more and the timeout to 10 s or more before calling it.

On the X-E, setups are XML and therefore survive firmware upgrades. Older platforms returned opaque binary that did not. Filenames are limited to eight characters, and the leading / for the root directory is not supported — use 'TEST.xml' or '/SAVE/TEST.xml'.

15 · Remote Control

Four ways in, no vendor software required. Sockets are the one that always works.

The four transports

pick one
TransportAddress
Raw socketTCP port 5025 — no libraries at all
TelnetTCP port 5024, interactive SCPI> prompt — reach it with nc on macOS
VXI-11 (LXI)TCPIP::<ip>::INSTR via NI-VISA or pyvisa
USB-TMCUSB0::0xF4EC::0xEE38::<serial>::INSTR
set a static IP from the front panel or remotelyCONET 10,11,0,230 DHCP must be off confirm you are talking to the right box*IDN?Siglent Technologies,SDS1104X-E,SDS1EBAC0L0098,7.6.1.15 interactive poke-aroundnc 10.11.0.230 5024 · Ctrl+C to leave — macOS ships no telnet binary

Every SCPI string over a socket must be terminated with \n. Sockets need nothing installed — start there when a VISA stack is misbehaving, and always on macOS.

Connecting from a Mac

zero dependencies

macOS already ships everything the socket route needs — nc and Python 3. No VISA layer, no driver, no kernel extension.

1 · cable itEthernet → the rear LAN port 2 · give it an addressUtility ▸ IO Set ▸ LAN Set DHCP on, then note the IP it takes 3 · one line proves the entire pathprintf '*IDN?\n' | nc 192.168.1.50 5025 Siglent Technologies,SDS1104X-E,SDS1EB…,7.6.1.15 interactive session instead of one-shotnc 192.168.1.50 5024 gives the SCPI> prompt optional · the VISA routepip install pyvisa pyvisa-py then TCPIP::<ip>::INSTR

If *IDN? answers, every command in §16 is open to you. If it doesn't, the scope is not on this subnet — see the next card.

Set a static address remotely once you're in: CONET 192,168,1,50 — octets comma-separated, and DHCP must be off first.

Finding it when you don't know the IP

discovery

The scope publishes no Bonjour/mDNS name — it will never appear in Finder or dns-sd -B. Read the address off the front panel, or sweep for it.

Off the front panel

Utility ▸ IO Set ▸ LAN Set shows IP, mask and gateway. Utility ▸ System Status gives firmware, FPGA and serial.

Sweep the subnet

python3 - <<'PY' import socket, concurrent.futures as cf def probe(ip):     try: s = socket.create_connection((ip, 5025), 0.35)     except Exception: return     try:         s.settimeout(1.2); s.sendall(b"*IDN?\n")         return ip, s.recv(4096).decode().strip()     finally: s.close() net = "192.168.1."# your subnet — check with: ipconfig getifaddr en0 with cf.ThreadPoolExecutor(max_workers=256) as ex:     for hit in ex.map(probe, [net+str(i) for i in range(1,255)]):         if hit: print(*hit) PY

Two seconds, and it answers "is it even on the network?" definitively. Silence across the whole range means cable, power or subnet — not SCPI.

Why not USB on a Mac

USB-TMC

The rear USB Device port speaks USB-TMC, which needs a VISA layer beneath it. On macOS that layer is the weak link:

NI-VISAmacOS support lags Windows and Linux; Apple Silicon support is a moving target
pyvisa-py + libusbworks in principle, but there are open reports of this exact model failing to read waveforms over USB on non-Windows hosts
Raw socketno VISA, no driver, no permissions dialog — the entire class of problem disappears

Reach for USB only when there is no network at all. Even then, the front-panel USB Host port plus a memory stick beats USB-TMC: press Print for a screenshot, or save .BIN and convert it on the Mac.

The one genuine USB-TMC advantage is throughput on 14 Mpts transfers. If you need that regularly, a wired LAN connection gets close enough that it rarely justifies the driver fight.

Response headers

CHDR — set this first

The scope decorates query responses by default. Three modes, all for the same query C1:VDIV?:

CHDR LONGC1:VOLT_DIV 1.00E+01V CHDR SHORT (default)C1:VDIV 1.00E+01V CHDR OFF1.00E+01 ← what your parser wants

Send CHDR OFF as the first line of every script. It strips both the header and the unit suffix, turning every numeric query into something float() accepts directly.

Commands are unaffected — you can always send short or long form regardless of the CHDR setting.

Web server

4-channel only

Put the scope's IP in a browser. No plugin, no client software, PC and mobile layouts.

Live screenmirror of the instrument display
Virtual panelevery front-panel key and knob, clickable
Screenshotone click, straight to your machine
Waveform downloadsaves a .bin to your computer
FileConverterdownload the bin→csv tool from the page itself
Firmware upgradeupload new firmware over the browser

Set a password at Utility ▸ Next Page ▸ WebServer ▸ Password ▸ Save. Anyone on the network can otherwise drive your bench.

The web waveform download is the fastest zero-code path from a captured trace to a file on your laptop.

Transfer settings that matter

buffers & timeouts

The defaults in every VISA binding are far too small for this instrument. Three things to change before reading waveforms:

chunk size — default 20 kBsds.chunk_size = 20*1024*1024 timeout — default 2 ssds.timeout = 30000 termination characterdo not set read_termination to '\n'

binary data contains 0x0AWaveform bytes are arbitrary. If your library truncates on linefeed, a perfectly good capture arrives cut in half at the first sample that happens to equal 10. Read raw, count bytes from the #9 header, and stop there.

block header format#9 + 9 ASCII digits = payload length, then payload, then 0x0A 0x0A so skip16 bytes of preamble, drop the last 2 thin the transfer instead of the timeoutWFSU SP,3,NP,0,FP,200 every 3rd point from #200

16 · SCPI Reference

The command set by subsystem, short form first. Queries add ?; most commands have one. <channel> is C1–C4.

Common & system

IEEE 488.2 + Siglent
*IDN?vendor, model, serial, firmware
*OPC / *OPC?operation complete; the query blocks until done
*RSTreset = the Default key
*SAV / *RCLstore / recall internal setup 1–20 (*RCL 0 = factory)
*CAL?run self-calibration; returns 0 on success. Disconnect all inputs first.
CHDRresponse header SHORT / LONG / OFF
FORM:DATASINGLE / DOUBLE / CUSTOM,<n> precision for measurements
INR?internal state register; reading clears it
BUZZbuzzer ON/OFF
CONETIP address as four comma-separated octets
SCSVscreensaver OFF/1MIN/5MIN/10MIN/30MIN/60MIN
EMODeducation mode — lock AutoSetup, Measure or Cursors

Acquisition

ACQUIRE
ARMstart a new acquisition
STOPstop acquiring
ACQWSAMPLING / PEAK_DETECT / AVERAGE,<n> / HIGH_RES
:ACQ:CSWclear sweeps
AVGAaverage count 4–1024
MSIZ7K…7M / 14K…14M
SAST?acquisition status, e.g. Trig'd
SARA?sample rate; DI:SARA? for digital
SANU?points acquired
SXSAsin(x)/x interpolation ON / linear OFF
XYDSX-Y display ON/OFF
ASETauto setup

Channel & timebase

vertical + horizontal
<ch>:VDIVvolts/div, 500uV–10V
<ch>:OFSTvertical offset
<ch>:CPLA1M / D1M / GND
<ch>:ATTNprobe factor 0.1–10000
<ch>:TRAdisplay ON/OFF
<ch>:INVSinvert (also MATH)
<ch>:UNITV / A
<ch>:SKEW±100 ns
BWLchannel,state pairs
TDIV1NS…100S
TRDLtrigger → screen centre
:TIM:DELscreen centre → trigger
HMAG / HPOSzoom window scale / position

Trigger

TRIGGER
TRSEtype + source + qualifier — the master command
TRMDAUTO / NORM / SINGLE
<src>:TRLVlevel (upper, when two)
<src>:TRLV2lower level, runt/slope
<src>:TRSLPOS / NEG / WINDOW
<src>:TRCPAC / DC / HFREJ / LFREJ
SET50level to 50 %
TRPApattern: source,H|L|X pairs + STATE,AND|OR|NAND|NOR
TRWIrelative window height
serial: TRIIC:* · TRSPI:* · TRUART:* · TRCAN:* · TRLIN:*

Measure & math

MEASURE / MATH
PACUinstall measurement: PACU FREQ,C1
<ch>:PAVA?read one, or ALL
PAVA? CUST<n>read installed slot 1–5, or CUSTALL
PAVA? STAT<n>cur/mean/min/max/std-dev/count
PASTATstatistics ON / OFF / RESET
MEACLclear all measurements
MEADdelay measurement: MEAD PHA,C2-C4
MEGS / MEGA / MEGBgate on-off, gate A, gate B
CYMT? / CYMT_HW?counter, display / full precision
DEFmath expression
MTVD / MTVPmath scale / position
FFTC / FFTS / FFTU / FFTWFFT centre / scale / unit / window

Waveform, save & reference

data out
<trace>:WF? DAT2C1–C4, MATH, D0–D15
WFSUSP sparsing, NP count, FP first point
SCDPscreen dump — returns a BMP
PNSU?whole panel state as a data block
STPN / RCPNsetup to / from USB disk
REFSR / REFLAreference source / location REFA–D
REFSA / REFDS / REFCLsave / display / close reference
REFSC / REFPOreference scale / position
HSMD / FRAM / FTIM? / HLSThistory mode, frame, timestamp, list
PFEN / PFOP / PFDD?pass-fail enable / operate / results

Deprecated but still accepted: the guide's "Obsolete Commands" chapter lists PDET, PERS, VPOS, CSVS, FILT, COUN and others kept for old scripts. Prefer the modern spellings above.

17 · Cookbook

Working code. The socket path needs nothing installed; the VISA path needs pyvisa.

Talk to it in ten lines

raw socket · no libraries
import socket s = socket.create_connection(("10.11.0.230", 5025), timeout=5) def ask(cmd):     s.sendall(cmd.encode() + b"\n")     return s.recv(4096).decode().strip() s.sendall(b"CHDR OFF\n")# strip headers and units print(ask("*IDN?")) print(float(ask("C1:PAVA? FREQ"))) print(float(ask("SARA?")), float(ask("TDIV?")))

Port 5025 is the raw SCPI socket; 5024 is the interactive Telnet one with a prompt. Terminate every command with \n.

Read a waveform into volts

WF? DAT2
import pyvisa, numpy as np sds = pyvisa.ResourceManager().open_resource("TCPIP::10.11.0.230::INSTR") sds.timeout = 30000# default 2 s is not enough sds.chunk_size = 20*1024*1024# default 20 kB is not enough sds.write("chdr off") vdiv = float(sds.query("c1:vdiv?")) ofst = float(sds.query("c1:ofst?")) tdiv = float(sds.query("tdiv?")) sara = float(sds.query("sara?")) sds.write("c1:wf? dat2") raw = sds.read_raw()[16:-2]# drop "C1:WF DAT2,#9nnnnnnnnn" and trailing 0A 0A code = np.frombuffer(raw, dtype=np.int8)# two's complement volts = code * (vdiv/25) - ofst t = -(tdiv*14/2) + np.arange(len(volts))/sara# 14 divisions

np.int8 does the "subtract 256 if >127" step for free. The header is 16 bytes because #9 is followed by exactly nine digits.

Single-shot capture, properly sequenced

arm → wait → read
1 · configure while stoppedCHDR OFF ; MSIZ 14M ; TDIV 2MS ; C1:VDIV 1V 2 · set the triggerTRSE EDGE,SR,C1,HT,OFF ; C1:TRSL POS ; C1:TRLV 1.5V 3 · arm singleTRMD SINGLE ; ARM 4 · clear the register, then poll itINR? (discard) … poll INR? until bit 0 (value 1) is set 5 · read outC1:WF? DAT2

INR is destructiveReading INR? clears it. Read once to flush stale state before arming, then poll. Bit 13 (8192) means "trigger ready"; bit 0 (1) means "new signal acquired".

*OPC? blocks the interface until pending operations finish — useful after a slow *CAL? or a large PNSU, not as a substitute for polling INR on a trigger that may never arrive.

Screenshot to a file

SCDP
sds.chunk_size = 20*1024*1024 sds.timeout = 30000 sds.write("SCDP") open("screen.bmp", "wb").write(sds.read_raw())

The response is a complete BMP — header and all. Write the bytes straight to disk with no processing.

Faster interactive alternatives: the Print key dumps to a USB stick, and the web interface has a one-click screenshot. Use SCDP when the capture has to be scripted alongside the measurement.

Log a measurement over time

one round trip per point
sds.write("chdr off") sds.write("PACU FREQ,C1")# install into slot 1 sds.write("PASTAT ON") for _ in range(600):     print(sds.query("PAVA? STAT1"))# cur,mean,min,max,std-dev,count     time.sleep(1)

For a snapshot of everything at once, C1:PAVA? ALL returns all 27 scalar parameters in a single response — cheaper than 27 queries and guaranteed to come from one acquisition.

For unattended runs longer than a script should own, use the built-in Measure Logger (§13) instead: 0.1 s–10 min intervals, up to 4 parameters, no host required.

Read a digital channel

MSO option
sds.write("chdr off") tdiv = float(sds.query("tdiv?")) sara = float(sds.query("di:sara?"))# digital has its own rate sds.write("d0:wf? dat2") raw = sds.read_raw()[16:-2] bits = np.unpackbits(np.frombuffer(raw, np.uint8), bitorder="little") t = -(tdiv*14/2) + np.arange(len(bits))/sara

One bit per sample, LSB first. The block length in the #9 header counts points, not bytes — 700 points arrive as 88 bytes.

18 · Traps

Things that are true, undocumented or buried, and will cost you an afternoon each.

Fourteen divisions, not ten

arithmetic

Every scope script written against a 10-division assumption produces a time axis that is 40 % too short on this instrument, with the trigger in the wrong place. It looks plausible. It is wrong.

correctt₀ = −(TDIV × 14 / 2) the mistaket₀ = −(TDIV × 10 / 2)

Vertically it is a conventional 8 divisions — but the ADC spans 10.24 of them at 25 codes/div. Both numbers are unusual; neither is a typo.

Channels you aren't using cost you

ADC pairing

Leaving C2 enabled and unconnected halves C1's sample rate and memory. There is no warning; SARA? simply returns 500 MSa/s instead of 1 G.

Two-signal work belongs on C1 and C3. Four-signal work runs at 500 MSa/s and 7 Mpts, and that is simply the price.

The probe ratio is a promise, not a measurement

×10 errors

The BNCs have no probe-sense ring. C1:ATTN tells the scope what you claim is attached. Switch a PP510 to 1X and forget to change the menu and every voltage is off by ten — including trigger levels, decode thresholds and every logged measurement.

Symptom: numbers that are exactly 10× or 0.1× what you expected. Check the switch and the menu before you check anything else.

There is no clock

timestamps

The SDS1000X-E has no battery-backed real-time clock. Every power-up starts from a wrong time, and History timestamps, Data Logger records and saved filenames inherit it.

Fix once: Utility ▸ Date/Time ▸ NTP, set a server, enable Power On Sync and a periodic interval. Otherwise set the time by hand at the start of any session whose data you intend to keep.

Auto trigger lies convincingly

status word

In AUTO mode with no valid trigger, the scope free-runs and paints whatever it caught. A periodic signal can look stationary for seconds at a time. The only tell is the word top-left: Auto versus Trig'd.

When in doubt switch to NORM. A frozen or blank screen is information; a drifting trace in AUTO is not.

Binary data eats linefeeds

remote reads

Siglent's own note: waveform data may contain 0x0A and 0x0D. Any VISA or socket layer configured to read until newline will silently truncate the capture at the first sample that happens to equal 10.

Read raw, take the length from the #9 header, and never set a read termination character on a binary query.

Decode thresholds move with the scale

divisions, not volts

Serial decode thresholds are specified in divisions (−4.5 to +4.5), not volts. Rescale the channel — or press Auto Setup — and a working decode turns to garbage because the threshold followed the grid rather than the signal.

Set the vertical scale first, threshold second, and re-check both after any automatic adjustment.

Averaging a one-shot does nothing

mode confusion

AVERAGE needs many identical triggered acquisitions. On a single-shot event you get one acquisition, un-averaged, and a false sense of a clean measurement.

For single-shot noise reduction use HIGH_RES (ERES), which filters within one acquisition and yields up to +3 bits.

INR? clears on read

status polling

INR? is destructive. Read it twice and the second read returns 0 whether or not anything happened. Any polling loop must treat the first non-zero read as the event, and must flush the register once before arming.

Only bits 0 and 13 are implemented on this family: 1 = new signal acquired, 8192 = trigger ready.

SBUS is not HDMI

physical

The HDMI-shaped socket on the four-channel front panel is Siglent's proprietary logic-pod header. Siglent's warning is blunt: "Siglent device ONLY, or you will damage your devices."

Two SCPI delay conventions

TRDL vs TIM:DEL

TRDL measures trigger → screen centre. :TIMebase:DELay measures screen centre → trigger. Same interval, opposite sign convention, both live and both accepted.

Pick one per codebase. Mixing them produces waveforms that are correct but positioned as a mirror image of what you expected.

Maintenance you owe it

keeping specs true
Warm up30 minutes before accurate work
Self Calafter any 5 °C change — inputs disconnected
Compensateevery probe, on its own channel, after any swap
Ventilation10 cm clear beside, above and behind; check the fan intake
Firmwarevia USB stick or the web page — Bode II arrived in 6.1.33, bin→CSV in 6.1.26
Self testUtility ▸ Do self-Test for screen, keys and LEDs
System statusUtility ▸ System Status — firmware, FPGA, hardware rev, serial, boot count
provenanceInstrument specifications, menu paths, SCPI syntax and the binary layout on this page come from SIGLENT's own documents for this scope: SDS1000X-E Data Sheet EN04H, SDS1000X-E/X-U User Manual EN05B, SDS1000X-E/X-U Quick Start EN05B, Digital Oscilloscope Series Programming Guide EN02E (336 pp.), How to Extract Data from the Binary File EN03A, SDS Data Logger Application Notes 01A, Measuring Power Supply Control Loop with Bode Plot II, and the SIGLENT Probe Data Sheet EN02C. Everything in §03 Probing, §04 Safety, §07 Sampling & Bandwidth, the FFT window guidance in §11 and the holdoff guidance in §08 is general oscilloscope practice that Siglent's manuals do not cover — drawn from Tektronix, Keysight, Rohde & Schwarz, Teledyne LeCroy, Analog Devices and NI application notes, and cross-checked against this instrument's published numbers. Where a rule of thumb and a spec disagreed, the spec won.