# 概述 红外通信协议是一种基于红外线的传输技术,广泛应用于家电遥控器。作为无线局域网的传输方式,红外线的最大优点是不受无线电干扰,并且其使用不受国家无线管理委员会的限制。然而,红外线对非透明物体的穿透性较差,这限制了其传输距离。 ## 红外协议 红外通信支持四种标准传输协议:9012、NEC(8位)、RC5 和 RC6。除此之外,还可以使用灵活模式获取协议波形软件进行解析。 ### 9012 协议 9012 协议通过不同间隔的脉冲信号对数据进行编码。脉冲信号的基本单位是 1Tm(560µs),逻辑‘1’需要 4Tm(2.25ms),而逻辑‘0’只需 2Tm。载波频率为 38kHz,建议载波占空比为 1/4 或 1/3。 ![](../../../../gximage/gximage12_9012_logic.png) - Tm = 0.56ms - 重发间隔 = 192Tm = 108ms - 载波频率 ≈ 38kHz - 数据段包含 8 位的 customer code 和 8 位的 command code - 为提高可靠性,customer code 和 command code 会连发两次 在数据段之前,首先发送 8Tm(4.5ms)的逻辑‘1’,接着是 8Tm(4.5ms)的逻辑‘0’(间隔),然后才发送 `customer code` 和 `command code`。customer code 和 command code 均为 LSB 先发。为提高可靠性,customer code 和 command code 会连发两次,第二次的 customer code 与第一次相同,第二次的 command code 为第一次 command code 的取反,用于验证接收数据的正确性。8 位 customer code 对应程序收发数据的 bit31~bit24 和 bit23~bit16,8 位 command code 对应程序收发数据的 bit8~bit0,command code 取反对应 bit15~bit8。第二次 command code 之后,跟随 1Tm 的逻辑‘1’作为 `stop bit`,标志传输结束。 ![](../../../../gximage/gximage13_9012_bit.jpg) ![](../../../../gximage/gximage14_9012.png) 如果按键长按,每隔 192Tm 的重发间隔就会发射一个重复命令。重发命令为 8Tm(4.5ms)的逻辑‘1’,接着是 8Tm(4.5ms)的逻辑‘0’,再加 1Tm(560µs)的脉冲,最后是 1Tm 的 stop bit。 ![](../../../../gximage/gximage15_9012_repeat.png) ### NEC 协议 (8bits) NEC 协议与 9012 协议类似,也采用不同间隔的脉冲信号进行编码。脉冲信号的基本单位是 1Tm(560µs),逻辑‘1’需要 4Tm(2.25ms),逻辑‘0’只需 2Tm。载波频率为 38kHz,建议载波占空比为 1/4 或 1/3。 ![](../../../../gximage/gximage16_nec_logic.png) - Tm = 0.56ms - 重发间隔 = 192Tm = 108ms - 载波频率 ≈ 38kHz - 数据段包含 8 位的 customer code 和 8 位的 command code - 为提高可靠性,customer code 和 command code 会连发两次 在数据段之前,首先发送 16Tm(9ms)的逻辑‘1’,接着是 8Tm(4.5ms)的逻辑‘0’(间隔),然后才发送 `customer code` 和 `command code`。customer code 和 command code 均为 LSB 先发。为提高可靠性,customer code 和 command code 会连发两次,第二次的 customer code 为第一次的取反或者 customer code 的另一半值,第二次的 command code 为第一次 command code 的取反,用于验证接收数据的正确性。8 位 customer code 对应程序收发数据的 bit23~bit16,customer code 取反对应程序收发数据的 bit31~bit24,8 位 command code 对应程序收发数据的 bit8~bit0,command code 取反对应 bit15~bit8。第二次 command code 之后,跟随 1Tm 的逻辑‘1’作为 `stop bit`,标志传输结束。 ![](../../../../gximage/gximage17_nec.png) 如果按键长按,每隔 192Tm 的重发间隔就会发射一个重复命令。重发命令为 16Tm(9ms)的逻辑‘1’,接着是 4Tm(2.25ms)的逻辑‘0’,再加 1Tm(560µs)的脉冲,最后是 1Tm 的 stop bit。 ![](../../../../gximage/gximage18_nec_repeat_time.png) ![](../../../../gximage/gximage19_nec_repeat_one.png) ### RC5 协议 RC5 协议采用曼彻斯特编码,每一 bit 的长度为 1.68ms(2Tm)。逻辑‘0’为 1Tm 的高电平(带载波)在前,跟随 1Tm 的空闲(无载波)。逻辑‘1’为 1Tm 的空闲(无载波)在前,跟随 1Tm 的高电平(带载波)。RC5 协议的载波频率为 38kHz,建议载波占空比为 1/4 或 1/3。 - 1 bit-time = 1.688ms - Tm = 1 bit-time/2 = 0.844ms - 重发间隔 = 4 x 16 x 2Tm = 108ms - 载波频率 ≈ 38kHz - 数据段包含 5 位的 customer code 和 6 位的 command code ![](../../../../gximage/gximage20_rc5_logic.png) ![](../../../../gximage/gximage21_rc5.png) 帧结构中,前两 bit 为 `start bit`,由逻辑‘1’组成。第三位是`翻转位(Toggle bit)`,每当按键按下并松开后翻转位将取反,接收机通过判断前后两次接收的翻转位就能知道按键是否一直按下在重复发同样的数值。之后的 5bit 是 `custom code`,RC5 中定义为红外设备地址,以 MSB 传输。后 6bit 是 `command code`,同样 MSB 传输。5 位 customer code 对应程序收发数据的 bit21~bit16,6 位 command code 对应程序收发数据的 bit5~bit0。一帧数据总共 14bit,总时长 28Tm。个别情况下会更短,例如 startbit 的第一 bit 为‘1’,前半段是无信号的空间隔。如果 Command Code 的最后一 bit 为逻辑‘0’,则最后一 bit 的后半段为无信号的空间隔。因此实际传输数据的长度会少于 28Tm。 当按键长按,同样的信息将以 128Tm(108ms)为间隔重发。重发的包中翻转位保持不变。 ![](../../../../gximage/gximage22_rc5_repeat_time.png) ![](../../../../gximage/gximage23_rc5_repeat_one.png) ### RC6 协议 RC6 是 RC5 的继承版本,本模块只支持 RC6 的模式 0。 RC6 采用 36kHz 的红外载波调制,占空比在 25%~50% 之间。传输数据采用曼彻斯特编码,每一 bit 的长度为 888us(2T)。逻辑‘0’为 1T 的空间隔(无载波)在前,跟随 1Tm 的高电平(带载波)。逻辑‘1’为 1T 的高电平(带载波)在前,跟随 1T 的空间隔(无载波)。 - 1 T = 1 x 16 /36K = 444us - 1Bit = 2T = 888us - 传输总时间 = 22bits = 23.1 ms (message) + 2.7 ms (no signal) - 重发间隔 = 240T = 106.7ms 帧结构可以分为 `Header 段`、`Control 段`、`Information 段`和 `Signal free 段`。 ![](../../../../gximage/gximage24_rc6.png) ![](../../../../gximage/gximage25_rc6_bit.png) #### Header 段 Header 段由三部分组成:`Leader` 位(第一 startbit 和第二 startbit)、`模式位`和`翻转位`。 Leader 位包括 Leader Symbol(LS)和 Start Bit(SB)。Leader Symbol 由 6T(2.666ms)的调制信号以及 2T(0.889ms)的空间隔组成,用于接收机完成增益调整(本模块的应用场景中,接收仅在遥控器与新设备进行学习时,超短距离使用一次,后面不再使用,因此不考虑增益变化)。 ![](../../../../gximage/gximage26_rc6_head_leader.png) Start Bit 由逻辑‘1’组成。模式位 mb2 ... mb0 用于配置 RC6 的模式,当前设计仅支持模式 0,因此这三位皆为逻辑‘0’。翻转位由 2T 调制信号和 2T 空间隔组成。每当按键释放时翻转,用于区别新发射包和重复发射包。 ![](../../../../gximage/gximage27_rc6_head_tr.png) 普通的数据都包括 1T 的调制信号和 1T 的空间隔。逻辑‘0’为 1T 的空间隔(无载波)在前,跟随 1Tm 的高电平(带载波)。逻辑‘1’为 1T 的高电平(带载波)在前,跟随 1T 的空间隔(无载波)。 ![](../../../../gximage/gximage28_rc6_logic.png) #### Control 段 Control 段由 8bit 组成,用于设备地址,意味着 RC6 的模式 0 可以支持 256 个设备,Control 段是 MSB 传输。8 位 Control 对应程序收发数据的 bit23~bit16。 #### Information 段 Information 段由 8bit 组成,用于命令的传输,意味着可以支持 256 种不同的命令。Information 段是 MSB 传输。8 位 Information 对应程序收发数据的 bit7~bit0。 #### Signal Free Time Signal Free 段指没有任何数据传输的一段时间,用于保证传输之间有足够的间隔,避免接收错误。RC6 中,Signal Free 段的长度为 6T(2.666ms)。