首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • GM-3568JHF

        • 一、简介

          • GM-3568JHF 简介
        • 二、快速开始

          • 00 前言
          • 01 环境搭建
          • 02 编译说明
          • 03 烧录指南
          • 04 调试工具
          • 05 软件更新
          • 06 查看信息
          • 07 测试命令
          • 08 应用编译
          • 09 源码获取
        • 三、外设与接口

          • 01 USB
          • 02 显示与触摸
          • 03 以太网
          • 04 WIFI
          • 05 蓝牙
          • 06 TF-Card
          • 07 音频
          • 08 串口
          • 09 CAN
          • 10 RTC
        • 四、应用开发

          • 01 UART读写案例
          • 02 按键检测案例
          • 03 LED灯闪烁案例
          • 04 MIPI屏幕检测案例
          • 05 读取 USB 设备信息案例
          • 06 FAN 检测案例
          • 07 FPGA FSPI 通信案例
          • 08 FPGA DMA 读写案例
          • 09 GPS调试案例
          • 10 以太网测试案例
          • 11 RS485读写案例
          • 12 FPGA IIC 读写案例
          • 13 PN532 NFC读卡案例
          • 14 TF卡读写案例
        • 五、QT开发

          • 01 ARM64交叉编译器环境搭建
          • 02 QT 程序加入开机自启服务
        • 六、RKNN_NPU开发

          • 01 RK3568 NPU 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

          • ARM与FPGA通讯
          • FPGA开发手册
        • 八、其他

          • 01 根目录文件系统的修改
          • 02 系统自启服务
        • 九、资料下载

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 3.1 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 3.2 资料获取

            • 1 OpenHarmony 官方资料
          • 3.3 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 3.4 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 3.5 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 4.1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 4.2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 5.1 指南
          • 5.2 设备树介绍
          • 5.3 NAPI 入门
          • 5.4 ArkTS入门
          • 5.5 NAPI开发实战演示
          • 5.6 GPIO介绍
          • 5.7 I2C通讯
          • 5.8 SPI通信
          • 5.9 PWM 控制
          • 5.10 串口通讯
          • 5.11 TF卡
          • 5.12 屏幕
          • 5.13 触摸
          • 5.14 Ethernet(以太网)
          • 5.15 M.2 硬盘
          • 5.16 音频
          • 5.17 WIFI & BT
          • 5.18 摄像头
        • 六、资料下载

          • 资料下载
      • M5-R1

        • 一、简介

          • M5-R1 开发文档
        • 二、快速上手

          • 镜像烧录
          • 环境搭建
          • 下载源码
        • 三、外设与接口

          • 3.1 树莓派接口
          • 3.2 GPIO接口
          • 3.3 I2C接口
          • 3.4 SPI通信
          • 3.5 PWM控制
          • 3.6 串口通信
          • 3.7 TF卡插槽
          • 3.8 显示屏
          • 3.9 触摸屏
          • 3.10 音频
          • 3.11 RTC
          • 3.12 以太网
          • 3.13 M.2接口
          • 3.14 MINI PCIE接口
          • 3.15 摄像头
          • 3.16 WIFI蓝牙
        • 四、资料下载

          • 资料下载
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • 3.1 ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 3.2 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 4.1 环境搭建
          • 4.2 源码下载
          • 4.3 源码编译
        • 五、内核的外设与接口

          • 5.1 树莓派接口
          • 5.2 GPIO 接口
          • 5.3 I2C 接口
          • 5.4 SPI 通信
          • 5.5 PWM 控制
          • 5.6 串口通信
          • 5.7 TF卡插槽
          • 5.8 显示屏
          • 5.9 触摸屏
          • 5.10 音频
          • 5.11 RTC
          • 5.12 以太网
          • 5.13 M.2接口
          • 5.14 MINI PCIE接口
          • 5.15 摄像头
          • 5.16 WIFI蓝牙
          • 5.17 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • 1.1 产品简介
        • 二、快速开始

          • 2.1 调试工具安装
          • 2.2 开发环境搭建
          • 2.3 源码下载
          • 2.4 编译说明
          • 2.5 烧录指南
          • 2.6 APT 更新源
          • 2.7 查看板卡信息
          • 2.8 命令行 LED 和按键测试
          • 2.9 GCC 编译程序
        • 三、应用开发

          • 3.1 基础应用开发

            • 3.1.1 开发环境准备
            • 3.1.2 第一个应用 HelloWorld
            • 3.1.3 开发 HAR 包
          • 3.2 外设应用案例

            • 3.2.1 UART 读写
            • 3.2.2 按键实验
            • 3.2.3 LED 闪烁
        • 四、外设与接口

          • 4.1 标准外设

            • 4.1.1 USB
            • 4.1.2 显示与触摸
            • 4.1.3 以太网
            • 4.1.4 WIFI
            • 4.1.5 蓝牙
            • 4.1.6 TF卡
            • 4.1.7 音频
            • 4.1.8 串口
            • 4.1.9 CAN
            • 4.1.10 RTC
          • 4.2 接口

            • 4.2.1 音频
            • 4.2.2 RS485
            • 4.2.3 显示
            • 4.2.4 触摸
        • 五、系统定制开发

          • 5.1 系统移植
          • 5.2 系统定制
          • 5.3 驱动开发
          • 5.4 系统调试
          • 5.5 OTA 升级
        • 六、资料下载

          • 6.1 资料下载
    • EVS相机

      • CF-NRS1

        • 一、简介

          • 1.1 关于 CF-NRS1
          • 1.2 基于事件的概念
          • 1.3 快速开始
          • 1.4 资源
        • 二、开发

          • 2.1 开发概览

            • 2.1.1 Shimetapi 混合相机 SDK 简介
          • 2.2 环境与API

            • 2.2.1 环境说明
            • 2.2.2 开发 API 说明
          • 2.3 Linux开发

            • 2.3.1 Linux SDK 简介
            • 2.3.2 Linux SDK API
            • 2.3.3 Linux 算法
            • 2.3.4 Linux 算法 API
          • 2.4 服务与Web

            • 2.4.1 EVS 服务器
            • 2.4.2 时间服务器
            • 2.4.3 EVS Web
        • 三、资料下载

          • 3.1 资料下载
        • 四、常见问题

          • 4.1 常见问题
      • CF-CRA2

        • 一、简介

          • 1.1 关于 CF-CRA2
        • 二、资料下载

          • 2.1 资料下载
      • EVS模块

        • 一、相关概念
        • 二、硬件准备与环境配置
        • 三、示例程序使用指南
        • 资料下载
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 3.1 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 3.2 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 3.3 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 一、简介

          • 1.1 产品简介
        • 二、Demo简单操作指引

          • 2.1 智慧监控Demo使用说明
      • RDK-X5

        • 一、简介

          • RDK-X5 硬件简介
        • 二、快速开始

          • RDK-X5 快速开始
        • 三、应用开发

          • 3.1 AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 3.2 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • 3.3 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • 3.4 USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 3.5 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
          • 3.6 ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
      • RDK-S100

        • 一、简介

          • 1.1 关于 RDK-S100
        • 二、快速开始

          • 2.1 首次使用
        • 三、应用开发

          • 3.1 AI在线模型开发

            • 3.1.1 接入火山引擎豆包 AI
            • 3.1.2 图片分析
            • 3.1.3 多模态视觉分析定位
            • 3.1.4 多模态图文比较分析
            • 3.1.5 多模态文档表格分析
            • 3.1.6 摄像头运用-AI视觉分析
          • 3.2 大语言模型

            • 3.2.1 语音识别
            • 3.2.2 语音对话
            • 3.2.3 多模态图片分析-语音对话
            • 3.2.4 多模态图片比较-语音对话
            • 3.2.5 多模态文档分析-语音对话
            • 3.2.6 多模态视觉运用-语音对话
          • 3.3 40pin-IO开发

            • 3.3.1 GPIO 输出(LED闪烁)
            • 3.3.2 GPIO 输入
            • 3.3.3 按键控制 LED
            • 3.3.4 PWM 输出
            • 3.3.5 串口输出
            • 3.3.6 IIC 实验
            • 3.3.7 SPI 实验
          • 3.4 USB模块开发使用

            • 3.4.1 USB 语音模块使用
            • 3.4.2 声源定位模块使用
          • 3.5 机器视觉技术实战

            • 3.5.1 打开 USB 摄像头
            • 3.5.2 图像处理基础
            • 3.5.3 目标检测
            • 3.5.4 图像分割
          • 3.6 ROS2基础开发

            • 3.6.1 搭建环境
            • 3.6.2 工作包的创建及编译
            • 3.6.3 运行 ROS2 话题通信节点
            • 3.6.4 ROS2 相机应用
    • 核心板

      • C-3568BQ

        • 一、简介

          • C-3568BQ 简介
      • C-3588LQ

        • 一、简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 一、简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 一、简介

          • C-K1BA 简介

