基于Arduino、STM32进行红外遥控信号接收

catalogue

1. 遥控器原理简介
2. 红外遥控原理
3. 常见红外遥控器红外线信号传输协议
4. 遙控器的发展
5. 实验过程
6. 攻击面
7. 基于STM32实现红外信号解码

 

1. 遥控器原理简介

0x1: 红外线的基本特性

1. 红外线光按照波长范围分为
    1) 近红外
    2) 中红外
    3) 远红外、
    4) 极紅外
2. 红外线遥控是利用近红外光传送遙控指令的,波长为0.76um ~ 1.5um
3. 用近紅外作為遙控光源,是因為目前紅外发射器件与紅外接收器件的发光与受光峰值波長一般為0.8um~0.94um,这样可以获得较高的传输效率及较高的可靠性

0x2: 遥控器基本原理

遥控器其核心元器件就是编码芯片,将需要实现的操作指令例如选台、快进等事先编码,设备接收后解码再控制有关部件执行相应的动作。显然,接收电路及 CPU 也是与遥控器的编码一起配套设计的
编码是通过载波输出的,即所有的脉冲信号均调制在载波上,载波频率通常为 38K。载波是电信号去驱动红外发光二极管(通过光波信号进行调制),将电信号变成光信号发射出去,这就是红外光,波长范围在 840nm 到 960nm 之间
在接收端,需要反过来通过光电二极管将红外线光信号转成电信号,经放大、整形、解调等步骤,最后还原成原来的脉冲编码信号,完成遥控指令的传递,这是一个十分复杂的过程
红外线发射管通常的发射角度为 30-45 度之间,角度大距离就短,反之亦然。遥控器在光轴上的遥控距离可以大于 8.5 米,与光轴成 30 度(水平方向)或 15 度(垂直方向)上大于 6.5 米,在一些具体的应用中会充分考虑应用目标,在距离角度之间需要找到某种平衡(这也就是为什么遥控器要大致对准电视机或空调才能正常发出指令)
对于遥控器涉及到如下几个主要问题

1. 遥控器发出的编码信号驱动红外线发射管,必须发出波长范围在 940nm 左右的的红外光线(光波),因为红外线接收器的接收二极管主要对这部分红外光信号敏感,如果波长范围不在此列,显然无法达到控制之目的。不过,几乎所有的红外家电遥控器都遵循这一标准(正因为有这一物理基础,多合一遥控器才有可能做成)

2. 遥控器发出一串编码信号只需要持续数十 ms 的时间,大多数是十多 ms 或一百多 ms 重复一次,一串编码也就包括十位左右到数十位二进制编码,换言之,每一位二进制编码的持续时间或者说位长不过 2ms 左右,频率只有 500kz 这个量级,要发射更远的距离必需通过载波,将这些信号调制到数十 khz,用得最多的是 38khz
大多数普通遥控器的载波频率是所用的陶瓷振荡器的振荡频率的 1/12,最常用的陶瓷振荡器是 455khz 规格,故最常用的载波也就是 455khz/12=37.9khz(简称 38k 载波)。此外还有 480khz(40k)、440khz(37k)、432khz(36k)等规格,也有 200k 左右的载波,用于高速编码
红外线接收器是一体化的组件,为了更有针对性地接收所需要的编码,就设计成以载波为中心频率的带通滤波器(只允许指定频带通过),只容许指定载波的信号通过。显然这是多合一遥控器应该满足的第二个物理条件。不过,家用电器多用38k,很多红外线接收器也能很好地接收频率相近的 40k 或 36k 的遥控编码

3. 一个设备受控,除了满足上面提到的两个基本物理条件外,最重要的变化多种多样的应该是遥控器发出一串二进制编码信号了,这也是不同(型号、品牌)的遥控器不能相互通用的主要原因。由于市场上出现成百上千的编码方式并存(每个电气厂商都设计并使用自定义的编码方式,相当于不同的应用层协议),并没有一个统一的国际标准,只有各芯片厂商事实上的标准,这也是模拟并替换各种原厂遥控器最大的难点。随着技术的不断发展,很多公司开发家电设备的遥控子系统时还不采用通用的编码芯片,而是用通用的单片机随心所欲地自编一些编码,这就使通用遥控的问题更加复杂化了

