当前位置: 首页 > news >正文

T527 IR-RX 调试

文章目录

  • 1、环境介绍
  • 2、T527 CIR Receiver
  • 3、原理图查看
  • 4、设备树配置
  • 5、内核配置
  • 6、验证
  • 7、添加新遥控器
    • 7.1、添加 keymap 文件
    • 7.2、修改设备树
    • 7.3、驱动注册流程
  • 8、测试
  • 9、总结

1、环境介绍

硬件:t527板卡

软件:原厂t527-tina5.0-aiot-v1.4 sdk(buildroot,Linux 5.15)

2、T527 CIR Receiver

t527 有两个独立的 CIR_RX 接口,64×8 位数据缓冲 FIFO,最高支持 1MHz 采样频率,支持 NEC 协议格式的红外数据传输。

3、原理图查看

t527 板卡板载一个 IRM-V838M3-C 红外遥控接收头:

4、设备树配置

&s_irrx {pinctrl-names = "default", "sleep";pinctrl-0 = <&s_irrx_pins_default>;pinctrl-1 = <&s_irrx_pins_sleep>;status = "okay";
};&r_pio {s_irrx_pins_default: s_irrx@0 {pins = "PM5";function = "s_cir";};s_irrx_pins_sleep: s_irrx@1 {pins = "PM5";function = "gpio_in";};
};

5、内核配置

CONFIG_AW_IR_RX=y

6、验证

root@t527:~ # cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi_ir_recv"
P: Phys=sunxi_ir_recv/input0
S: Sysfs=/devices/platform/soc@3000000/7040000.s_irrx/rc/rc0/s_cir_rx
U: Uniq=
H: Handlers=kbd event0
B: PROP=20
B: EV=100017
B: KEY=20000000000000 0 0 0 0 0 18000 40000800 1c004000000000 4ffc
B: REL=3
B: MSC=10

7、添加新遥控器

如下是要使用的遥控器,现在为其添加 keymap:

7.1、添加 keymap 文件

进入路径<sdk>/kernel/linux-5.15/drivers/media/rc/keymaps

touch rc-myremote.c
// SPDX-License-Identifier: GPL-2.0+
// myremote.h - Keytable for myremote Remote Controller
//
// Keytable for your custom remote#include <media/rc-map.h>
#include <linux/module.h>static struct rc_map_table myremote[] = {/* 这些数值是按键的扫描码,以 KEY_POWER 为例,在开发板执行evtest命令,用红外遥控按下POWER按键,查看扫描码为45:Event: time 59120.395400, type 4 (EV_MSC), code 4 (MSC_SCAN), value 45每一个按键都是如此操作,自行添加映射关系。*/{ 0x45, KEY_POWER },{ 0x47, KEY_MENU },{ 0x15, KEY_PLAY },{ 0x40, KEY_VOLUMEUP },{ 0x19, KEY_VOLUMEDOWN },{ 0x09, KEY_FASTFORWARD },{ 0x07, KEY_FASTREVERSE },{ 0x0d, KEY_BACKSPACE },{ 0x43, KEY_BACK },{ 0x44, KEY_HOME },{ 0x16, KEY_0 },{ 0x0c, KEY_1 },{ 0x18, KEY_2 },{ 0x5e, KEY_3 },{ 0x08, KEY_4 },{ 0x1c, KEY_5 },{ 0x5a, KEY_6 },{ 0x42, KEY_7 },{ 0x52, KEY_8 },{ 0x4a, KEY_9 },
};static struct rc_map_list myremote_map = {.map = {.scan     = myremote,.size     = ARRAY_SIZE(myremote),.rc_proto = RC_PROTO_NEC, .name     = "rc-myremote",}
};static int __init init_rc_map_myremote(void)
{return rc_map_register(&myremote_map);
}static void __exit exit_rc_map_myremote(void)
{rc_map_unregister(&myremote_map);
}module_init(init_rc_map_myremote);
module_exit(exit_rc_map_myremote);MODULE_LICENSE("GPL");
MODULE_AUTHOR("Cohen0415");

修改 <sdk>/kernel/linux-5.15/drivers/media/rc/keymaps/Makefile

修改<sdk>/kernel/linux-5.15/include/media/rc-map.h

7.2、修改设备树

在设备树中指定要使用的 keymap:

&s_irrx {pinctrl-names = "default", "sleep";pinctrl-0 = <&s_irrx_pins_default>;pinctrl-1 = <&s_irrx_pins_sleep>;linux,rc-map-name = "rc-myremote";		// 指定 keymap,这里的名字要和rc_map_list结构体中的name一样status = "okay";
};

7.3、驱动注册流程

rc-myremote.c (keymap模块)││ module_init(rc_myremote_init)▼
rc_map_register(&rc_myremote_map)││ 注册 keymap -> 放入全局 rc_map_list 链表▼
ir 驱动 (sunxi-ir-rx.c: sunxi_irrx_probe)││ 解析设备树 linux,rc-map-name = "rc-myremote"▼
rc_dev->map_name = "rc-myremote"││ 注册 rc_dev▼
内核遥控子系统根据 map_name 从链表查找并绑定 keymap││ 接收到红外扫描码时,查表转换为 input 事件▼
input 子系统上报 KEY_XXX

8、测试

9、总结

参考文章:

《D1_Tina_Linux_红外_开发指南.pdf》

《Linux_IR_RX_开发指南.pdf》

http://www.dtcms.com/a/445680.html

相关文章:

  • 低成本能谱仪设计:基于分立器件的模拟前端与数字后端实现方案
  • 计算机视觉的数据收集与标注
  • LeetCode:92.最小路径和
  • 百度竞价推广属于什么广告广东网站se0优化公司
  • Anaconda路径配置
  • GitHub 热榜项目 - 日榜(2025-10-05)
  • java中Math.random()和random()方法区别
  • Django SimpleUI 详解:现代化的Django Admin界面美化方案
  • 网站开发客户流程 6个阶段简述常用的网站开发软件
  • 区块链分层学:新的开始
  • Qt与CMakeLists.txt
  • Ubuntu20.04安装Anaconda3-2025.06
  • VirtualBox中ubuntu1804虚拟机共享文件夹设置
  • 基于单片机的环境监测智能报警系统的设计(论文+源码)
  • 成都网页制作推广合肥网站seo报价
  • 短波红外相机在工业视觉检测中的应用
  • 马鞍山市建设银行网站科右前旗建设局网站
  • 【傻呱呱】托管项目到GitHub(纯前端UI操作)
  • 神经网络之激活函数Softmax
  • 高端网站建设哪家公司好网站建设招标样本
  • Qt Quick 3D-机械臂模型显示与交互
  • 轻松Linux-10.进程信号
  • 淘宝网站可信度状况及建设策略桂林网站
  • HTML简单入门—— 基础标签与路径解析
  • AI Agent:从“超级玩具“到“核心生产力“,智能新纪元的深度解析
  • 网站开发和运行 法律html5登录界面完整代码
  • 数据预处理与可视化流水线:Pandas Profiling + Altair 实战指南
  • 全栈开发杂谈————关于websocket若干问题的大讨论
  • Headless Service
  • Robotframework7.0与 6.0 的差异