news 2026/5/4 4:02:02

Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持).md

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持).md

Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持)

本文基于全志Tina-SDK,以100ASK-7" RGB LCD触摸屏为例,手把手带你完成从硬件原理图分析、设备树修改、内核模块配置到最终打包烧录与验证的完整流程。你将学会如何为嵌入式Linux系统添加一个全新的硬件外设,掌握I2C/Input子系统驱动的实践方法。这是嵌入式Linux驱动开发的经典案例,学会它,你就能举一反三,添加任何挂载在I2C总线上的设备。

本文最全,比文档文档史上无敌最详细。


文章目录

    • Tina SDK Linux Kernel 基本使用(实战篇:为7寸RGB LCD触摸屏添加驱动支持)
    • 🎯 本任务的学习目标和重点掌握程度
    • 一、项目背景:我们要做什么?(⭐ 了解即可)
    • 二、内核源码与设备树文件的位置(⭐⭐⭐ 必须掌握)
      • 2.1 内核源码目录
      • 2.2 板级配置文件目录(⭐⭐⭐⭐ 核心操作区)
    • 三、设备树修改详解(⭐⭐⭐ 必须掌握)
      • 3.1 解析硬件原理图
      • 3.2 确定TWI总线编号
      • 3.3 添加TWI2引脚复用配置(⭐⭐⭐ 必须掌握)
      • 3.4 配置TWI2总线并添加触摸屏设备节点(⭐⭐⭐ 必须掌握)
      • 3.5 检查引脚冲突(⭐⭐ 重点掌握)
      • 3.6 Tina SDK中设备树的编译机制(⭐⭐ 重点掌握)
    • 四、内核模块配置(⭐⭐⭐ 必须掌握)
      • 4.1 为什么不能只用 `make kernel_menuconfig`?
      • 4.2 TinaSDK的模块管理机制 `modules.mk`(⭐⭐⭐ 必须掌握)
      • 4.3 在Tina配置中选中GT911模块(⭐⭐⭐ 必须掌握)
    • 五、编译、打包与烧录(⭐⭐ 重点掌握)
      • 5.1 编译内核
      • 5.2 打包固件
      • 5.3 烧录固件
    • 六、验证触摸功能(⭐⭐⭐ 必须掌握)
      • 6.1 检查驱动模块是否加载成功
      • 6.2 定位触摸屏对应的event节点
      • 6.3 原始数据测试(⭐⭐ 重点掌握)
      • 6.4 常见问题排查
        • 问题1:`Error: Driver 'gt9xxnew_ts' is already registered`
        • 问题2:I2C通信超时("Timeout when sending 9th SCL clk")
        • 问题3:设备树节点修改后不生效
      • 6.5 使用 `evtest` 工具进行进阶测试(⭐ 了解即可)
    • 七、功能拓展:添加新的I2C设备(触类旁通)
    • 八、面试官提问环节(必考!)
      • 第1问:如何排查I2C设备(如触摸屏)通信故障?
      • 第2问:`make kernel_menuconfig` 和 `make menuconfig` 在TinaSDK中有什么区别?
      • 第3问:修改设备树后触摸屏不工作,请给出排查思路。
    • 九、总结

🎯 本任务的学习目标和重点掌握程度

为了帮助你在实际工作中遇到类似任务时,清楚地知道每一步要做什么,同时也方便领导考核时清晰了解你的技能水平,我们对本任务涉及的每个知识点进行了重要程度分级:

分级图标含义工作要求
必须掌握⭐⭐⭐独立作业,考核核心能不看文档独立完成,领导要求你必须做到且会重点检查
重点掌握⭐⭐了解原理,能按文档完成理解原理,出现问题知道去哪里排查
了解即可知道概念,能复述面试能说清楚,不用实际动手做

作为初学者,重点掌握“必须掌握”(⭐⭐⭐)的内容,这是你入门嵌入式Linux驱动的基石。“重点掌握”(⭐⭐)的内容为辅,帮助你构建完整的知识体系。“了解即可”的部分供你开阔眼界,后续再深入学习。


