三星IR代码校验和

时间:2012-08-08 11:52:50

标签: arduino checksum infrared

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

我的工作成果位于Google文档文档 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),但我真的无法弄清楚如何。

这个问题有解决方法吗?

4 个答案:

答案 0 :(得分:3)

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

  1. 计算除#2(校验和)以外的所有字节中的1位数
  2. 计算计数模式15 。如果值为0,请改用15。
  3. 取2的值,翻转 4位,反转 4位。
  4. 校验和 Bn ,其中n是上一步的值。
  5. 祝贺他的聪明和敏锐。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这几乎是正确的。 计算0/1(您可以按自己的喜好称呼它们,但这是短信号)。 不要计算2.字节和3.byte的第一位/最后一位(取决于您是看它是印度人还是印度人)。 取结果和-30(29-30 = 15,仅看4位!) 反转结果 如果短信号= ​​0,则校验和= 0x4“反向结果”;如果长信号= 0,则校验和= 0xB“反向结果”。

答案 3 :(得分:0)

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

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