三星IR代码校验和

问题描述 投票:3回答:4

我有很长时间用最佳的Ken Shirriff Arduino库解码IR代码。我稍微修改了一下代码,以便能够转储三星空调(MH026FB)56位信号。

我的工作成果位于Google Docs文档Samsung MH026FB AirCon IR Codes Dump中。

这是一个包含所有倾销值和结果解释的spreasheet。 AFAIK,空调机组根据命令发出两个或三个56位数据的“突发”。我能够正确解码位,找出空调温度,风扇,功能和其他选项的位置。

我遇到的问题与校验和有关。在所有这些7字节代码中,第二个代码是从后5个字节以某种方式计算的,例如:

BF B2 0F FF FF FF F0   (lead-in code)
7F B8 8A 71 F6 4F F0   (auto mode - 25 degrees)
7F B2 80 71 7A 4F F0   (auto mode - 26 degrees)
7F B4 80 71 FA 7D F0   (heat mode - 26 degrees - fan auto)

由于我在运行时重新创建IR代码,因此我需要能够为这些代码计算校验和。

我尝试了许多标准校验和算法,但都没有给出有意义的结果。校验和似乎与其余代码中的零个数(3到7个字节)有关,但我真的无法弄清楚如何。

有这个问题的解决方案吗?

arduino checksum infrared
4个回答
3
投票

Ken Shirriff对此进行了整理。算法如下:

  1. 计算除#2(校验和)之外的所有字节中的1位数
  2. 计算计数模式15.如果值为0,请改用15。
  3. 取2的值,翻转4位,然后反转4位。
  4. 校验和是Bn,其中n是上一步的值。

恭喜他的聪明和敏锐。


1
投票

bytes/packets和0/1中的位顺序被正确解释时(从算法看起来两者都被反转),算法将只是sum of 0 bits modulo 15


1
投票

这几乎是正确的。计算0/1(您可以将它们称为您喜欢的,但它是短信号)。不要计算2.byte的2.字节和第一位/最后一位(取决于你是看到它是大印度还是小印度)。取结果和-30(29-30 = 15,仅查看4位!)反向结果Checksum = 0x4“reverse resultesult”,如果短信号= ​​0,则0xB“反向结果”如果长信号= 0。


0
投票

我用Ken的方法,但mod 15对我没用。

计算除#2(校验和)之外的所有字节中的1位数。计算计数模17.如果值为16,则使用模式结果的第一个字节(0)。取值,翻转4位。校验和为0xn9,其中n是上一步的值。

© www.soinside.com 2019 - 2024. All rights reserved.