一、项目背景:我们要做什么?(⭐ 了解即可)

在嵌入式Linux开发中,为开发板添加LCD触摸屏支持是最常见的任务之一。本文将指导你为100ASK_T113s3-Pro开发板添加7寸1024x600分辨率RGB LCD触摸屏的驱动支持。

屏幕模块详细信息如下:

项目规格
模组型号100ASK-7"RGB LCD-V1.2
分辨率1024 x 600
触摸芯片汇顶科技GT911 (Goodix GT9xx系列)
通信接口I2C(全志平台称为TWI,即Two-Wire Interface)
数据手册T113-s3_datasheet_v1.6.pdf(第41页)

触摸屏工作原理简述:触摸IC(GT911)通过I2C总线与主控芯片T113通信,当手指触摸屏幕时,触摸IC会通过中断引脚通知主控,主控通过I2C读取触摸坐标数据,并通过Linux的Input子系统上报给上层应用。

整个适配过程分为三大步骤

  1. 编写/修改设备树文件:告诉内核硬件如何连接(I2C总线、中断引脚、复位引脚等)
  2. 配置内核模块:让内核包含GT911驱动
  3. 编译、烧录与验证:生成系统镜像,验证触摸功能是否正常工作

二、内核源码与设备树文件的位置(⭐⭐⭐ 必须掌握)

在Tina-SDK中,与Linux内核相关的代码和配置文件主要分布在以下位置:

2.1 内核源码目录

内容路径快捷命令
Linux内核源码lichee/linux-5.4/ckernel
内核设备树目录lichee/linux-5.4/arch/arm/boot/dts/cdts
父级芯片设备树lichee/linux-5.4/arch/arm/boot/dts/sun8iw20p1.dtsi-

sun8iw20p1.dtsi是整个T113芯片的基础设备树文件,定义了芯片内置的所有硬件模块(I2C/TWI、SPI、UART、GPIO等)。我们后续需要在board.dts中引用并配置这些模块。

在Tina-SDK中,内核源码位于lichee/linux-5.4。为了方便切换目录,SDK提供了几个实用的快捷命令(前提是已经执行过source build/envsetup.sh):

bash

# 切换到内核源码根目录 ckernel # 切换到内核设备树目录(arch/arm/boot/dts) cdts

2.2 板级配置文件目录(⭐⭐⭐⭐ 核心操作区)

这是Tina SDK特有的板级配置文件位置,与内核源码分开存放:

内容路径快捷命令
板级设备树device/config/chips/t113/configs/100ask/board.dtsccconfigs
板级内核配置device/config/chips/t113/configs/100ask/linux/config-5.4-
环境变量配置device/config/chips/t113/configs/100ask/env.cfg-
U-Boot设备树device/config/chips/t113/configs/100ask/uboot-board.dts-

通过执行ccconfigs可以直接切换到板级配置文件目录。

重要说明:Tina-SDK将板级配置与内核源码分离,这样可以实现一份内核源码适配多个不同硬件板子。这种分离设计的好处是,当我们更换开发板或为不同项目定制功能时,只需要修改板级配置目录下的文件,而内核源码本身可以保持不变。更便于管理和维护。

bash

# 进入板级配置目录 ccconfigs ls # board.dts config-5.4 config-5.4-mem-optimize

特别注意board.dts是一个软链接,它实际指向linux-5.4/board.dts。因此,我们实际要修改的文件是linux-5.4/board.dts

bash

ccconfigs cd linux-5.4 ls # board.dts config-5.4 config-5.4-mem-optimize

⛔ 重要警告 ⛔make menuconfigmake kernel_menuconfig是完全不同的两个东西:

命令作用配置保存位置
make kernel_menuconfig配置Linux内核选项临时,执行make clean后会丢失
make menuconfig配置Tina系统的软件包选项永久,配置会保存在.config
make menuconfigKernel modules在Tina层面选择需要的内核模块永久,通过modules.mk机制生效

⭐ 重点掌握:记住这个区别,避免你配置完后一清理环境配置全丢了!

三、设备树修改详解(⭐⭐⭐ 必须掌握)

3.1 解析硬件原理图

根据100ASK-7"RGB LCD-V1.2的硬件原理图,触摸屏相关的接口如下:

原理图引脚标号T113对应引脚功能说明
CTP_INTPE1触摸中断信号,触摸屏有数据时通知主控
CTP_RSTPE0触摸复位信号,控制触摸IC复位
RPI_SCLPE12I2C时钟线
RPI_SDAPE13I2C数据线

3.2 确定TWI总线编号

通过查看数据手册T113-s3_datasheet_v1.6.pdf第41页,确认PE12和PE13引脚的功能复用表如下:

引脚功能选项说明
PE12Function 2 =twi2+ USB + …说明PE12可作为TWI2的SCL
PE13Function 2 =twi2+ USB + …说明PE13可作为TWI2的SDA

因此,我们可以确定触摸屏使用的是TWI2总线(全志平台称I2C为TWI)。

3.3 添加TWI2引脚复用配置(⭐⭐⭐ 必须掌握)

打开设备树文件device/config/chips/t113/configs/100ask/linux-5.4/board.dts,找到&pio节点,在其中添加twi2的引脚复用配置:

c

