3

Iridium モジュール (Short Burst Data) から受信したメッセージ (バイト単位) のチェックサムの最下位 2 バイトを計算する必要があります。

私が使用しているコードはほとんどの場合に機能しますが、以下の例では機能しません。

私のコードは次のとおりです。

z=b"AT+SBDRB\r\x00\x18this is a random message\x08\xdb"#message received from Iridium module
msg=z[11:-2]
print(msg)
checksum_received = z[-2:]
checksum = 0
check_it = False

for c in msg:
    checksum = checksum + c #msg is a byte type

a=chr( checksum >> 8 ) 
b=chr( checksum & 0xFF )
c=a.encode()
d=b.encode()
checksum = c + d

print(c.hex())
print(d.hex())
print(checksum.hex())
print(checksum_received.hex())
print(checksum == checksum_received)

上記の場合、チェックサムは受信したチェックサムとは異なります (実際に送信エラーが発生していないことを確認するために、メッセージを複数回送信しようとしました)。

次のメッセージでコードをテストしましたが、2 つのチェックサムは同じです。

z=b"AT+SBDRB\r\x00\x05hello\x02\x14"
z=b"AT+SBDRB\r\x00\x14thisisarandommessage\x08["
z=b"AT+SBDRB\r\x00\x15this isarandommessage\x08{"

Iridium SBDS マニュアルに記載されている唯一の情報は次のとおりです。

チェックサムは、SBD メッセージ全体の合計の最下位 2 バイトです。上位バイトを最初に送信する必要があります。たとえば、FA が ASCII でエンコードされた単語「hello」を ISU に送信する場合、バイナリ ストリームは 16 進数 68 65 6c 6c 6f 02 14 になります。

4

2 に答える 2