4. 采用同样的编码芯片,也不意味着可以通用,因为还有"客户码"。客户码设计的最初本意就是为了不同的设备可以相互区分互不干扰。最初芯片厂商会从全局考虑给不同的家电厂商安排不同的客户码以规范市场,例如录像机和电视机就用不同的设备码,给甲厂分配的设备码和乙厂分配的设备码就区分在不同的范围内

5. 采用同样的编码芯片、同样的客户码下,也不能意味着一定可以通用,因为对命令码的分配与使用上,仍然是没有固定的模式可以遵循,遥控器编码芯片简单的支持数十种命令码,多的上千种,但遥控器往往只有数十个键,甚至只有几个键,如何从中选取这数十个键对应的编码代号,这些键如何分配使用,不同的系统设计师都自搞一套,这样一来事情就更复杂化了

6. 设计需考虑的问题是如何"同化"不同遥控器发射信号之间的差异。遥控编码方式涉及很多方面
    1) 首先是数字 01 的表示(调宽还是调相,脉宽和占空比)
    2) 其次是帧结构(引导码和结束码,客户码和命令码长度及发送方式)
    3) 再次是帧间结构(仅发一次还是反复多次,多帧交替发送,帧间间隔变化)
    4) 最后是载波频率,以 38Khz 居多,也有 40Khz 甚至 200khz等特殊载波

设计相应电路和软件时对上述诸多因素加以分析、归纳,将编码特点用一串二进制位表示出来形成设备码,对应于一个具体的遥控器。同一个设备码下也就是同一个遥控器不同的按键则用命令码来表示。代码型遥控器用软件的方式对这些统一的编码进行解释,驱动一个个命令码按指定设备码格式加以"封装",形成所需要的遥控信号,达到控制家电的目的

Relevant Link:

http://baike.baidu.com/link?url=cH9CmJA31W_s6W_5OaoVM1c4SiIlyEgFDPB6k-uCidznVc-N-dRctSdroDGGcP-6cRXQ2Ylh1gMxlHyYm7aWmK
http://wenku.baidu.com/link?url=10n0vBFcxQ3orPnaHwP8Fn-lVEjAQOjqg_2k4N1tbIth7I0dk-40GvdFVCemgxYWmnBkrQnAhGt_Z0c-Rp1bzKNAni_14THuUAAdYYOjl73

 

2. 红外遥控原理

一般的红外遥控系统是由红外遥控信号发射器、红外遥控信号接收器和微控制器及其外围电路等三部分构成的

1. 遥控信号发射器用来产生遥控编码脉冲,驱动红外发射管输出红外遥控信号
2. 遥控接收头完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲
3. 遥控编码脉冲是一组组串行二进制码,对于一般的红外遥控系统,此串行码输入到微控制器,由其内部 CPU 完成对遥控指令解码,并执行相应的遥控功能

在红外遥控系统中,解码的核心是 CPU。它接收解调出的串行二进制码,在内部根据本系统的遥控信号编码格式将串行码对应成遥控器上的按键

0x1: 红外遥控编码

目前应用中的各种红外遥控系统的原理都大同小异,区别只是在于各系统的信号编码格式不同。当按下遥控器上任一按键时,遥控器即产生一串脉冲编码。遥控编码脉冲对 40kHz 载波进行脉冲幅度调制(PAM)后便形成遥控信号,经驱动电路由红外发射管发射出去。红外遥控接收头接收到调制后的遥控信号,经前置放大、限幅放大、带通滤波、峰值检波和波形整形,从而解调出与输入遥控信号反相的遥控脉冲
一次按键动作的遥控编码信息为 32 位串行二进制码。对于二进制信号"0",一个脉冲占 1.2ms;对于二进制信号"1",一个脉冲占 2.4ms,而每一脉冲内低电平均为 0.6ms。从起始标志到 32 位编码脉冲发完大约需 80ms,此后遥控信号维持高电平。若按键未释放,则从起始标志起每隔 108ms 发出 3 个脉冲的重复标志
在 32 位的编码脉冲中,前 16 位码不随按键的不同而变化,我们称之为用户码。它是为了表示特定用户而设置的一个辨识标志,以区别不同机种和不同用户发射的遥控信号,防止误操作。后 16 位码随着按键的不同而改变,我们就是要读取这 16 位按键编码,经解码得到按键键号,转而执行相应控制动作

我们可以借助于逻辑分析仪记录下来遥控器上每一个按键的编码脉冲序列,破译出了各按键的编码。截取 16    位键码的 8 位(比如后 8 位)就可达到识别按键的目的。当然,要加强遥控系统的抗干扰能力,还需接收全 16 位键码甚至 16 位用户码加以识别

以NEC消费型遥控器为例

0x2: 红外遥控解码

红外遥控接收头解调出的编码是串行二进制码,包含着遥控器按键信息。但它还不便于CPU 读取识别,因此需要先对这些串行二进制码进行解码。接码电路主要包括遥控编码脉冲串并转换电路与 PLD 解码电路

0x3: 红外遥控信号编码、发射原理

所有红外遥控器的输出都是用编码后串行数据对 38~40kHz 的方波进行脉冲幅度调制(PSW)而产生的。如果直接对已调波进行测量,由于单片机的指令周期是微秒(μs)级,而已调波的脉宽只有 20 多μs,会产生很大的误差。因此先要对已调波进行解调,对解调后的波形进行测量
用遥控脉冲信号调制 38kHz 方波,然后将已调波放大,驱动红外发光二极管,就可以得到遥发射信号。调制可用一个或门实现,38kHz 方波可用 8751 的定时器 T1 产生。有些遥控器的载频可能是 40kHz,只须稍微加大发射功率仍然可用 38kHz 载频使其接收电路动作
通常,红外遥控器是将遥控信号(二进制脉冲码)调制在 38KHz 的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。二进制脉冲码的形式有多种,其中最为常用的是

1. PWM 码(脉冲宽度调制码)
    1) 以宽脉冲表示 1
    2) 窄脉冲表示 0
2. PPM 码(脉冲位置调制码)
    1) 脉冲宽度一样,但是码位的宽度不一样,码位宽的代表 1
    2) 码位窄的代表 0

遥控编码脉冲信号(以 PPM 码为例)通常由以下几部分组成

1. 引导码: 引导码也叫起始码,由宽度为 9ms 的高电平和宽度为 4.5ms的低电平组成(不同的遥控系统在高低电平的宽度上有一定区别),用来标志遥控编码脉冲信号的开始
2. 系统码: 系统码也叫识别码,它用来指示遥控系统的种类,以区别其它遥控系统,防止各遥控系统的误动作
3. 系统反码
4. 功能码: 功能码也叫指令码,它代表了相应的控制功能,接收机中的微控制器可根据功能码的数值去完成各种功能操作
5. 功能反码等信号组成: 系统反码与功能反码分别是系统码与功能码的反码,反码的加入是为了能在接收端校对传输过程中是否产生差错

 

3. 常见红外遥控器红外线信号传输协议

遥控器和电器之间一般不可能有加密协议,而只能有编码和解码的通信,因为受限于成本和制作工艺的原因

1. ITT 协议
2. NEC 协议
3. Nokia NRC 协议
4. Sharp 协议
5. Philips RC - 5 协议
6. Philips RC - 6协议
7. Philips RECS - 80协议
8. Sony SIRC 协议

0x1: NEC码分析

在东亚地区比较常用的红外线传输协议是NEC协议(即6122协议)

 

编码采用脉冲位置调制方式(PPM),利用脉冲之间的时间间隔来区分"0"和"1"

Relevant Link:

http://wenku.baidu.com/link?url=9-h-kANSeuxa_OZKyBRU6gRcvWadTGXDOf9ejGLO11NHPBNAeyh37F6Eg7X5cWLJ4UMjP-dOfpDsM8ZN8_6isz3gsozC1v7G8_2k8wiitGa
file:///C:/Users/zhenghan.zh/Desktop/%E7%BA%A2%E5%A4%96%E7%BA%BF%E9%81%A5%E6%8E%A7%E5%99%A8(nec%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F)%E4%BB%8B%E7%BB%8D.pdf

 

4. 遙控器的发展

0x1: 单一遥控器

0x2: 万能及学习型遥控器

1. 固定码式学习型遥控器

对每种类别都预设一种解码程式和发射程式,学习过程是

1. 学习信号的采集
2. 判别信号的类别(属于哪一种解码方案),编码,存储到EEPROM
//缺点是只能对已知的遥控器(或者说收集到的信号)有效,对于新发现的新型的编码格式无法自动适配

2. 波形拷贝式学习型遥控器(记录重放)

把原始遥控器锁发出的信号进行完全拷贝,而不管遥控器是什么格式,进行适当的压缩后,存储在记忆体内,当需要发射时,再由存储器内读出解压后还原原始信号

1. 发射信号波形的测量,需要高速主控芯片和较大的RAM
2. 分析信号
3. 压缩编码,根据常用高低电平的时间,特殊高低电平的时间,发送周期,对原始信号进行压缩编码
4. 存储信号,把压缩编号后的数据存储到EEPROM中

0x3: 网络及RF型遥控器

 

5. 实验过程

0x0: 红外信号接收、解码过程

1. 外部红外发射器发射红外射频信号,通过光波的形式直射
2. 一体化接收器将光波信号进行解调、整流、滤波产生bit流
3. 触发外部设备中断,将bit流通过GPIO口传输到arduino上
4. arduino进行后续的解码逻辑

0x1: 实验器材

1. VS1838B

红外接收头

0x2: 引脚接线

1. OUT接模拟口或数字脚11
2. GND接到实验板的GND
3. VCC接到实验板上的+5V  

0x3: 红外发射

用arduino软件模拟发出38K的载波信号配合红外发射头,发出带有载波信号的38K红外光,使arduino变成红外遥控器

/*
* 发射红外线信号
* 注意! 红外线发射器(IR LED)必须接到 pin 3, 不能接其它脚位
 
 Hisense 机顶盒 SD-16127 tested
 */
 
//By Leo 2013.02.19
//http://weibo.com/leolite
//Update: Pin 3 IR LED test function
 
 
#include <IRremote.h>                  // 引用 IRRemote 函式库
 
 
IRsend irsend;                          // 定义 IRsend 物件来发射红外线讯号
 
void setup()
{
  pinMode(3, OUTPUT);   
  digitalWrite(3, HIGH);   // 点亮LED测试(需通过手机摄像模式观察)
  delay(3000);             // 等待3秒
  digitalWrite(3, LOW);    // 结束测试
}
 
void loop()
{
  Serial.print("SendIR: ");
  irsend.sendNEC(0x807F18E7, 32);   // 记得换成你遥控器的红外线编码
  delay(3000);             // 等待3秒
}

0x4: 打印红外解调后的binary(0101)信号(未转化为对应按键码)

// 蓝牙串口模块使用3.3V电源
#include <IRremote.h>
#define IR_REC_PIN 11    //IR接收端连数字2口

IRrecv irrecv(IR_REC_PIN);  //定义IR接收对象
IRsend irsend;  //定义IR发送对象
decode_results results; //定义IR接收到的编码结果

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();  //开启IR接收
  Serial.println("IR recieve initialized.");
}

void loop() {
  //处理接收到的红外信号
  if (irrecv.decode(&results)) {
    Serial.print("Recieved IR CODE:");
    Serial.println(results.value, HEX);
    Serial.println();
    irrecv.resume();
  } 
}

Relevant Link:

http://www.arduino.cn/thread-1220-1-1.html
http://blog.csdn.net/lpwmm/article/details/52014388
http://www.geek-workshop.com/thread-2319-1-1.html
http://www.arduino.cn/thread-1220-1-1.html
http://blog.sina.com.cn/s/blog_5e3f971b0100m11c.html
http://www.geek-workshop.com/thread-3444-1-1.html
http://www.geek-workshop.com/thread-3444-1-1.html
http://www.geek-workshop.com/thread-12401-1-1.html
http://www.arduino.cn/thread-15049-1-1.html

 

6. 攻击面

0x1: 重放攻击

由于每家电器厂商都可能自定一套按键编码标准,因此嗅探重放攻击是最简单的一种攻击方式,且由于遥控器发出的信号为光波信号,很容易在空气中截获并保存bit流,通过一定的分析、分类就可以明白对应的指令操作码,在指定bit位置进行修改,可以很容易制造出对应电器型号的仿真遥控器

 

7. 基于STM32实现红外信号解码

0x1: 基于状态机机制对PWM(脉宽调试信号)进行解码

红外的信号是一串PWM信号(通过脉冲长度调制信号),我们需要自定义STM32的中断处理函数,基于状态机机制检测、解码接到到的引导码和实际按键信号

//Ò£¿ØÆ÷½ÓÊÕ״̬
//[7]:ÊÕµ½ÁËÒýµ¼Âë±êÖ¾
//[6]:µÃµ½ÁËÒ»¸ö°´¼üµÄËùÓÐÐÅÏ¢
//[5]:±£Áô    
//[4]:±ê¼ÇÉÏÉýÑØÊÇ·ñÒѾ­±»²¶»ñ                                   
//[3:0]:Òç³ö¼ÆʱÆ÷
u8     RmtSta=0;            
u16 Dval;        //ϽµÑØʱ¼ÆÊýÆ÷µÄÖµ
u32 RmtRec=0;    //ºìÍâ½ÓÊÕµ½µÄÊý¾Ý                   
u8  RmtCnt=0;    //°´¼ü°´ÏµĴÎÊý      
//¶¨Ê±Æ÷2ÖжϷþÎñ³ÌÐò     
void TIM4_IRQHandler(void)
{                  
    if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)
    {
        if(RmtSta&0x80)//ÉÏ´ÎÓÐÊý¾Ý±»½ÓÊÕµ½ÁË
        {    
            RmtSta&=~0X10;                        //È¡ÏûÉÏÉýÑØÒѾ­±»²¶»ñ±ê¼Ç
            if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//±ê¼ÇÒѾ­Íê³ÉÒ»´Î°´¼üµÄ¼üÖµÐÅÏ¢²É¼¯
            if((RmtSta&0X0F)<14)RmtSta++;
            else
            {
                RmtSta&=~(1<<7);//Çå¿ÕÒýµ¼±êʶ
                RmtSta&=0XF0;    //Çå¿Õ¼ÆÊýÆ÷    
            }                                    
        }                                
    }
     if(TIM_GetITStatus(TIM4,TIM_IT_CC4)!=RESET)
    {      
        if(RDATA)//ÉÏÉýÑز¶»ñ
        {

            TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling);        //CC1P=1 ÉèÖÃΪϽµÑز¶»ñ                
            TIM_SetCounter(TIM4,0);           //Çå¿Õ¶¨Ê±Æ÷Öµ
            RmtSta|=0X10;                    //±ê¼ÇÉÏÉýÑØÒѾ­±»²¶»ñ
        }else //ϽµÑز¶»ñ
        {            
               Dval=TIM_GetCapture4(TIM4);//¶ÁÈ¡CCR1Ò²¿ÉÒÔÇåCC1IF±ê־λ
             TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC4P=0    ÉèÖÃΪÉÏÉýÑز¶»ñ
             
            if(RmtSta&0X10)                    //Íê³ÉÒ»´Î¸ßµçƽ²¶»ñ 
            {
                 if(RmtSta&0X80)//½ÓÊÕµ½ÁËÒýµ¼Âë
                {
                    
                    if(Dval>300&&Dval<800)            //560Ϊ±ê×¼Öµ,560us
                    {
                        RmtRec<<=1;    //×óÒÆһλ.
                        RmtRec|=0;    //½ÓÊÕµ½0       
                    }else if(Dval>1400&&Dval<1800)    //1680Ϊ±ê×¼Öµ,1680us
                    {
                        RmtRec<<=1;    //×óÒÆһλ.
                        RmtRec|=1;    //½ÓÊÕµ½1
                    }else if(Dval>2200&&Dval<2600)    //µÃµ½°´¼ü¼üÖµÔö¼ÓµÄÐÅÏ¢ 2500Ϊ±ê×¼Öµ2.5ms
                    {
                        RmtCnt++;         //°´¼ü´ÎÊýÔö¼Ó1´Î
                        RmtSta&=0XF0;    //Çå¿Õ¼ÆʱÆ÷        
                    }
                 }else if(Dval>4200&&Dval<4700)        //4500Ϊ±ê×¼Öµ4.5ms
                {
                    RmtSta|=1<<7;    //±ê¼Ç³É¹¦½ÓÊÕµ½ÁËÒýµ¼Âë
                    RmtCnt=0;        //Çå³ý°´¼ü´ÎÊý¼ÆÊýÆ÷
                }                         
            }
            RmtSta&=~(1<<4);
        }                                                             
    }
 TIM_ClearFlag(TIM4,TIM_IT_Update|TIM_IT_CC4);        
}