&pio { // ... 其他配置(保持原有内容不动) // ⭐ 添加 TWI2 引脚复用定义 twi2_pins_a: twi2@0 { pins = "PE12", "PE13"; function = "twi2"; // 将PE12、PE13复用为TWI2功能 drive-strength = <10>; // 驱动能力10mA }; twi2_pins_b: twi2@1 { pins = "PE12", "PE13"; function = "gpio_in"; // 休眠时将引脚还原为通用GPIO输入模式 }; // ... 其他配置(保持原有内容不动) };

参数解释

  • pins:指定要配置的物理引脚名称。
  • function:指定引脚的功能模式,"twi2"代表I2C总线的功能复用,"gpio_in"代表通用输入GPIO模式,用于系统休眠时节省功耗。
  • drive-strength:指定引脚的驱动电流能力,数值越高驱动能力越强,适合外围设备较远的场景,10是一个常见的中间值。
  • <&pio>这个节点是T113芯片的通用引脚控制器节点,定义了所有引脚的复用模式和电气属性。

为什么需要两组配置?一个用于正常运行模式(default),一个用于休眠模式(sleep),系统可以在两者之间动态切换。

3.4 配置TWI2总线并添加触摸屏设备节点(⭐⭐⭐ 必须掌握)

board.dts文件的末尾(或合适位置),添加&twi2节点配置:

c

&twi2 { clock-frequency = <400000>; // I2C总线时钟400KHz pinctrl-0 = <&twi2_pins_a>; // 正常工作时使用twi2_pins_a配置 pinctrl-1 = <&twi2_pins_b>; // 休眠时切换到twi2_pins_b配置 pinctrl-names = "default", "sleep"; // 定义两组配置的名称 dmas = <&dma 45>, <&dma 45>; // DMA通道配置(可选) dma-names = "tx", "rx"; status = "okay"; // 启用此I2C总线 // 触摸屏设备节点 (I2C从设备) ctp@14 { compatible = "allwinner,goodix"; // 匹配驱动中的名称(重要!) device_type = "ctp"; // 设备类型:电容触摸屏 reg = <0x14>; // I2C设备地址(7位地址) status = "okay"; /* GT9xx 触摸芯片配置参数 */ ctp_name = "gt9xxnew_ts"; // 驱动模块名称 ctp_twi_id = <0x2>; // 所属TWI总线编号(TWI2) ctp_twi_addr = <0x14>; // 设备地址(与reg一致) /* 屏幕触摸范围配置 */ ctp_screen_max_x = <0x400>; // X轴最大坐标 0x400 = 1024 ctp_screen_max_y = <0x258>; // Y轴最大坐标 0x258 = 600 ctp_revert_x_flag = <0x0>; // X轴不翻转(0:不翻转) ctp_revert_y_flag = <0x0>; // Y轴不翻转 ctp_exchange_x_y_flag = <0x0>; // XY坐标不交换 /* 引脚配置(⭐ 关键!) */ ctp_int_port = <&pio PE 1 GPIO_ACTIVE_HIGH>; // 中断引脚:PE1,高电平有效 ctp_wakeup = <&pio PE 0 GPIO_ACTIVE_HIGH>; // 唤醒/复位引脚:PE0 }; };

注意:GT911的I2C设备地址可以是0x140x5d,这由复位引脚的上电时序决定。本次适配使用0x14

3.5 检查引脚冲突(⭐⭐ 重点掌握)

在添加新设备节点时,务必检查新使用的引脚是否已经被其他功能占用。引脚冲突是新手最容易犯的错误之一,往往导致驱动加载失败。本次使用的引脚情况:

引脚本任务用途潜在冲突解决方法
PE12 / PE13TWI2可能被其他I2C设备使用可以通过全局搜索grep -r "PE12" device/检查是否有其他设备配置了这些引脚,若有则需协调。

3.6 Tina SDK中设备树的编译机制(⭐⭐ 重点掌握)

在TinaSDK中,设备树无法单独编译,它会与U-Boot、optee等一起打包到最终镜像中。你必须在TinaSDK根目录下执行makemkernel命令,系统才会自动编译设备树。因此,任何设备树的修改都需要完整编译系统或至少重新编译内核,然后重新打包镜像才能生效。

四、内核模块配置(⭐⭐⭐ 必须掌握)

4.1 为什么不能只用make kernel_menuconfig

很多初学者会在内核源码目录执行make kernel_menuconfig,配置完发现执行make clean后配置丢失了。

这是因为在TinaSDK框架中,内核的最终配置文件是由多个部分动态合并而成的:

  1. target/allwinner/generic/config-5.4(通用配置)
  2. device/config/chips/t113/configs/100ask/linux/config-5.4(板级配置)
  3. 其他依赖关系

直接修改内核的.config文件会在下次合并时被覆盖。

4.2 TinaSDK的模块管理机制modules.mk(⭐⭐⭐ 必须掌握)

TinaSDK为每个内核模块在target/allwinner/t113-common/modules.mk中预定义了Kconfig配置项。打开该文件,可以看到GT911驱动的定义:

makefile

define KernelPackage/touchscreen-gt9xxnew SUBMENU:=$(INPUT_MODULES_MENU) TITLE:=gt9xxnew support DEPENDS:=+kmod-input-core KCONFIG:= \ CONFIG_INPUT_TOUCHSCREEN=y \ CONFIG_TOUCHSCREEN_GT9XXNEW_TS=y \ ... (其他相关配置) FILES:= \ $(LINUX_DIR)/drivers/input/touchscreen/gt9xxnew/gt9xxnew_ts.ko AUTOLOAD:=$(call AutoProbe,gt9xxnew_ts) endef

这个机制的好处是,TinaSDK已经帮我们把GT911驱动的依赖关系和编译规则都处理好了,我们只需要像选择普通软件包一样选中它即可。

4.3 在Tina配置中选中GT911模块(⭐⭐⭐ 必须掌握)

正确的做法是在TinaSDK根目录执行make menuconfig,然后通过Kernel modulesInput modules找到触摸屏相关选项:

text

Tina Configuration └─> Kernel modules └─> Input modules └─> kmod-touchscreen-gt9xxnew ---> GT9xxnew touchscreen driver

Y键选中此项(变为<*>)。然后用方向键移动到最下方的<Save>保存配置,再选择<Exit>退出。

配置成功后,稍后执行make时系统会自动编译此模块。

补充说明:如果你需要修改具体的内核源码(如修改驱动代码中的坐标算法),仍然需要进入make kernel_menuconfig进行调试,但那只是为了测试,正式的配置最终还是要在Tina的make menuconfig中固化下来。

五、编译、打包与烧录(⭐⭐ 重点掌握)

5.1 编译内核

bash

# 1. 加载SDK环境 source build/envsetup.sh # 2. 选择开发板配置(t113_100ask-tina) lunch # 输入数字选择 4 # 3. 编译内核(首次或修改内核配置后) mkernel

或者直接执行make编译整个系统(包括U-Boot、内核、Rootfs等)。

5.2 打包固件

bash

pack

打包过程中会看到如下输出:

text

... Add partition rootfs.fex ROOTFS_FEX... BuildImg 0 Dragon execute image.cfg SUCCESS! ---image is at--- /home/ubuntu/tina-d1-h/out/t113-100ask/tina_t113-100ask_uart3.img pack finish

5.3 烧录固件

使用ls -lh命令查看生成的镜像大小,确认文件完整后将其复制到Windows系统:

bash

ls -lh /home/ubuntu/tina-d1-h/out/t113-100ask/tina_t113-100ask_uart3.img

使用PhoenixSuit(线刷工具)将镜像烧录到开发板的SPI NAND Flash中。

六、验证触摸功能(⭐⭐⭐ 必须掌握)

6.1 检查驱动模块是否加载成功

系统启动后,首先检查内核日志中是否有GT911驱动加载信息:

bash

dmesg | grep -i "gt9\|touch"

您应该能看到类似这样的信息:

text

[ 4.500239] gt9xxnew_ts 2-0014: 2-0014 supply ctp not found, using dummy regulator [ 4.717746] input: gt9xxnew_ts as /devices/virtual/input/input2

input: gt9xxnew_ts as /devices/virtual/input/input2这一行表示触摸屏驱动注册成功,并创建了input设备节点/dev/input/event2

注意supply ctp not found只是一个警告,提示没有为触摸屏单独配置电源管理,不影响触摸功能。

6.2 定位触摸屏对应的event节点

如果系统中有多个input设备(键盘、鼠标、触摸屏等),可以通过查看/proc/bus/input/devices文件来确定每个设备对应的event节点:

bash

cat /proc/bus/input/devices

找到Name="gt9xxnew_ts"的段落,查看其H行(Handlers):

text

I: Bus=0018 Vendor=dead Product=beef Version=28bb N: Name="gt9xxnew_ts" P: Phys=A-P S: Sysfs=/devices/virtual/input/input2 U: Uniq= H: Handlers=event2 B: PROP=2 B: EV=b B: KEY=400007f8000100000000 B: ABS=26500000

H: Handlers=event2表示该触摸屏对应的设备节点是/dev/input/event2

💡进阶技巧:如果你在编译内核时已经配置好TSLIB(触摸屏校准库),也可以直接运行ts_test进行可视化测试。后续可以深入学习本节内容的【进阶内容】。

6.3 原始数据测试(⭐⭐ 重点掌握)

使用cat命令直接读取event节点,可以快速验证触摸屏硬件是否正常工作:

bash

cat /dev/input/event2

用手指触摸屏幕,终端上会出现二进制乱码输出(代表有数据上报)。

现象结论
cat /dev/input/eventX出现乱码输出(手触摸时)触摸屏工作正常 ✅
cat /dev/input/eventX无反应触摸屏未工作,需排查 ❌

6.4 常见问题排查

问题1:Error: Driver 'gt9xxnew_ts' is already registered

现象insmod时报错该驱动已注册。
原因:驱动已被编译进内核或已被加载。
解决方法:直接使用modprobe或确认设备树配置即可,无需重复加载。

问题2:I2C通信超时(“Timeout when sending 9th SCL clk”)

现象:系统启动时dmesg出现重复的I2C传输超时错误。
原因:I2C设备地址错误、引脚配置冲突、供电问题或设备未正确复位。
排查步骤

  1. 检查reg = <0x14>是否与硬件实际地址一致(尝试0x5d)。
  2. 检查引脚是否正确:PE0对应GPIO_ACTIVE_HIGH,确保复位时序正确。
  3. 检查pinsfunction是否与硬件原理图一致。
  4. 检查系统启动日志中引脚复用是否有冲突。
问题3:设备树节点修改后不生效

原因:在TinaSDK中设备树无法单独编译,必须重新打包整个镜像。
解决方法:修改设备树后,务必执行make(或mkernel)重新编译,然后执行pack打包,最后重新烧录完整镜像。

6.5 使用evtest工具进行进阶测试(⭐ 了解即可)

如果需要获取更详细的上报数据(坐标值、压力值等),可以安装evtest工具:

bash

# 在开发板上运行 evtest /dev/input/event2

运行后会显示触摸屏的详细信息(坐标范围、分辨率等),并实时输出触摸事件数据,非常适合调试坐标是否正确、是否反向等问题。

七、功能拓展:添加新的I2C设备(触类旁通)

掌握了为TWI2添加GT911触摸屏的方法后,你可以轻松地为项目添加任何I2C设备(如传感器、时钟芯片等)。模板如下:

c

&twix { // x 为TWI总线编号 clock-frequency = <400000>; pinctrl-0 = <&twix_pins_a>; pinctrl-1 = <&twix_pins_b>; pinctrl-names = "default", "sleep"; status = "okay"; new_device@xx { // xx 为设备地址 compatible = "vendor,device-name"; reg = <xx>; // 根据设备驱动要求添加其他属性 status = "okay"; }; };

添加步骤:

  1. 确定设备使用的I2C总线编号(如TWI1、TWI2)。
  2. &pio节点中添加引脚复用配置。
  3. 在对应的&twix节点下添加设备子节点。
  4. 根据设备驱动文档填充设备树属性。
  5. 配置内核模块(如有需要)。
  6. 编译、打包、烧录并验证。

修改设备树时,每次修改后都需要pack打包整个镜像才能生效。建议将所有I2C设备集中在同一个&twix节点下管理,便于维护。

八、面试官提问环节(必考!)

第1问:如何排查I2C设备(如触摸屏)通信故障?

参考答案:排查I2C故障,按照以下步骤逐一检查:

  1. 硬件层面:用万用表检查供电、SCL/SDA上拉电阻是否正常。
  2. 引脚配置:用dmesg | grep pinctrl检查引脚复用是否正确。
  3. I2C通信测试:用i2cdetect -y <bus号>扫描设备地址,确认设备是否应答。
  4. 检查内核日志:用dmesg | grep -i "i2c\|error"查找通信错误(如NACK、超时等)。
  5. 检查地址配置:确认设备树中的reg属性与硬件实际地址一致(GT911常见地址为0x140x5d)。
  6. 检查复位时序:确认复位引脚(ctp_wakeup)的上电时序满足芯片要求。

第2问:make kernel_menuconfigmake menuconfig在TinaSDK中有什么区别?

参考答案:两者作用完全不同:

命令作用配置保存位置是否永久
make kernel_menuconfig配置Linux内核选项临时.config❌ 不永久,make clean后丢失
make menuconfig配置Tina系统软件包选项Tina.config✅ 永久
make menuconfigKernel modules在Tina层面选择内核模块通过modules.mk机制✅ 永久

第3问:修改设备树后触摸屏不工作,请给出排查思路。

参考答案

  1. 检查硬件连接:确认FPC排线是否插好,触摸屏模块供电是否正常。
  2. 检查设备树引脚配置
    • 确认twi2_pins_a中指定的引脚与实际原理图一致(PE12/PE13)。
    • 确认function值是否正确(twi2)。
  3. 检查I2C通信:执行i2cdetect -y 2扫描TWI2总线,确认地址0x14是否出现UU(表示设备已注册且有驱动)。
  4. 检查内核日志:执行dmesg | grep -i "gt9\|error"查找驱动加载失败原因。
  5. 检查地址冲突:确认reg地址与设备实际地址一致(GT911可能是0x140x5d)。
  6. 检查电源:触摸屏模块是否需要独立的电源引脚,若需要确认设备树中是否已配置。
  7. 确认工作流程:修改设备树后必须执行pack重新打包,不能仅替换设备树文件。

九、总结

本文带你完整走了一遍在Tina-SDK中为7寸1024x600 RGB LCD触摸屏添加驱动支持的流程,包括:

  1. ✅ 硬件原理图分析与引脚对应关系确定
  2. ✅ 设备树修改(引脚复用配置 + TWI总线配置 + 触摸设备节点添加)
  3. ✅ 内核模块配置(TinaSDK的make menuconfig用法)
  4. ✅ 编译、打包与烧录
  5. ✅ 触摸功能验证与问题排查
  6. ✅ 扩展知识:为其他I2C设备添加支持的方法

这套流程是嵌入式Linux驱动开发的通用方法,掌握它,你就能触类旁通,为任何硬件外设添加Linux驱动支持。


下一步学习建议

  1. 学习Linux I2C子系统和Input子系统的驱动框架。
  2. 熟悉Linux设备树的语法(属性节点引用等)。
  3. 尝试修改GT911驱动源码,如调整坐标上报算法或增加手势识别功能。
  4. 进一步学习TSLIB触摸屏校准工具的使用。
学习阶段任务
⭐ 入门跟着本文做一遍,在自己板子上成功点亮触摸屏
⭐⭐ 进阶尝试为其他I2C设备(如温湿度传感器)添加驱动支持
⭐⭐⭐ 高级阅读GT911驱动源码,理解input子系统数据上报流程

祝你学得扎实,考核稳过!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 3:46:37

LiFi技术解析:802.11bb标准与应用实践

1. LiFi技术概述&#xff1a;用光传输数据的下一代无线通信标准802.11bb标准&#xff08;俗称LiFi&#xff09;在2023年6月正式获得批准&#xff0c;这项技术利用可见光而非传统WiFi的射频信号进行数据传输。我在实验室实测中发现&#xff0c;其理论峰值速率可达224Gbps&#x…

作者头像 李华
网站建设 2026/5/4 3:46:36

从Audio2Photoreal代码实战出发:拆解FiLM如何让AI‘听声辨动作’

从Audio2Photoreal代码实战拆解FiLM&#xff1a;如何用特征线性调制实现跨模态控制 在生成式AI领域&#xff0c;跨模态控制一直是极具挑战性的研究方向。想象一下&#xff0c;仅凭一段语音就能生成与语调、节奏完美匹配的虚拟人物动作——这正是Audio2Photoreal项目所实现的惊人…

作者头像 李华
网站建设 2026/5/4 3:46:29

【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3

缘由不用数组使动态数码管显示英文字母和一个LED闪烁_编程语言-CSDN问答 我现在是一个初学者&#xff0c;还不会用数组&#xff0c;我看现在网上很多都是用数组直接定义函数的&#xff0c;想知道如果不用数组怎么样才能使动态数码管和LED闪烁同时进行 用变量存储也一样&#…

作者头像 李华
网站建设 2026/5/4 3:46:28

Java轻量级运行时部署黄金三角(启动耗时+内存驻留+OTA升级兼容性)——国家级边缘计算平台技术白皮书核心章节解密

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Java轻量级运行时部署黄金三角的体系化认知 Java轻量级运行时部署的“黄金三角”指代三个相互耦合、缺一不可的核心支柱&#xff1a;**可执行镜像&#xff08;JLink JPackage&#xff09;、容器就绪型…

作者头像 李华