瑞芯微Rockchip开发者社区
直播中

偶是糕富帅

11年用户 788经验值
私信 关注
[问答]

如何对RK3399 IR进行调试?

如何对RK3399 IR进行调试?

回帖(1)

徐夕武

2022-3-7 09:41:51
首先先查看rockchip的IR调试文档。


先去查看rockchip的调试文档,对RK的ir的先有一些初步的认识

rk驱动只支持NEC




NEC,最基础的红外电平,逻辑1为0.56ms高电平+1.69ms的低电平。逻辑0为0.56ms高电平+0.56的低电平。



因为rk的驱动只支持NEC,所以按照NEC的编码协议(如上图)可以看到,NEC的IR编码是首先是一段9ms的高电平,然后就是一段4.9ms的低电平。然后就开始发送地址(address),然后是地址(address)的反码,然后发送控制码(Command),然后是控制码的反码,这样的一个过程完成一次按键的按下。

其他厂商的红外编码


其他的厂商的比如美的,格力的红外编码都是私有协议和NEC不一样,需要根据对应的协议,然后使用PWM的脉冲测量进行修改驱动。

RK3399 IR 调试


驱动路径:kerneldriversinputremotectlrockchip_pwm_remotectl.c

首先查看dts,其中rk的ir驱动中,使用PWM的脉冲测量去检测高低电平的长度,然后计算出是不是我们配置的红外值,如果是将这个红外值映射成linux 的标准按键值,所以需要注册一个input子系统。

pwm3: pwm@ff420030 {
                compatible = "rockchip,rk3399-pwm", "rockchip,rk3288-pwm";
                reg = <0x0 0xff420030 0x0 0x10>;
                #pwm-cells = <3>;
                pinctrl-names = "active";
                pinctrl-0 = <&pwm3a_pin>;
                clocks = <&pmucru PCLK_RKPWM_PMU>;
                clock-names = "pwm";
                status = "disabled";
        };

&pwm3 {
        status = "okay";

        pinctrl-names = "default";    //这个很重要必须要设置为“default”,不然就会使用"active";,导致没有产生中断。
        pinctrl-0 = <&pwm3a_pin>;
        interrupts = ;
        compatible = "rockchip,remotectl-pwm";
        remote_pwm_id = <3>;
        handle_cpu_id = <1>;
        remote_support_psci = <1>;

        ir_key1 {
                rockchip,usercode = <0x4040>;  //usercode就是NEC里面的address
                rockchip,key_table =
                        <0xf2        KEY_REPLY>,  //将红外编码值(command),映射成linux的标准键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>;
        };
};

驱动注册成功


如果驱动注册成功使用getevent -l 会生成如下节点:


查看红外中断


红外注册成功后,使用红外遥控器往红外接收头按下按键,可以看到是否产生了红外中断,从而证明驱动是正常工作了。
cat proc/interrupts


硬件连接


举报

更多回帖

发帖
×
20
完善资料,
赚取积分