遥控器在我们日常中经常用到,基于红外的电视遥控器,基于2.4G的电脑遥控器,还有宇树机器人的遥控器,但这些都不是今天要聊的,今天的主角是下面这种按键式遥控器。
这应该是遥控器行业里面最Low的一种存在了,看门的大爷们人手一个,我工作中第一次涉及到这种遥控器还是做最早期的那种大型平衡车的时候,它的锁车解锁功能就是使用的这种遥控器,4个按键:锁车,解锁,鸣笛,亮灯。
这种遥控器的原理是什么?他是如何传递这四个按键信号的呢?
通信原理
首先,遥控器的基本原理肯定是基于无线通信,也就是对载波信号进行调制和解调,这部分在无线通信的专题文章中谈到过。
只不过这里的载波是433MHz附近,这是一个豁免的通信频段。
这种遥控器采用的调制方式被称为OOK,从之前的文章得知,无线信号的调制方式有ASK,FSK....
似乎没有提到这个OOK,其实OOK是ASK的一种叫法。
ASK 即“幅移键控”又称为“振幅键控”,把振幅修改为0振幅和一个非零振幅,就像开关一样,可以称为“开关键控”(通断键控)的,所以又记作 OOK(On-Off keyed)信号。
ASK 是一种相对简单的调制方式。幅移键控(ASK)相当于模拟信号中的调幅,不同的是与载频信号相乘的是二进制数码。幅移就是把频率、相位作为常量,而把振幅作为变量,信息比特是通过载波的幅度来传递的。如下图所 示,ASK 调制方式的典型时域波形,虚线部分表示二进制的 0 和 1,红色实线部分表示调制信号:
那么,4个遥控器的按键可以使用2个bit来表示,把这个两个bit调制上去就可以了吧。
特殊的编码方式
按理说应该是这样,但是解调后,如果只是检测高低电平来解析出原数据不是很可靠,采样时机不好把握。
所以做遥控器芯片的人想了个办法,他们不靠检测高低电平,而是检测高低电平的持续时间,如果你玩过WS2812就很容易理解。
固定一个周期,在这个周期内,高电平持续12个单位,低电平持续4个单位,这样的波形记录为1.反之,则记录为0。
如此一来,我们检测到边沿的时候开始计数就能准确地找出0和1的信息。
为了区分多个遥控器,我们在按键信息前面再加上20个bit的地址信息。
为了让检测更加准确,可以轻松同步,我们在发送信息开始的时候增加一个同步帧,也就是特殊一点的,把低电平拉长到124个单位。
就这样,我们收到同步信息后,等于读取了地址+按键数据。
这样,我们就可以轻松的把特定遥控器的某一个案件是否按下的信息传递出去了,这里有一个问题,假设地址只有20个bit,这个地址将会被用完的,想想看,现在IPV4的地址都不够用了呢。
这里到真的不用怕,因为IPV4地址是在全球范围内保持唯一性,还有MAC地址也是一样的,它的适用范围是全球的。但是对于我们的遥控器来说,范围就没有这么大,即使有重码,碰撞的几率也很小。
不过我还真遇到过,一次我在常州出差的时候,站在一个车库门口玩我的汽车钥匙,随意摁了几下,车库的杆突然抬起来了,保安大哥疑惑的走来走去,掏出手中的遥控器操控者把杆放下,我又摁了一通,杆又抬起来了,着实把保安大哥给整郁闷了。
这种固定码还有个缺点,那就是非常容易被破解,我只要监听一下就可以破解这个编码。那么如何来解决这个问题呢?
滚动码
没错,我们可以让地址码滚动起来,每次发射的时候都不一样。
遥控器检测到按键输入, 同步记数加1 , 与地址码一起经密匙加密后形成密文数据, 连同键值等数据发送出去。
由于同步计数值每次发送都不同, 即使是同一按键多次按下也不例外。同步计数自动向前滚动, 发送过的码字不会再发生。因此被称为滚动码。
同步计数跟地址码组合成一个64位的数据,一起经过DES加密,DES密钥为厂家独有,「必须保密」。加密之后的密文则通过射频系统发射出去。
接收端接收到密文之后,通过厂家的DES密钥进行解密,解密之后得到同步计数和地址码。
首先检测地址码是否与接收器的地址码相对应,如果对应,就检测同步计数是否在同步窗口内,也就是说是否大于本机保存的同步计数,但是又不大得太多,如果大得太多,本机就再作一次同步。如果在同步窗口中,通知执行机构执行用户命令,比如说打开门锁或者关闭门锁之类的。
由于加密算法能够把明文打乱,因此,码的滚动会使得发射的码变化差异很大而难以破解,又由于同步计数的存在,重复发送也没有效果,因此要攻破该类系统就要攻破DES算法。
同步计数为16 位, 可达2的16次方 =65536 , 若每天用10 次, 则有18年的使用周期。32位的序列号, 容量为232 = 42 亿, 这足够用了。