E1.20 RDM (Remote Device Management) Protocol Forums  

Go Back   E1.20 RDM (Remote Device Management) Protocol Forums > RDM Developer Forums > RDM General Implementation Discussion

RDM General Implementation Discussion General Discussion and questions relating to implementing RDM in a product.

 
 
Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old September 20th, 2006   #1
nic123
Junior Member
 
Join Date: Jun 2006
Posts: 14
Default Discovery Checksum Problem Analysis

Hello

David our resident guru , has analysed the probability of getting one good discovery response when in fact 2 devices are replying at the same time (below)

The problem seems to appear a lot more often than I have won the lotto ! Maybe there should be some kind of implementation guide that could
recommend having a small backoff timer of some sort to reduce the probability of having this problem. (like ethernet PHYs)
Considering most lighting rigs are composed of at least multiple devices of a same manuafcturer that were probably purchased at the same time,
I't very possible for an end user to have sequential device IDs.

Nic
www.enttec.com


1. Discovery Collision Analysis

1.1 Uncorrupted msg

MID1 | 0xAA
MID1 | 0x55
MID0 | 0xAA
MID0 | 0x55
DID3 | 0xAA
DID3 | 0x55
DID2 | 0xAA
DID2 | 0x55
DID1 | 0xAA
DID1 | 0x55
DID0 | 0xAA
DID0 | 0x55
-------------
CSUM1 | 0xAA
CSUM1 | 0x55
CSUM0 | 0xAA
CSUM0 | 0x55


CSUM = (MID1|0xAA + MID0|0xAA + DID3|0xAA + DID2|0xAA + DID1|0xAA + DID0|0xAA) +
(MID1|0x55 + MID0|0x55 + DID3|0x55 + DID2|0x55 + DID1|0x55 + DID0|0x55)
= (MID1 + MID0 + DID3 + DID2 + DID1 + DID0) + 6*0xFF
= (MID1 + MID0 + DID3 + DID2 + DID1 + DID0) + 0x5FA


1.2 Single Bit Corruption

Suppose there are 2 responders A and B with UIDs which differ only in DIDx.

Collided msg would differ from original msgs A and B in the DIDx bytes and the checksum bytes, as follows.

CSUMB - CSUMA = (DIDBx|0xAA + DIDBx|0x55) - (DIDAx|0xAA + DIDAx|0x55)

COLLISION(DIDAx|0xAA, DIDBx|0xAA) = (DIDAx | 0xAA) & (DIDBx | 0xAA) = (DIDAx & DIDBx) | 0xAA
COLLISION(DIDAx|0x55, DIDBx|0x55) = (DIDAx | 0x55) & (DIDBx | 0x55) = (DIDAx & DIDBx) | 0x55

COLLISION(CSUMA1|0xAA, CSUMB1|0xAA) = (CSUMA1 | 0xAA) & (CSUMB1 | 0xAA) = (CSUMA1 & CSUMB1) | 0xAA
COLLISION(CSUMA1|0x55, CSUMB1|0x55) = (CSUMA1 | 0x55) & (CSUMB1 | 0x55) = (CSUMA1 & CSUMB1) | 0x55
COLLISION(CSUMA0|0xAA, CSUMB0|0xAA) = (CSUMA0 | 0xAA) & (CSUMB0 | 0xAA) = (CSUMA0 & CSUMB0) | 0xAA
COLLISION(CSUMA0|0x55, CSUMB0|0x55) = (CSUMA0 | 0x55) & (CSUMB0 | 0x55) = (CSUMA0 & CSUMB0) | 0x55

Taking checksum over collided msg gives

CSUM(over EUID part of collided msg) - CSUMA = [(DIDAx & DIDBx) | 0xAA] + [(DIDAx & DIDBx) | 0x55] -
- [DIDAx | 0xAA] - [DIDAx | 0x55]

= (DIDAx & DIDBx) - DIDAx

CSUM1(recovered from CSUM part of collided msg) = (CSUMA1 & CSUMB1)
CSUM0(recovered from CSUM part of collided msg) = (CSUMA0 & CSUMB0)
=>
CSUM(recovered from CSUM part of collided msg) = CSUMA & CSUMB
= CSUMA & [CSUMA + (DIDBx|0xAA) + (DIDBx|0x55)
- (DIDAx|0xAA) - (DIDAx|0x55)]

= CSUMA & [CSUMA + DIDBx - DIDAx]

For collided msg to have good checksum:
CSUMA + (DIDAx & DIDBx) - DIDAx = CSUMA & (CSUMA + DIDBx - DIDAx)

For the Special Case where DIDBx is obtained from DIDAx by changing a single bit from 0 to 1:

bit k of DIDAx = 0 and DIDBx = DIDAx + (1 << k), where 0 <= k <= 7.
DIDAx & DIDBx = DIDAx
CSUMA = CSUMA & (CSUMA + (1<<k)), which is true whenever bit k of CSUMA is 0.

CONCLUSION:
For the special case of a single bit difference in the device IDs, there is a 50% chance of the discovery collision
having a good checksum when ideally the discovery collision checksum should be bad.

Last edited by nic123; September 20th, 2006 at 10:54 PM.
nic123 is offline   Reply With Quote
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Incremental Discovery prwatE120 RDM General Implementation Discussion 0 September 26th, 2008 12:49 AM
Discovery Response Preamble prwatE120 RDM General Implementation Discussion 0 January 20th, 2007 12:22 AM
Table 6-6 Checksum Example Error prwatE120 RDM Interpretation Questions 1 January 19th, 2007 06:49 PM
Checksum curiosa sjackman RDM General Implementation Discussion 3 October 3rd, 2006 06:24 AM


All times are GMT -6. The time now is 08:04 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc.