RK3568开发笔记-IR红外使用

目录

前言

一、IR基本原理介绍

二、部分原理图

三、驱动配置

四、设备树配置

无、红外功能使用

总结


前言

        本文主要介绍在RK3568平台使用IR红外模块,实现遥控功能,在 IR 接口处接上红外接收器,下面主要介绍在RK3568上如何配置进行一个说明。

一、IR基本原理介绍

        下面简单介绍一下IR基本原理, IR(Infrared Remote)即红外遥控。每按下一个键,即产生具有不同编码的数字脉冲,这种代码指令信号通过调制激励红外光二级管产生具有脉冲串的红外波,通过空间的传送到受控机内的遥控接收器。在接收过程中,红外波信号通过光学滤波器和光电二极管转换为电信号,此信号经过放大、检波、整形、解调、送到解码与接口电路,从而完成相应的遥控功能。示意图如下所示:

二、部分原理图

        使用IRM-3638作为红外收发器,与RK3568 PWM7管脚相接,部分原理图如下图所示:

三、驱动配置

        由于官方SDK中已经存在IR驱动rockchip_pwm_remotectl.c,我们需要做的就是将 IR 驱动编译进内核,驱动文件为/rk356x_linux_220118/kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c

1、驱动程序获取用户码和IR键值

    case RMC_USERCODE: {
                if ((RK_PWM_TIME_BIT1_MIN < ddata->period) &&
                    (ddata->period < RK_PWM_TIME_BIT1_MAX))
                        ddata->scandata |= (0x01 << ddata->count);
                ddata->count++;
                if (ddata->count == 0x10) {
                        DBG_CODE("USERCODE=0x%x\n", ddata->scandata);
                        if (remotectl_keybd_num_lookup(ddata)) {
                                ddata->state = RMC_GETDATA;
                                ddata->scandata = 0;
                                ddata->count = 0;
                        } else {
                                if (rk_remote_print_code){
                                        ddata->state = RMC_GETDATA;
                                        ddata->scandata = 0;
                                        ddata->count = 0;
                                } else
                                        ddata->state = RMC_PRELOAD;
                        }
                }
        }

 2、内核驱动配置项点需要包含如下两项配置:

CONFIG_ROCKCHIP_REMOTECTL=y
CONFIG_ROCKCHIP_REMOTECTL_PWM=y

四、设备树配置

        设备树配置文件在官方SDK /rk356x_linux_220118/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi文件中,PWM7节点配置如下所示:

&pwm7 {
        status = "disabled";

        compatible = "rockchip,remotectl-pwm";
        remote_pwm_id = <3>;
        handle_cpu_id = <1>;
        remote_support_psci = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&pwm7_pins>;

        ir_key1 {
                rockchip,usercode = <0x4040>;
                rockchip,key_table =
                        <0xf2   KEY_REPLY>,
                        <0xba   KEY_BACK>,
                        <0xf4   KEY_UP>,
                        <0xf1   KEY_DOWN>,
                        <0xef   KEY_LEFT>,
                        <0xee   KEY_RIGHT>,
                        <0xbd   KEY_HOME>,
                        <0xea   KEY_VOLUMEUP>,
                        <0xe3   KEY_VOLUMEDOWN>,
                        <0xe2   KEY_SEARCH>,
                        <0xb2   KEY_POWER>,
                        <0xbc   KEY_MUTE>,
                        <0xec   KEY_MENU>,
                        <0xbf   0x190>,
                        <0xe0   0x191>,
                        <0xe1   0x192>,
                        <0xe9   183>,
                        <0xe6   248>,
                        <0xe8   185>,
                        <0xe7   186>,
                        <0xf0   388>,
                        <0xbe   0x175>;
        };
        
         ir_key2 {
                rockchip,usercode = <0xff00>;
                rockchip,key_table =
                        <0xf9   KEY_HOME>,
                        <0xbf   KEY_BACK>,
                        <0xfb   KEY_MENU>,
                        <0xaa   KEY_REPLY>,
                        <0xb9   KEY_UP>,
                        <0xe9   KEY_DOWN>,
                        <0xb8   KEY_LEFT>,
                        <0xea   KEY_RIGHT>,
                        <0xeb   KEY_VOLUMEDOWN>,
                        <0xef   KEY_VOLUMEUP>,
                        <0xf7   KEY_MUTE>,
                        <0xe7   KEY_POWER>,
                        <0xfc   KEY_POWER>,
                        <0xa9   KEY_VOLUMEDOWN>,
                        <0xa8   KEY_VOLUMEDOWN>,
                        <0xe0   KEY_VOLUMEDOWN>,
                        <0xa5   KEY_VOLUMEDOWN>,
                        <0xab   183>,
                        <0xb7   388>,
                        <0xe8   388>,
                        <0xf8   184>,
                        <0xaf   185>,
                        <0xed   KEY_VOLUMEDOWN>,
                        <0xee   186>,
                        <0xb3   KEY_VOLUMEDOWN>,
                        <0xf1   KEY_VOLUMEDOWN>,
                        <0xf2   KEY_VOLUMEDOWN>,
                        <0xf3   KEY_SEARCH>,
                        <0xb4   KEY_VOLUMEDOWN>,
                        <0xbe   KEY_SEARCH>;
        };
        
        ir_key3 {
                rockchip,usercode = <0x1dcc>;
                rockchip,key_table =
                        <0xee   KEY_REPLY>,
                        <0xf0   KEY_BACK>,
                        <0xf8   KEY_UP>,
                        <0xbb   KEY_DOWN>,
                        <0xef   KEY_LEFT>,
                        <0xed   KEY_RIGHT>,
                        <0xfc   KEY_HOME>,
                        <0xf1   KEY_VOLUMEUP>,
                        <0xfd   KEY_VOLUMEDOWN>,
                        <0xb7   KEY_SEARCH>,
                        <0xff   KEY_POWER>,
                        <0xf3   KEY_MUTE>,
                        <0xbf   KEY_MENU>,
                        <0xf9   0x191>,
                        <0xf5   0x192>,
                        <0xb3   388>,
                        <0xbe   KEY_1>,
                        <0xba   KEY_2>,
                        <0xb2   KEY_3>,
                        <0xbd   KEY_4>,
                        <0xf9   KEY_5>,
                        <0xb1   KEY_6>,
                        <0xfc   KEY_7>,
                        <0xf8   KEY_8>,
                        <0xb0   KEY_9>,
                        <0xb6   KEY_0>,
                        <0xb5   KEY_BACKSPACE>;
        };
};

官方SDK PWM7节点默认关闭,我们只需要在我们的板级设备树文件中开启该节点即可,配置完成编译内核即可:

/* 红外IR */
&pwm7 {
        status = "okay";
};

无、红外功能使用

        板卡使用下面命令可以使能 DBG_CODE 打印:

echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print

使用电视机遥控器按下相应按键,正常被IR接收并解析,操作示意如下图所示:

如下图是通过按红外遥控器按钮,所产生的波形,主要由 head, Control, information, signed free 这四部分组成,具体可以参考 RC6 Protocol。


总结

以上为本人总结的在RK3568平台上红外IR的使用方法,仅供参考。

猜你喜欢

转载自blog.csdn.net/qq_18376583/article/details/128023595
今日推荐