Skip to content

Help wanted: UT804 protocol verification (real hardware needed) #16

Description

@antoinecellerier

Summary

The UT804 protocol was implemented from reverse engineering (Ghidra decompilation of UT804.exe V2.00 and binary constant extraction) and has never been tested against real hardware. Every aspect needs end-to-end verification.

Key finding: the UT804 uses FS9721-style 14-byte framing but with proprietary structured data — nibbles carry explicit mode codes, range codes and digit values, not raw LCD segment data.

What we need

Someone with a UT804 multimeter and its USB cable (CH9325 HID bridge, 1A86:E008).

What needs verification

Each line is one step of dmm-cli --device ut804 capture; a box gets ticked when a report from a real meter confirms it.

  • dcv — Set meter to DC V
  • dcv_short — DC V mode: touch the two probe tips together.
  • dcv_negative — Set meter to DC V with leads reversed (negative reading)
  • acv — Set meter to AC V
  • acdcv — Set meter to AC+DC V (if the meter has it)
  • dcmv — Set meter to DC mV
  • acmv — Set meter to AC mV (if the meter has it)
  • ohm — Set meter to Resistance (Ω)
  • ohm_ol — Set meter to Resistance (Ω) with open leads (overload)
  • ohm_body — Resistance mode: hold one probe tip between the fingers of each hand (body resistance, hundreds of kΩ).
  • ohm_short — Resistance mode: touch the two probe tips together.
  • cap — Set meter to Capacitance
  • hz — Set meter to Frequency (Hz)
  • duty — Frequency mode: switch the display to Duty Cycle (%)
  • rpm — Set meter to Tachometer / RPM (UT803 only)
  • diode — Set meter to Diode
  • cont — Set meter to Continuity
  • temp — Set meter to temperature (K-type thermocouple, if available)
  • dcua — Set meter to DC µA
  • acua — Set meter to AC µA
  • dcma — Set meter to DC mA
  • acma — Set meter to AC mA
  • dca — Set meter to DC A
  • aca — Set meter to AC A
  • adp — Set meter to ADP / logic (UT804 only)
  • ma_percent — Set meter to % (4-20 mA loop)
  • hold — Press HOLD (wire encoding unknown — capture needed)

The CH9325 cable is receive-only, so the tool cannot press buttons: the hold step asks you to press HOLD, and the report's raw frames are what settle the flag encodings. Framing, the marker nibbles, the digit encoding, the sign, overload, AC+DC, the ADP/logic mode and the streaming rate are settled by the steps above.

Not covered by a capture step:

  • MIN/MAX, REL and the low-battery indicator — press each on the meter during an extra freeform capture and say which annunciator was lit; nibbles 12–14 are the candidates
  • Whether the meter needs the 0x5A trigger byte — the tool does not send it; if nothing ever streams, say so

One box below is not a capture step. Auto-detection landed in #9--device auto is the default now, so the tool picks the meter itself — but only the UT61+ family has ever answered the detector on a bench. The UT804 arm was read off the vendor traces: the meter streams over the CH9325 cable, and detection tells a UT804 from a UT803 by the marker nibbles in the frame.

  • Auto-detection names this meter with no --device given

Verification steps

Use a dev build newer than 6d035fc4e2d15b2b6df7d22ea1a70b6c39e3a9c4, or build from source with cargo build --workspace.

dmm-cli list                                         # the meter should be listed
RUST_LOG=dmm_lib=debug dmm-cli --device auto info    # detection (#9): does it name your meter?
dmm-cli --device ut804 capture --unverified          # the steps above, then attach capture-ut804.yaml

The tool captures each step on its own once the meter settles into the mode asked for, asks you to confirm readings against the LCD. It says up front what it needs on the bench (shorted leads, a DC source); tell it what you lack and those steps are skipped. The report auto-saves after each step, so an interrupted run can be resumed.

More options
dmm-cli --device ut804 capture --list-steps        # every step, ✓ where hardware already confirmed it
dmm-cli --device ut804 capture --steps dcv,acv      # a subset
dmm-cli --device ut804 capture                      # the full run, confirmed steps included
RUST_LOG=dmm_lib=trace dmm-cli --device ut804 debug --count 5   # only if `list` shows nothing or capture gets no frames

What to report

  • Meter model and firmware version if shown at power-on
  • OS, version and architecture; which archive, or dmm-cli --version for a source build
  • The cable: bundled or bought separately, and its VID:PID (CH9325 1A86:E008; lsusb, ioreg -p IOUSB -l, or Device Manager)
  • The capture-ut804.yaml file — it holds every frame the meter sent and every parse rejection, so no separate trace run is needed unless the meter is not detected at all
  • An LCD photo beside the tool's output for any reading the tool got wrong

Protocol reference

docs/research/ut803/reverse-engineered-protocol.md

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions