红外NEC通信协议
1 NEC
1.1 NEC简介
NEC协议采用PPM(Pulse Position Modulation,脉冲位置调制)的形式进行编码,数据的每一位(Bit)脉冲长度为560us,由38KHz的载波脉冲 (carrier burst) 进行调制,推荐的载波占空比为 1/3至 1/4。有载波脉冲的地方,其宽度都为 560us,而载波脉冲的间隔时间是不同的。
1.1.1 特性
- 8位地址和8位命令长度
- 扩展模式可用,地址大小加倍
- 为保证可靠性,地址和命令传输两次
- 脉冲位置调制(PPM)
- 载波频率38kHz
- 位时间为1.125ms或2.25ms
1.2 调制协议
NEC协议由【引导码、用户码(地址码)、用户反码(地址反码)、数据码、数据反码、结束码】构成
其中用户码、用户反码、数据码、数据反码,每个码为8位共4个字节(32位)。
-
引导码:用于同步接收器和发送器之间的通信。
-
地址码:用于标识接收器,8位数据,通常代表设备类型或者具体的设备地址,确保遥控器只能控制相应的设备;数据以二进制格式发送,遵循“先低位后高位”。
-
地址反码:用于错误校验,地址码的8位二进制反码。
-
控制码:8位数据,代表具体的命令或操作码,比如开关机、温度调节等。
-
控制反码:控制码的8位二进制反码,用于校验数据的正确性。
-
重复码:是为了实现持续按住遥控器上某一个按键时,连续发送同一命令的功能,当用户长时间按下遥控器上的按键时,遥控器除了在初次按下时发送一个完整的命令数据包外,后续会以110ms间隔不断发送一个比较短的重复码,以维持先前命令的效果,比如电视保持音量增大状态。
-
整个数据包发送完成后,通常没有明确的停止位,而是通过一段时间的静默期来区分相邻的数据包。
-
发送端在未发送时默认为低电平;接收端在没有接收到信号时默认为高电平;所以发送端和接收端的信号为反相电平
1.3 发送端具体通信过程
1.3.1 NEC协议典型脉冲序列
- 上图为NEC协议典型脉冲序列(发送)。协议遵循传输LSB(低位在前 高位在后)。发送0x16命令到0x59地址。
- 消息由9ms的AGC启动,用于设置早期IR接收器的增益。AGC后跟着4.5ms的“space”,然后传输“Address”和“Command”。
- Address和Command传输两次,Address和Command的第二次传输所有位都进行反转,可用于校验消息。总传输时间是恒定的,因为每个bit都与其反转的长度重复。
- 消息的末尾必须额外加一个560us的脉冲,以便确认最后一位的值。
1.3.2 引导码
9ms的高电平+4.5ms的低电平
1.3.3 数据
发送数据时(用户码(地址码)、用户反码(地址反码)、数据码、数据反码)共4字节
0是560us高电平(有脉冲)+ 560us低电平(无脉冲)= 1.12ms
1是560us高电平(有脉冲)+ 1680us低电平(无脉冲)= 2.24ms
每个脉冲是一个560us长的38kHz载波脉冲(约21个周期),建议的载波占空比为1/4或1/3。
1.3.4 结束码
560us高电平
1.3.5 重复码(不一定包含)
9ms高电平+2.25ms低电平+560us高电平
此后重复码只包含一个固定的脉冲序列,不包含地址码、地址反码、控制码、控制反码。固定序列通常是一个9ms的高电平脉冲,紧跟一个2.25ms的低电平和560us的高电平。
1.4 接收端具体通信过程:
1.4.1 引导码
9ms的低电平+4.5ms的高电平
1.4.2 数据
接受数据时(用户码(地址码)、用户反码(地址反码)、数据码、数据反码)共4字节
0是560us低电平(无脉冲)+560us高电平(有脉冲)=1.2ms
1是560us低电平(无脉冲)+1680us高电平(有脉冲)=2.24ms
1.4.3 结束码
结束码:560us低电平
1.4.4 重复码(不一定包含)
9ms低电平+2.25ms高电平
2 扩展NEC协议
NEC协议被广泛使用之后,很多地址都用完了。通过牺牲地址冗余可以把地址范围从原先256个扩展到65000个,这样地址从8位扩展到16位,而无需修改协议的任何其他属性。
通过以这种方式扩展地址范围,总消息时间不再是恒定的。 现在,它取决于消息中 1 和 0 的总数。 如果您想保持总消息时间不变,则必须确保地址字段中的数字 1 是 8(这自动意味着 0 的数量也是 8)。 这会将不同地址的最大数量减少到大约 13000 个。
扩展协议的256个地址的无效的,因为它们实际上是正常的NEC协议地址。每当低字节是高字节的倒数时,它就不是有效的扩展地址。