包长48位,我已经弄清楚了大多数位。即使在数据包的其余部分只有一个位的更改,最少8位也会更改。所以我猜想这一定是某种校验和。尝试了所有我知道的校验和算法,但都不合适。
数据包的问题是运动传感器正在发送RF传输(下面的历史记录)。这些位是
4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------------------------------------------------------
p p p p p s s s 0 0 m t 1 i i i i i i i i 1 i i i i i i i i 1 i i i i i i i i 1 c c c c c c c c
p = Preamble (11111), helps is demodulating the signal by providing enough transitions.
s = Some sort of status (only changed when sensor was initializing after power up)
m = '1' When motion is detected.
t = '1' when tamper switch is pressed.
i = Unique sensor ID which is also printed on the back of the sensor.
c = These bits change whenever any of the other bit change. I'm guessing this is checksum.
注意:
固定的0和1可能是一些其他状态报告,其中br />只是在运动传感器的情况下不要改变。
ID(i)以非字节偏移量嵌入数据包中。似乎
ID嵌入为“ 1”,后跟8位,也许协议最初是为八进制设计的。它的
总是一样。
这个系统已经使用了10多年了,我不希望它使用任何复杂的东西。对于三个不同的传感器,
FA 19 D4 3E 3B A7 (11111010 00011001 11010100 00111110 00111011 10100111)
F9 29 D4 3E 3B EE (11111001 00101001 11010100 00111110 00111011 11101110)
F9 39 D4 3E 3B 44 (11111001 00111001 11010100 00111110 00111011 01000100)
FC 29 D4 C7 11 D4 (11111100 00101001 11010100 11000111 00010001 11010100)
F9 39 D4 C7 11 19 (11111001 00111001 11010100 11000111 00010001 00011001)
F9 29 D4 C7 11 B3 (11111001 00101001 11010100 11000111 00010001 10110011)
FA 19 D4 C7 11 FA (11111010 00011001 11010100 11000111 00010001 11111010)
F9 29 AE 8E DF 57 (11111001 00101001 10101110 10001110 11011111 01010111)
F9 39 AE 8E DF FD (11111001 00111001 10101110 10001110 11011111 11111101)
这不是黑客之类的事情。这一切都是从使用SDR和GnuRadio解调一些RF传输的简单练习开始的。一旦正确解调,找出数据包格式将是一个挑战,但是这个校验和问题现在让我发疯了。
#1 楼
(我没有足够的声誉发表评论,所以请原谅。)您需要考虑某些位是否不是分组数据的一部分,而是编码的一部分用于传输。
例如1在规则间隔的位8、17、26、35位置很可能会防止0的行程过长。 (了解调制方案可能会有所帮助。)例如,可能您的消息数据实际上是:
1sss00mt iiiiiiii iiiiiiii iiiiiiii cccccccc
然后传输为:
'1111' byte[0] '1' byte[1] '1' byte[2] '1' byte[3] '1' byte[4]
然后任何校验和都可能仅基于消息数据。
#2 楼
许多校验和,尤其是带有少量数据包的校验和,很容易将负担压在嵌入式设备的小脑子上。 />通常,设计校验和的目的是使最终结果为0(零),因为检查起来非常简单。 >
添加所有字节(8位块),示例结果&0xFF(低8位),是否为零?还是总是常数?
减去字节。从零开始,减去每个块。你又得到零吗?还是每个数据包的常量值?
或字节数,与上面相同。
通常,微控制器可能具有4位总线...重复一次以前的检查,同时一次使用4位。它可能具有16位总线的可能性很小,但对于较小的设备,可能性很小。
要记住的另一件事是,解调后的信号可能与
polarity
相反。也许1
是0
,反之亦然?许多设备的逻辑低电平有效,这意味着当发信号/指示某物而不是一时,它们在总线上显示零。 (尽管我认为在这种情况下,校验和的最终结果可能是全1)。状态条件。每次都得到相同的分组数据吗?也许有一个柜台,或者我是Alive的一种价值?但我会对稳态期间的变化(如果有)感到好奇。
评论
我已经尝试过手动提到的所有内容。可能有东西。我可以尝试编写一些代码,以确保我不会错过任何内容。关于稳定状态更改,正如我提到的,没有计数器/滚动代码之类的东西。一旦运动停止或防拆开关恢复到原始状态,它会重新传输相同的旧数据和相同的旧校验和(我知道对于安全传感器而言,它确实不是很好)
– chis
2014年6月20日在1:54
好吧,维尼!我知道不知道最后几位代表什么会令我烦恼,但是看起来您已经解码了大多数数据包,并且可以将数据用作传感器结果。 (我的内在强迫症患者抱怨道,我们需要knooooowww {sigh})
– lornix
2014年6月20日在1:57
还有一件事,这对货币对中的三个在第二个字节中有29/39。但是校验和变化是多个位,没有明显的模式。这让我想知道它是否还不仅仅是简单的异或/加/减。因此,我还尝试了几种CRC,特别是CRC8,它具有不同的多项式。但是仍然没有合适的选择。而且我怀疑它是否会使用像SHA这样更复杂的东西作为校验和。
– chis
2014年6月20日在2:08
评论
那是个很好的观点。我也尝试过,没有运气。还尝试过强制执行简单的加/减和位操作,但还是没有运气。我最好的猜测是,它至少涉及XOR,因为更改一个特定位会在校验和中切换三个特定位(无论其余位如何)。
– chis
2014年6月23日在1:40