# TouchPointPen **Repository Path**: mingkjl/touch-point-pen ## Basic Information - **Project Name**: TouchPointPen - **Description**: No description available - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-29 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TouchPoint_Demo TouchPoint_Demo 是一个基于 nRF54L15 与 Zephyr 的板级外设验证工程,用于联调运动检测、双 IMU、双通道高精度 ADC、USB 插入检测和电池电压检测等功能。当前仓库已经具备基础驱动代码与设备树覆盖,适合继续做板级 bring-up、驱动联调和应用功能扩展。 ## 项目目标 - 验证 TouchPoint_Demo 硬件板在 Zephyr/NCS 环境下的基础可用性 - 为 LSM6DS3TR-C、ADS131M02、VBUS 检测、电池检测等模块提供最小可用驱动 - 沉淀 nRF54L15 的引脚映射、设备树覆盖和上电时序约束 - 为后续触控/压力采集算法或整机应用提供底层接口 ## 硬件组成 - MCU: nRF54L15 - IMU: 2 x LSM6DS3TR-C,共用 I2C 总线 - 高精度 ADC: ADS131M02,SPI 接口,双通道 24-bit 采样 - USB Type-C: 用于供电、充电与 VBUS 插入检测 - 锂电池检测: 受控分压采样,降低静态功耗 - 运动检测: MOVE_DET 外部输入,可用于中断或唤醒 更完整的板级资源、电源树与 IO 关系说明见: - [TouchPoint_Demo_board_description.md](TouchPoint_Demo_board_description.md) - [TouchPoint_Demo_MCU_IO说明文档.md](TouchPoint_Demo_MCU_IO说明文档.md) ## 软件结构 源码位于 [src](src),当前包含以下模块: - [src/main.c](src/main.c): 当前应用入口,完成 BLE 初始化并启动设备名广播,同时周期打印 MOVE_DET 运动检测状态与中断计数 - [src/motion_detect.c](src/motion_detect.c): MOVE_DET GPIO 初始化、状态读取、中断回调与事件计数 - [src/battery_monitor.c](src/battery_monitor.c): 电池检测开关控制、SAADC 采样、电压换算与 SOC 曲线估算 - [src/usb_detect.c](src/usb_detect.c): VBUS 插入检测 GPIO 读取 - [src/lsm6ds3tr.c](src/lsm6ds3tr.c): 两颗 IMU 的 I2C 访问、芯片 ID 读取、基础初始化与加速度/陀螺仪采样 - [src/ads131m02.c](src/ads131m02.c): ADC 电源控制、硬复位/软复位、寄存器访问和双通道采样 - [src/pinmap.h](src/pinmap.h): 项目内保留的引脚宏定义与别名 设备树覆盖位于 [app.overlay](app.overlay),主要完成: - `imu0`、`imu1`、`adc0` 别名绑定 - `zephyr,user` 节点中的 GPIO 与 ADC 通道定义 - IMU I2C 总线、调试 UART、ADS131M02 SPI 从设备配置 ## 当前实现状态 当前代码更接近板级驱动验证工程,而不是完整产品应用: - 已接入 Zephyr 基础能力:GPIO、I2C、SPI、ADC、UART Log - 已实现基础 BLE 外设广播,设备名默认为 `TouchPoint_Demo` - 已实现运动检测 demo,程序启动后持续输出 MOVE_DET 状态 - 已具备电池电压采样与电量百分比粗略估算逻辑 - 已具备 USB 插入检测接口 - 已具备 IMU/ADC 的基础驱动接口,但默认 `main` 还未串起完整采样流程 如果要继续扩展,通常会从以下方向推进: - 在 `main` 中增加 IMU 与 ADS131M02 初始化和数据读取流程 - 增加 USB 状态、电池状态的统一日志输出 - 根据实测结果修正 ADC、电池分压和 UART 引脚配置 - 增加低功耗唤醒与事件驱动逻辑 ## 构建与烧录 当前工程使用 Zephyr/CMake,现有构建缓存显示目标板为 `nrf54l15dk/nrf54l15/cpuapp`。 典型构建命令: ```powershell west build -b nrf54l15dk/nrf54l15/cpuapp -p always ``` 典型烧录命令: ```powershell west flash ``` 如果你已经在仓库根目录完成过一次配置,也可以直接增量编译: ```powershell west build ``` ## 配置说明 - [CMakeLists.txt](CMakeLists.txt): 注册应用源码 - [prj.conf](prj.conf): 当前启用了 `GPIO`、`I2C`、`SPI`、`ADC`、`LOG` 与串口控制台 - [app.overlay](app.overlay): 板级设备树覆盖,是驱动绑定和引脚选择的核心配置文件 ## 目录概览 ```text TPD/ ├─ app.overlay ├─ CMakeLists.txt ├─ prj.conf ├─ src/ │ ├─ main.c │ ├─ motion_detect.c │ ├─ battery_monitor.c │ ├─ usb_detect.c │ ├─ lsm6ds3tr.c │ ├─ ads131m02.c │ └─ pinmap.h ├─ TouchPoint_Demo_board_description.md └─ TouchPoint_Demo_MCU_IO说明文档.md ``` ## 注意事项 - 当前主程序 [src/main.c](src/main.c) 已接入 BLE 广播和运动检测链路,不代表全部外设已经完成联调 - 板级 IO 约束请优先参考 [TouchPoint_Demo_board_description.md](TouchPoint_Demo_board_description.md) - 仓库内仍有模板痕迹,例如 [sample.yaml](sample.yaml) 还是 Zephyr Hello World 示例内容,后续建议按本项目实际用途更新 - 在继续开发 ADC、UART 或按键功能前,建议先核对 [app.overlay](app.overlay) 与板级说明文档是否完全一致 ## 后续建议 1. 增加一个完整的 bring-up 示例,统一打印 IMU、ADC、USB 和电池状态 2. 补充与当前硬件版本一致的 UART/KEY 引脚说明,避免文档与配置偏差 3. 为每个驱动模块增加最小自检入口,便于单独联调 # Real-time data path The firmware owns timing in four independent layers: 1. The ADS131M02 DRDY falling edge only gives a semaphore. Priority-2 `adc_sample_thread` performs the blocking SPI transfer and pushes a fixed 16-entry latest-wins ring buffer. 2. Priority-4 `motion_process_thread` wakes every 1 ms, consumes the newest sample, applies the low-latency filter and ADC/IMU-gated zero tracking, then adds movement to the HID accumulator. 3. Priority-6 `hid_report_thread` wakes every 8 ms (125 Hz), clips movement to signed 8-bit reports and preserves any remainder. It never runs in the ADC or motion-processing context. Click and double-click reports are disabled. 4. Priority-12 `support_thread` reads both IMUs once per second using a single 12-byte burst per device. I2C runs at 400 kHz; IMU state gates zero tracking only and never modifies X/Y movement. `touchpoint_pipeline_get_stats()` snapshots ADC samples/errors, missed DRDY, ring overflow, HID scheduling ticks, and IMU errors without logging on a real-time path. The BLE peripheral requests a 7.5-15 ms connection interval. A peer may choose a different interval, so validate the negotiated interval and report cadence on the target host during latency testing.