ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

启明云端分享| SSD201、SSD202D 红外接口调试参考

2022-01-21 10:02:11  阅读:207  来源: 互联网

标签:include IR KEY 按键 红外接口 SSD202D SSD201 ir event


提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸科技的新产品、新方案的主要特点及应用!希望你能第一时间了解并快速用上好的方案和产品!
在这里插入图片描述
在这里插入图片描述


红外线(Infrared Radiation)

简称IR,是一种无线通讯方式,可以进行无线数据的传输。SSD20X拥有1路IR,支持NEC编码。


硬件设计

PM_IR为主控IR信号输入端:
在这里插入图片描述


确认帧头

NEC编码协议包含一个9ms+4.5ms的帧头,工作时根据帧头筛选需要接收的数据。使用示波器对PM_IR引脚进行测量(按下遥控器的任意按键),可以确认帧头,同时可以验证IR电路是否能正常接收IR信号:
在这里插入图片描述
从第一个下降沿开始计算,根据以上波形能够知道,前9ms一直为低电平(0x00),后4.5ms为高电平(0xFF),因此可以确认帧头为0x00+0xFF。


加载驱动

# cd kernel

# ARCH=arm make menuconfig

Device Drivers  --->

[*] SStar SoC platform drivers  --->

<*>   SStar IR driver

同时需要修改驱动,配置正确的帧头:

# vi kernel/drivers/sstar/ir/include/IR_MSTAR_DTV.h

#define IR_HEADER_CODE0         0x00    // 9ms

#define IR_HEADER_CODE1         0xFF    // 4.5ms

按键匹配

驱动根据kernel/drivers/sstar/ir/include/IR_MSTAR_DTV.h中的mstar_tv[]的配置进行上报按键键值。

mstar_tv[]为一个二维数组,第一个值为currKey,第二个值为上报的键值code,即当驱动接收到IR数据为currKey时,就会上报键值code。

在这里插入图片描述
使用ir.c进行测试,确认每个按键的currkey,以此绑定code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include



int main(int argc, char **argv)

{

         struct input_event event;

         char name[64];

         int fd;

         int rc;

        

         if ( argc != 2){

                  printf("usage: ./ir_test 0\n");

                  return 0;

         }

        



         sprintf(name, "/dev/input/event%d", atoi(argv[1]));

        

         while(1)

         {

                  if ((fd = open(name, O_RDWR, 0)) >= 0)

                  {

                           printf("%s: open, fd = %d\n", name, fd);

                           while ((rc = read(fd, &event, sizeof(event))) > 0)

                           {

                                    if (event.type == EV_KEY)

                                    {

                                             switch (event.code)

                                             {

                                                      case KEY_0 :

                                                               printf("KEY_0 %s\n", (event.value)?"Pressed":"Released");

                                                               break;

                                                      case KEY_1 :

                                                               printf("KEY_1 %s\n", (event.value)?"Pressed":"Released");

                                                               break;

                                                      default:

                                                               break;

                                             }

                                    }

                           }

                           close(fd);

                  }else{

                           return -1;

                  }

         }



         return 0;

}

# arm-linux-gnueabihf-gcc ir.c -o ir_tes

把ir_test拷贝到开发板上运行,并按下遥控器上的按键,观察程序打印的currKey:

#./ir_test 0

在这里插入图片描述
可以看到,当我按下遥控器上的”1”按键时,显示currKey=0x45,因此修改mstar_tv[],将0x45和KEY_1绑定:
在这里插入图片描述
同样地,继续按键遥控器上的其他按键,在mstar_tv[]中将它们进行绑定,这样,在ir.c 中,我们就能根据event.code来判断是哪个按键按下了。

在这里插入图片描述
在这里插入图片描述

标签:include,IR,KEY,按键,红外接口,SSD202D,SSD201,ir,event
来源: https://blog.csdn.net/ami82/article/details/122614903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有