借助BC7215A芯片分析破解任意空调红外遥控协议
本文介绍了使用BC7215A芯片破解空调红外遥控协议的方法。通过分析TCL空调遥控信号的数据结构,文章详细阐述了如何利用BC7215A芯片直接获取红外遥控信号的原始数据,并通过对比不同设置下的数据变化,逐步解析出温度、风力、摆风、模式等控制参数对应的数据位。此外,文章还探讨了校验值的计算方法,并总结了破解空调遥控协议的通用步骤。该方法不仅适用于TCL空调,也可应用于其他品牌空调的遥控协议分析。
电子产品开发人员有时会需要通过红外遥控控制空调或者其它支持红外遥控的产品,如电视、机顶盒等的需求,这类红外遥控的编码协议,通常并没有统一的标准,而是由各个厂家自行定义。在不了解其编码协议规则的情况下,会给产品的开发增加很大难度。
这里介绍一个使用万能红外编解码芯片BC7215A来分析破解任意空调红外遥控编码协议的方法。
红外遥控指令的编码格式,可以分为红外载波信号的波形调制和原始数据结构两个部分。用于红外遥控的红外载波调制格式,通常包括引导码的脉冲宽度,数据0和数据1的波形等信息,这些是空外遥控信号的基本格式,如果这些格式不符,会造成信号根本不会被接收设备识别接收。BC7215A可以解析所接收的信号的调制格式,并用于复制原红外控制信号的格式,但这不是这篇文章的关注重点,本文主要讨论如何分析破解空调遥控协议的数据格式。
BC7215A芯片具有实时直接输出红外遥控信号的原始数据的功能,因此,借助这个芯片,我们就可以省却记录红外信号波形、人工将其转换为二进制数据的步骤,直接得到原始数据,大大节省工作量。
下面以TCL某款空调为例,讲解如何分析其红外遥控信号的数据结构,从而可以根据需要生成符合自己需要的红外遥控信号,达到设置空调温度等目的。
BC7215A的DEMO板和串口调试软件,是所需的全部软硬件设备,该DEMO板通过USB连在计算机上后,会模拟出一个串口,当DEMO板接收到红外遥控信号,就会将遥控信号的原始数据,通过串口传给计算机。串口的参数,必须设置为波特率19200,2个停止位,无奇偶校验,使用RTS/CTS硬件流控制。
下面是一个典型的BC7215A输出数据:

数据由几部分组成:
1. 结束标志
数据的结尾,一定是0x7A,而且0x7A只会出现在数据的末尾,如果在数据的其它部分有0x7A这个值,会被替换为0x7B 0xFA 两个字节,同时,为了不和原始的0x7B数据混淆,原始数据中的0x7B也被替换为0x7B 0xFB两个字节。这样,0x7A就只会出现在数据的末尾,而不会出现在正文中。
在分析数据时,先找出串口所接收数据中的0x7A,每两个0x7A之间,就是数据正文。在使用数据正文之前,还要寻找其中有没有0x7B数据,如果有,需要将0x7B删除,并将其后一个字节(必为0xFA或0xFB之一)的最高位清零,这样就得到了真正的数据正文。
2. 数据位数
在0x7A前面两个字节,是红外遥控原始数据的数据位数,以bit为单位,用16进制表示。上面典型数据中,其值为0x0070, 等于十进制的112,112/8=14,即得到遥控信号原始数据的字节数。
3. 特征字
特征字和红外信号的调制格式有关,这里和我们无关,可以忽略。
4. 红外遥控原始数据
每段接收到的数据中,除去最后结尾处的4个字节,其余即为原红外遥控信号中的原始数据。
解析空调红外遥控数据的数据格式
红外遥控器,分为固定码遥控器和可变码,固定码遥控器如电视和机顶盒一类,每个遥控器按键的数据编码是固定的,如按“音量+”按键,每次发送的数据是固定不变的。而空调的遥控器,多数是可变码,其特点是往往会自己带有液晶屏,而每次按键的编码,是随工作状态不同而不同的,比如按“温度+”按键,每次按键所发射的数据,是随设定温度的不同而不同的。
这类空调遥控器,通常不管按什么键,每次发送的数据中,都会包含完整的控制数据,即包含“温度”“工作模式”“风力大小”等所有的参数。通常,在一个空调红外遥控的数据帧中,不同的位会代表不同的控制参数,利用BC7215A方便的数据输出功能,我们只要将不同设定的遥控数据进行横向对比,就可以很容易地找出哪些位对应哪些参数,从而达到破解其数据结构的目的。
1. 分析温度数据
通过按“温度+”按键,用BC7215A芯片依次解码遥控器从16度到30度时的数据,注意其它设置尽量保持不变,这样便于分析。我们在制冷模式下,得到每次的输出数据如下:
23 CB 26 01 00 24 03 0F 38 00 00 00 00 83 // 16°C
23 CB 26 01 00 24 03 0E 38 00 00 00 00 82 // 17°C
23 CB 26 01 00 24 03 0D 38 00 00 00 00 81 // 18°C
23 CB 26 01 00 24 03 0C 38 00 00 00 00 80 // 19°C
23 CB 26 01 00 24 03 0B 38 00 00 00 00 7F // 20°C
23 CB 26 01 00 24 03 0A 38 00 00 00 00 7E // 21°C
23 CB 26 01 00 24 03 09 38 00 00 00 00 7D // 22°C
23 CB 26 01 00 24 03 08 38 00 00 00 00 7C // 23°C
23 CB 26 01 00 24 03 07 38 00 00 00 00 7B // 24°C
23 CB 26 01 00 24 03 06 38 00 00 00 00 7A // 25°C
23 CB 26 01 00 24 03 05 38 00 00 00 00 79 // 26°C
23 CB 26 01 00 24 03 04 38 00 00 00 00 78 // 27°C
23 CB 26 01 00 24 03 03 38 00 00 00 00 77 // 28°C
23 CB 26 01 00 24 03 02 38 00 00 00 00 76 // 29°C
23 CB 26 01 00 24 03 01 38 00 00 00 00 75 // 30°C
可以看到,除了第8字节和第14字节外,其它所有的数据均保持不变,也就是说只有这两个字节的数据和温度相关,而经验告诉我们,通讯数据中的最后,往往是用作校验的校验码,这点我们后面再做验证。
我们重点分析第8字节的数据,可以看到,其高4位的数据是保持不变的,而低4位数据,则随着温度从16°C变为30度,有规律地从F递减到1,因此我们可以推断第8字节的低4位,在数据结构中代表温度设置。
2. 分析风力数据
和上面过程类似,我们固定其它设置,仅按风力选择按键选择不同风力,可以得到下面数据
23 CB 26 01 00 24 03 01 3A 00 00 00 00 77 // 低
23 CB 26 01 00 24 03 01 3B 00 00 00 00 78 // 中
23 CB 26 01 00 24 03 01 3D 00 00 00 00 7A // 高
23 CB 26 01 00 24 03 01 38 00 00 00 00 75 // 自动
这次我们看到,除了第9字节和第14字节外,其余所有数据均保持不变。这也验证了前面最后字节是校验数据的推断,而显然第9字节,和风力设置有关。经过仔细分析第9字节数据,我们可以看到,随着风力的变化,实际变化的只有第9字节的低3位,对应的二进制表示为:
b2 b1 b0
0 1 0 ---- 低
0 1 1 ---- 中
1 0 1 ---- 高
0 0 0 ---- 自动
3.摆风数据分析
遥控器上的摆风按钮,每按一次会翻转“摆风”的设置,我们得到数据如下
23 CB 26 01 00 24 08 05 38 00 00 00 00 7E // 摆风开
23 CB 26 01 00 24 08 05 00 00 00 00 00 46 // 摆风关
上下对比可以很容易看到,除最后的校验数据外,只有第9字节有变化,而无门上面已经分析出,第9字节的低3位为风力的控制,所以,摆风的设置,应该是其第 b3, b4, b5 三个数据位。
4.模式数据分析
我们将所有模式的所有其它设置均设置为一个固定状态,尽量做到按模式按钮,只改变模式,而不改变其它的设置,可以得到下面的数据:
23 CB 26 01 00 24 03 05 00 00 00 00 00 41 // 制冷
23 CB 26 01 00 24 02 05 00 00 00 00 00 40 // 抽湿
23 CB 26 01 00 24 01 05 00 00 00 00 00 3F // 制热
23 CB 26 01 00 24 07 05 00 00 00 00 00 45 // 送风
23 CB 26 01 00 24 08 05 00 00 00 00 00 46 // 自动
对比后可以发现,唯一随模式变化的,是第7字节,而且仅有低4位有变化,所以我们可以推断其模式设置为第7字节的低4位,数据的对应关系为:
3 ---- 制冷
2 ---- 抽湿
1 ---- 制热
7 ---- 送风
8 ---- 自动
5. 其它按钮
用以上的方法,我们可以方便地找出其它几个功能按键所对应的数据位:
“强力”按钮,第7字节 b6 位,1=开, 0=关
“数显”按钮,第6字节 b6 位,1=关,0=开
“经济”按钮,第6字节 b7 位,1=开,0=关
“睡眠”按钮,第10字节 b0 位,1=开,0=关
6. 定时功能数据分析
接下来是比较复杂的地方,即定时功能。为了找到规律,我们可以分别采集多个信号,从中找寻数据和设置间的对应关系。我们采集下面的数据:定时10分钟,20分钟,30分钟,50分钟,1小时,1个半小时,以及2小时的数据,另外,还采集了定时后按取消按钮的数据。数据如下:
23 CB 26 01 00 2C 03 01 38 01 00 00 00 7E // 10分钟
23 CB 26 01 00 2C 03 01 38 02 00 00 00 7F // 20min
23 CB 26 01 00 2C 03 01 38 03 00 00 00 80 // 30min
23 CB 26 01 00 2C 03 01 38 05 00 00 00 82 // 50min
23 CB 26 01 00 2C 03 01 38 06 00 00 00 83 // 1h
23 CB 26 01 00 2C 03 01 38 09 00 00 00 86 //1h30min
23 CB 26 01 00 2C 03 01 38 0C 00 00 00 89 // 2h
23 CB 26 01 00 24 03 01 38 00 00 00 00 75 // 取消
观察上面的数据,可以很明显地看到其中的规律:第10字节的数据明显地和定时时间存在对应关系,仔细分析,就可发现,第10字节的数值就是定时时间按10分钟为单位的倍数,如1小时的值为6,即60分钟。
同时我们发现,当设置定时时,第6字节的数据从0x24变为了0x2C,也即b3位发生了变化,因此我们得到结论:第6字节的b3是定时设置的开关,设置定时时该位应该置1,而定时时间则在第10字节,其值即为定时时间按10分钟计数的数值。
分析取消按键的数据,我们可以发现其内容和设置其它功能时的内容并无区别,也就是说,正常的设置其他功能,同时即为取消定时功能。
7.找出校验值的计算方法
我们前面假定了最后一个字节是数据的校验值,那么我们必须找出其计算方法,否则即便我们知道了数据各部分的意义,按自己需要组合的数据帧如果校验值不对,空调机也会拒收。
校验值的计算,常见的有几种方法:
1. 累加和
2. XOR和
3. CRC值
因为空调遥控这种场合对数据的可靠性要求不是非常的高,因此通常不会采用CRC码来作为校验,我们尝试累加和XOR的方法即可。我们尝试计算几组数据:
尝试验证设定温度16度时的数据:
23 CB 26 01 00 24 03 0F 38 00 00 00 00 83 // 16°C
按16进制计算 23+CB+26+01+00+24+03+0F+38+00+00+00+00 = 0x183 , 取低8位正好和最后一个字节的值相等。
再计算定时10分钟的数据:
23+CB+26+01+00+2C+03+01+38+02+00+00+00 = 0x17F , 取低8位也正好与最后字节吻合。
如果想进一步验证,可以将所有采集的数据一一计算,会发现所有的数据均符合这个规律。
至此,我们就完全破解了该款TCL空调的数据结构,至于数据中的其它部分,比如数据最前面5个字节
23 CB 26 01 00 ,
从未发生改变,这属于是厂家定义的固定数据,可能是有关产品型号的编码,也可能有其他含义,我们并无需关心,只需原样复制即可。
总结
通过以上的例子,我们了解了分析破解空调遥控协议的步骤和方法。例子分析的是TCL空调,但方法可应用在任意的空调遥控协议上。空调的控制主要就是“温度”,“工作模式”,“风量大小”等等几个变量,以及一些特殊功能开关,通常变量会由若干数据位来代表,而开关量则通常用1个数据位来表示。我们通过每次采样仅改变一个参数的方法,如仅改变温度设置,而其它设置都保持不变,将采集所得的数据进行横向对比,即可很容易地找出相关参数在红外遥控数据帧中的位置,以及其变化规律。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)