0

無線屋外気象ステーションから送信されたメッセージを解読しています。チェックサムの計算方法を決定できなかったことを除いて、ほとんどのプロトコルが何を意味するかを理解しました。これが私がこれまでに見つけたものです:

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

したがって、上記の例では、温度は 11.6 度で湿度は 50% でした。屋外送信機の電池を交換すると、「id」フィールドが「ランダム」な値に変わります。最後の 8 ビットは、ID/温度/湿度が変化したときにのみ変化するため、それらがチェックサム/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

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 に答える