IR 协议中的校验和字段

逆向工程 协议 CRC
2021-07-05 21:08:18

我正在尝试对我的空调(GREE - 远程控制 YAP1FF)的 IR 协议进行逆向工程,根据我在网上找到的数据以及使用 IR 接收器进行的大量测试,只有一个字段我仍然无法计算。

我正在粘贴一些不同的消息,我感兴趣的字段是 8 位长,用括号分隔。

m1 内的值对场没有影响。该字段只有在我设置自动开机或关机时间时才有数据。时间在 m2 上。

平方米:

  • 11 位 = 到通电时间剩余的分钟数(1 到 1440)
  • 1 位 = '1'
  • 11 位 = 关机前剩余的分钟数(1 到 1440)
  • 1 位 = '0'
  • 1 位 = '0' 如果断电功能被禁用,1 如果启用
  • 1 位 = '0' 如果禁用开机功能,则为 1 如果启用
  • 2 位 = '00'
  • 4 位 = 一般校验和(m1 和 m2 一起)。我有这个校验和的公式

所有字段都以相反的位顺序存储(小端?)

如果开机时间是从当前时间开始的 1 到 14 分钟,则该字段始终为 00010000;从 15 到 29 分钟是 10010000;从 30 到 44 是 00011000。它每 15 分钟改变一次,所以我猜第 4 位没有被用来计算它。

m1=100100001010[00011000]011000000110010 m2=10011001101110101100000011001110
m1=100000000110[00110010]010000000110010 m2=00101001101100000000000001000111
m1=100000000110[10111100]010000000110010 m2=10001001101100000000000001001011
m1=100000000110[00111100]010000000110010 m2=10010110101100000000000001000101
m1=100000000110[10110100]010000000110010 m2=10101010101100000000000001000001
m1=100000000110[10110100]010000000110010 m2=11001010101100000000000001000001
m1=100000000110[10110100]010000000110010 m2=00011100101100000000000001000110
m1=100000000110[00110100]010000000110010 m2=11101100101100000000000001000110
m1=100000000110[00110010]010000000110010 m2=11111001101100000000000001000111
m1=100100000010[00011000]011000000110010 m2=01111001101101011100000011001101
m1=100000000110[00010000]010000000110010 m2=10000000000100000000000001001000
m1=100100000010[10011000]011000000110010 m2=00001000000100110010000011001010
m1=100000000110[10010000]010000000110010 m2=00001000000100000000000001000100
m1=100100000010[10011000]011000000110010 m2=10010100000110100110000011001111
m1=100000000110[00011000]010000000110010 m2=01110100000100000000000001000010
m1=100100000010[00010100]011000000110010 m2=11100010000111000001000011000000
m1=100000000110[10011000]010000000110010 m2=00110010000100000000000001000110
m1=100100000010[10010100]011000000110010 m2=11000110000111111001000011000111
m1=100100000010[00010100]011000000110010 m2=01010110000100000000000001001111
m1=100100000010[00011100]011000000110010 m2=11000001000111111101000011001000
m1=100100000010[10010100]011000000110010 m2=00010001000100000000000001001000
m1=100100000010[10011100]011000000110010 m2=00010001000100100011000011000110
m1=100000000110[00010000]010000000110010 m2=00000000000101000000000010001100
m1=100000000110[10010000]010000000110010 m2=00000000000110001000000010000100

如果同时禁用开机和关机功能,该字段将始终为 00000000

1个回答

我没有实际的答案,但是这太长了,无法作为评论,所以我将其添加到此处。

我相信您已经注意到您感兴趣的那个字节的位模式并不是特别随机。三个固定为 0 或 1,除此之外,实际上几乎没有看起来像您期望的有效校验和的方式均匀分布。鉴于您在 m2 中观察到的模式1本身用作分隔符,第 4 位(如果我们从 0 开始,则为第 3 位)似乎是这样的分隔符。

进行一些相关分析(有点像差分密码分析)来确定 m2 中哪些潜在的输入位与字节中一些看起来更随机的输出位有很好的相关性可能很有用。

此外,如果您使用我上面建议的使用 1 作为分隔符的想法,那么您实际上只是在查看两个不同的值,其中第一个值只有 0、1、4 和 5,第二个值是 0-4。也许在查看 m2 中的数据时使用这些值会很有用。