//´¦ÀíºìÍâ¼üÅÌ
//·µ»ØÖµ:
//     0,ûÓÐÈκΰ´¼ü°´ÏÂ
//ÆäËû,°´Ïµİ´¼ü¼üÖµ.
u8 Remote_Scan(void)
{        
    u8 sta=0;       
  u8 t1,t2;  
    if(RmtSta&(1<<6))//µÃµ½Ò»¸ö°´¼üµÄËùÓÐÐÅÏ¢ÁË
    { 
        t1=RmtRec>>24;            //µÃµ½µØÖ·Âë
        t2=(RmtRec>>16)&0xff;    //µÃµ½µØÖ··´Âë 
         //if((t1==(u8)~t2)&&t1==REMOTE_ID)//¼ìÑéÒ£¿Øʶ±ðÂë(ID)¼°µØÖ· 
            if(1)
        { 
            t1=RmtRec>>8;
            t2=RmtRec;     
            if(t1==(u8)~t2)
                        sta=t1;//¼üÖµÕýÈ·     
            }   
            if((sta==0)||((RmtSta&0X80)==0))//°´¼üÊý¾Ý´íÎó/Ò£¿ØÒѾ­Ã»Óа´ÏÂÁË
            {
                RmtSta&=~(1<<6);//Çå³ý½ÓÊÕµ½ÓÐЧ°´¼ü±êʶ
                RmtCnt=0;        //Çå³ý°´¼ü´ÎÊý¼ÆÊýÆ÷
            }
        }  
    return sta;
}

通过逐位接收,并判断有效性后,通过移位操作,逐位保存接收到的红外bit流

0x2: 数据包接收

通过打印遥控器的某按键的16进制值

确认
E4 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 FF 

0C B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 FF 

D8 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 FF

发现每次按键发出的bit流都不一样,这可能就需要我们通过黑盒、或者遥控器固件逆向的方式来得到遥控器的编码方式

 

Copyright (c) 2016 LittleHann All rights reserved

 

posted @ 2016-08-24 23:50  郑瀚Andrew  阅读(6631)  评论(0编辑  收藏  举报