What is a Discovery Unique Branch dump?
It is the responder answer to DISC_UNIQUE_BRANCH. E1.20 discovery walks UID ranges. A responder in range replies with this encoded body so a collision still has a detectable shape.
It is not DMX start code 0x00 and it is not an Ethernet frame. Classifiers that force Message Length minus 24 will misread it.
How is a DUB response encoded?
Layout is 0 to 7 bytes of 0xFE, one 0xAA separator, twelve EUID bytes, four encoded checksum bytes. This sample uses 7 preamble bytes. Decode kind is dub.
fe fe fe fe fe fe fe aa ab 5d ea dd aa f5 ba 55 aa 55 aa 55 af 57 fb 7f
| Region | Count | This sample |
|---|---|---|
| Preamble 0xFE | 7 | Dropped from the checksum |
| Separator 0xAA | 1 | Marks the start of EUID |
| EUID | 12 | ab 5d ea dd aa f5 ba 55 aa 55 aa 55 |
| Encoded checksum | 4 | af 57 fb 7f |
How do I decode 0xFE 0xAA pairs into a UID?
Each original UID byte is sent as two slots: value OR 0xAA, then value OR 0x55. Recover with AND. For manufacturer byte 0x09 the pair is 0xab and 0x5d.
| UID byte | OR 0xAA | OR 0x55 | AND recovers |
|---|---|---|---|
| 0x09 | 0xab | 0x5d | 0x09 |
| 0xc8 | 0xea | 0xdd | 0xc8 |
| 0xa0 | 0xaa | 0xf5 | 0xa0 |
| 0x10 | 0xba | 0x55 | 0x10 |
| 0x00 | 0xaa | 0x55 | 0x00 |
| 0x00 | 0xaa | 0x55 | 0x00 |
Recovered UID on this sample is 09c8:a0100000. Decode ok is true.
Which bytes go into the DUB checksum?
Only the twelve EUID bytes. Expected 0x077b, received 0x077b, pass true. Worked additive math lives on how to calculate an E1.20 checksum.
Flip the last encoded checksum byte and this encoder reports DUB_CHECKSUM_MISMATCH: expected 0x077b, received 0x0780.
Is DISC_UNIQUE_BRANCH the same as the 0xFE response?
No. The controller request is a normal 0xCC PDU, command class DISCOVERY_COMMAND, PID DISC_UNIQUE_BRANCH (0x0001), parameter data twelve bytes of lower then upper UID.
This encoder's request starts 0xcc 0x01. Named PID is DISC_UNIQUE_BRANCH. GET IDENTIFY from Load Example classifies as rdm, not dub.
cc 01 24 ff ff ff ff ff ff 09 c8 01 00 cd f9 01 01 00 00 00 10 00 01 0c 00 00 00 00 00 00 ff ff ff ff ff ff 0f 9c
What does a collision look like versus silence?
No responder in range: empty UART. One clean responder: preamble, 0xAA, sixteen encoded bytes, checksum PASS. Two responders at once: overlapping 0xFE/0xAA streams. The recovered AND pairs fail the twelve-byte sum.
Firmware logs that print BranchComplete with zero bytes are a capture or timing problem, not a 0xCC checksum miss. Dropping the first three 0xFE bytes still classifies as dub here (kind dub, ok true) because the remaining preamble still leads to 0xAA.
What should I paste into the decoder?
Paste the DUB body, not a pcap, not an ENTTEC 0x7E-0xE7 wrap. If the dump starts CC 01 it is a command or DISC request. See what CC 01 means and the ENTTEC wrapper note.
Frequently asked questions
How do I decode an RDM Discovery Unique Branch dump?
Count 0xFE preambles (0 to 7), require 0xAA, recover six UID bytes by ANDing each EUID pair, then checksum the twelve EUID bytes only.
Is a DUB response a 0xCC frame?
No. DISC_UNIQUE_BRANCH on the wire as a controller request starts CC 01. The responder answer starts with 0xFE and 0xAA, not 0xCC.
How is a Discovery Unique Branch checksum calculated?
Sum the twelve encoded UID bytes after 0xAA. On this sample that total is 0x077b. Preamble 0xFE bytes are not in the sum.
What does collision / invalid DUB checksum mean?
Two responders talking at once, or a corrupt encoding. This parser still names the UID bytes it recovered. The decode stays FAIL.
Can I paste a DUB dump into the browser decoder?
Yes. HEX stays in this browser. Load the DUB sample or paste FE AA bytes. There is no upload.