13 触摸

1 触摸介绍

1.1 触摸屏介绍

触摸屏很早就有了,一开始是电阻触摸屏,电阻触摸屏只能单点触摸,在以前的学习机、功能机时代被广泛使用。2007年1月9日苹果发布了划时代的第一代iPhone,也就是iPhone 2G,iPhone 2G上使用了多点电容触摸屏,而当时的手机基本都是使用的电阻触摸屏。电容触摸屏优秀的触摸品质和手感瞬间征服了消费者,带来了手机触摸屏的大变革,后面新出的手机也都采用了多点电容触摸屏。

电容触摸屏与电阻触摸屏的对比:

  • 多点触摸支持:电容触摸屏最大的优点是支持多点触摸(后面的电阻屏也支持多点触摸,但是为时已晚)
  • 触摸灵敏度:电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才有反应
  • 校准需求:电容屏不需要校准,使用更便捷

如今多点电容触摸屏已经得到了广泛的应用,手机、平板、电脑、广告机等等,如果要做人机交互设备的开发,多点电容触摸屏基本是不可能绕过去的。所以本章我们就来学习一下如何使用多点触摸屏,如何获取到多点触摸值。关于电容屏的物理原理我们就不去研究了,毕竟我们不是开发电容屏的,而是电容屏的使用者,我们只需要关注如何使用电容屏,如何得到其多点触摸坐标值即可。

触摸屏的组成结构:

屏幕其实是由显示面板+触摸屏组合起来的。底下是显示面板,上面是触摸面板,将两个封装到一起就成了带有触摸屏的屏幕。电容触摸屏也是需要一个驱动IC的,驱动IC一般会提供一个I2C接口给主控制器,主控制器可以通过I2C接口来读取驱动IC里面的触摸坐标数据。

注意: M4-R1开发板搭载了一组I2C触摸接口,目前适配的驱动为gt911、FT5X06、FT5406等。与前文中来自Linux内核的驱动程序不同,该驱动为HDF框架下的驱动,用户可以在 /drivers/hdf_core/framework/model/input/driver/touchscreen/ 路径下看到支持的触摸IC。

1.2 Linux下的input子系统介绍

input就是输入的意思,因此input子系统就是管理输入的子系统,是Linux内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息,鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同。

input子系统架构:

  • input驱动层:负责具体硬件设备的驱动实现
  • input核心层:提供统一的接口和管理机制
  • input事件处理层:处理和分发输入事件

最终给用户空间提供可访问的设备节点,input子系统框架如下图所示:

input子系统框架图

对于应用开发来说,我们只需要关心内核空间发送给用户空间的数据即可。

2 I2C触摸板卡接口

I2C触摸板卡接口

3 触摸屏使用---命令行方式

3.1 设备树解析

提示

下文的文件路径:out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip/ 需要先编译码源。

下面简单的解析一下挂载在I2C1总线上的触摸屏控制器节点的描述。

注意

有两个触摸屏控制器都挂载在 SoC 的 I2C1 总线上,下文以测试屏幕搭载的汇顶科技的GT911触摸IC节点为例进行介绍.

首先是基础定义层( rk3568.dtsi ):

i2c1: i2c@fe5a0000 {
    compatible = "rockchip,rk3399-i2c";
    reg = <0x0 0xfe5a0000 0x0 0x1000>;
    clocks = <&cru CLK_I2C1>, <&cru PCLK_I2C1>;
    clock-names = "i2c", "pclk";
    interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&i2c1_xfer>;
    #address-cells = <1>;
    #size-cells = <0>;
    status = "disabled";
};

rk提供的基础定义设备树源文件中,并不提供直接的I2C触摸控制器节点描述,而是提供了I2C总线上的通用I2C控制器节点描述,原因也很简单:为了防止设备树又臭又长,这也正是我们使用设备树的初衷,下面对i2c1节点进行简单的分析。

  • compatible : 指定兼容性,支持RK3399 I2C控制器
  • reg : 寄存器地址范围(0xfe5a0000-0xfe5a0fff)
  • interrupts : 中断号47,高电平触发
  • clocks : I2C功能时钟(CLK_I2C1)和APB时钟(PCLK_I2C1)
  • pinctrl-0 : 默认使用i2c1_xfer引脚组
  • status : 默认禁用状态

下面是引脚配置层( rk3568-pinctrl.dtsi )

i2c1_xfer: i2c1-xfer {
    rockchip,pins =
        /* i2c1_scl */
        <0 RK_PB3 1 &pcfg_pull_none_smt>,
        /* i2c1_sda */
        <0 RK_PB4 1 &pcfg_pull_none_smt>;
};
..............

touch_gpio: touch-gpio {
    rockchip,pins =
        /* 中断引脚 */
        <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>,
        /* 复位引脚 */
        <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
};

以上两个节点分别是I2C1总线和触摸芯片的引脚配置节点,分别对应了I2C1的SCL和SDA引脚,以及触摸芯片的中断引脚和复位引脚。

  • i2c1_xfer : I2C1总线引脚,使用GPIO0_B3作为SCL,GPIO0_B4作为SDA
  • touch_gpio : 触摸芯片控制引脚,GPIO0_B5作为中断引脚(上拉),GPIO0_B6作为复位引脚

