0

我正在解码无线室外气象站发送的消息。我已经弄清楚了大多数协议的含义,除了无法确定如何计算校验和。这是我到目前为止发现的:

 0100 0111 0110 0000 0111 0100 0011 0010 1110 0110
|----|---------|--------------|---------|---------|
 start   id         temp        humidity  checksum?

所以在上面的例子中,温度是 11.6 度,湿度是 50%。当我更换室外发射器中的电池时,“id”字段变为“随机”值。最后 8 位仅在 id/temp/湿度发生变化时发生变化,所以我相当确定这些是校验和/crc 位。

这里有一堆不同的传输:

0100 1110 0101 0000 1001 0010 0011 0011 1010 0001
0100 1110 0101 0000 1001 0010 0011 0100 0011 0110
0100 0111 0110 0000 1001 0010 0011 0100 0110 1100
0100 0111 0110 0000 1001 0010 0011 0101 0101 1101
0100 0111 0110 0000 1001 0100 0011 0101 0000 0111
0100 0111 0110 0000 1001 0101 0011 0110 1010 0000
0100 0111 0110 0000 1001 1000 0011 0111 1101 0001
0100 0111 0110 0000 1010 1000 0011 0111 0110 0011
0100 0111 0110 0000 1010 1001 0011 0111 1001 0111
0100 0111 0110 0000 1010 1010 0011 0111 1011 1010
0100 0111 0110 0000 0111 0100 0011 0010 1110 0110
0100 0111 0110 0000 0111 0101 0011 0010 0001 0010
0100 0111 0110 0000 0111 0110 0011 0010 0011 1111

我不熟悉校验和/CRC技术,任何人都可以看到这里可能会使用什么或指出我如何确定这一点的方向吗?

4

2 回答 2

1

说真的,您最好的选择可能是去气象站查看制造商和型号,然后将其插入 Google 或向制造商发送电子邮件询问校验和是如何计算的。

如果他们不愿发布信息,请告诉他们您正在评估解决方案,您可能会根据为其编写软件的难易程度决定购买 10 到 100 台设备(信息请求未在誓言和社会工程学通常仍然是获取您通常不会看到的信息的最简单方法)。

于 2012-08-18T01:41:12.180 回答
0

破解OK。这是从前 4 个字节中生成第 5 个字节的 C# 代码。

/// <summary>A variant of CRC-8</summary>
/// <param name="data">Pass here the first 4 bytes of data, e.g. { 0x4E 0x50 0x92 0x33 }</param>
/// <returns>The computed SRC value, e.g. 0xA1 for the data specified above.</returns>
static byte src8( byte[] data )
{
    byte res = 0;
    foreach( byte b in data )
    {
        byte val = b;
        for( int i = 0; i < 8; i++ )
        {
            byte tmp = (byte)( ( res ^ val ) & 0x80 );
            res <<= 1;
            if( 0 != tmp )
                res ^= 0x31;
            val <<= 1;
        }
    }
    return res;
}
于 2012-08-18T03:28:33.160 回答