最后再看板级配置层( rk3568-toybrick.dtsi ):

&i2c1 {
    status = "okay";

    gt9xx: gt9xx@5d {
        compatible = "goodix,gt9xx";
        status = "okay";
        reg = <0x5d>;
        reset-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
        touch-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
        max-x = <7200>;
        max-y = <1280>;
        tp-size = <911>;
        pinctrl-names = "default";
        pinctrl-0 = <&touch_gpio>;
        power-supply = <&vcc3v3_lcd0_n>;
    };
};

该节点用于设置触摸屏的相关参数,如最大坐标、触摸点数量等,具体内容如下:

  • &i2c1 : 引用基础定义中的i2c1节点
  • status = "okay" : 使能I2C1控制器和gt9xx触摸芯片
  • reg = <0x5d> : gt911芯片的I2C从设备地址为0x5d
  • reset-gpio : 复位引脚使用GPIO0_B6,高电平有效
  • touch-gpio : 中断引脚使用GPIO0_B5,低电平触发
  • max-x/max-y : 触摸屏分辨率7200x1280
  • tp-size = <911> : 指定触摸芯片型号为gt911
  • power-supply : 电源供应来自vcc3v3_lcd0_n

3.2 应用层对触摸相关设备的测试方法

触摸屏属于input输入子系统设备,input子系统是Linux对输入设备提供的统一驱动框架。如按键、键盘、触摸屏和鼠标等输入设备的驱动方式是类似的,使用input子系统驱动的输入设备可以通过统一的数据结构提交给内核,该数据结构包括输入的时间、类型、代号以及具体的键值或坐标,内核通过 /dev/input 目录下的文件接口传递给用户空间。

getevent调试工具:

input输入子设备系统可以通过 getevent 命令来获取设备上报给系统的事件:

  • getevent 是一个Android/Linux系统下的调试工具
  • 用于监听并显示内核输入子系统产生的原始输入事件
  • 可以看到最底层的、未经任何处理的硬件输入信号

板卡中内置了 getevent 命令,可以用该命令来调试触摸屏是否正常工作。

在 /dev/input 目录下,使用指令:

getevent

可以获取到所有input子设备,并监听所有设备上报事件。 事件格式解析:

返回的事件格式:设备: 类型 代码 值

事件类型表:

类型代码事件类型说明
0000EV_SYN同步事件
0001EV_KEY按键事件
0003EV_ABS绝对坐标事件(触摸屏)

事件代码表:

代码名称说明
0035ABS_MT_POSITION_XX坐标
0036ABS_MT_POSITION_YY坐标
0039ABS_MT_TRACKING_ID触摸点ID
0000SYN_REPORT报告同步
0002SYN_MT_REPORT多点触控报告

事件值说明:

值类型含义
坐标值十六进制坐标
00000000新触摸点开始
ffffffff触摸点结束
00000001按键按下
00000000按键释放

监听特定设备:

如果想要监听具体的子设备及其上报的事件类型,可以使用指令:

getevent -l /dev/input/event*

它会实时反馈十六进制坐标信息(x,y)和触摸点ID和同步事件,下面对事件类型和事件代码进行解释。

Linux输入事件类型:

事件类型功能典型应用
EV_KEY按键事件电源键、音量键
EV_ABS绝对坐标事件触摸屏、游戏摇杆
EV_REL相对坐标事件鼠标移动、滚轮
EV_SYN同步事件数据帧结束标志
EV_MSC杂项事件其他类型事件
EV_SW开关事件盖子开合、耳机插拔

触摸屏常用事件代码:

代码名称功能说明
ABS_MT_TRACKING_ID触摸点ID正数=新触摸,ffffffff=触摸结束
ABS_MT_POSITION_XX坐标触摸点横坐标
ABS_MT_POSITION_YY坐标触摸点纵坐标
ABS_MT_PRESSURE压力值触摸压力大小
ABS_MT_TOUCH_MAJOR触摸面积接触面积大小

3.3 具体功能演示

3.3.1 查看输入设备

首先进入目录 /dev/input/,可以查看到几个输入事件:

输入设备列表

3.3.2 识别触摸屏设备

使用指令 getevent 查看输入事件对应的输入设备:

getevent设备识别

显然,设备名为"touchscreen"的设备就是我们的触摸屏。

3.3.3 监听触摸事件

在亮屏状态下,点击屏幕,即可在终端查看到对应的触摸事件:

原始触摸事件

3.3.4 可读性更高的事件显示

我们使用可读性更高的指令 getevent -l /dev/input/event* 再次进行测试,点击屏幕后看到屏幕返回信息如下:

可读触摸事件
在 GitHub 上编辑此页
上次更新:
贡献者: fxx, hjf
Prev
5.12 屏幕
Next
5.14 Ethernet(以太网)