内容介绍
内容介绍
PIC32CM5164 TrustZone 安全触摸项目
1. 项目介绍
本项目是基于 Microchip PIC32CM5164LS00048 微控制器的 TrustZone 安全触摸按键方案,实现了一个带安全隔离的触摸感应应用。
项目信息 | 说明 |
|---|---|
芯片 | PIC32CM5164LS00048 (ARM Cortex-M23 + TrustZone) |
主频 | 12 MHz |
开发环境 | MPLAB X IDE + XC32 编译器 |
核心功能 | 自电容式触摸感应 + TrustZone 安全隔离 |
安全特性 | 安全世界/非安全世界隔离,非安全调用入口 |
2. 硬件介绍
2.1 微控制器 (PIC32CM5164LS00048)
- 内核: ARM Cortex-M23 (32-bit)
- Flash: 512 KB
- SRAM: 64 KB
- 工作电压: 1.8V ~ 3.6V
- 封装: 48-pin LQFP
2.2 外设资源
外设 | 用途 | 所在 |
|---|---|---|
PTC (触摸感应) | 自电容触摸检测 | 非安全 |
RTC | 触摸测量定时触发 | 非安全 |
SERCOM3 (USART) | 调试串口通信 | 非安全 |
PORT (PA15) | LED 控制输出 | 安全 |
GCLK | 系统时钟管理 | 安全 |
EVSYS | 事件系统 | 非安全 |
NVMCTRL | Flash 控制 | 安全 |
2.3 硬件连接
PIC32CM5164LS00048
PA15 (BTN_LED) ───── LED
PTC (Y23/Y16) ───── 触摸
SERCOM3 (TX) ───── USB转TTL (调试)
SERCOM3 (RX)
3. 方案框图和设计思路
3.1 系统架构

3.2 设计思路
- 安全隔离: 通过 ARM TrustZone 将系统分为安全和非安全
- 触摸检测: 采用 QTouch 库的自电容模式 (
NODE_SELFCAP_SHIELD),带频率跳变抗干扰 - 定时触发: 使用 RTC Timer0 产生 20ms 周期中断触发触摸测量
- 状态显示: 触摸按键检测到触摸时点亮 PA15 上的 LED
- 回调机制: 使用
cmse_nonsecure_entry属性暴露安全 API 给非安全世界调用
4. 调试软件、软件流程图及关键代码
4.1 调试工具
软件 | 用途 |
|---|---|
MPLAB X IDE | 项目管理、编译、调试 |
MPLAB PICkit 4 | 烧写和调试 |
Data Visualizer | 触摸数据可视化 (QTouch Tunes) |
Serial Terminal | USART 调试输出 (如 PuTTY) |
4.2 主程序流程图


4.3 触摸处理详细流程代码调用
4.5 关键代码
主入口 (main.c:39-68):
int main(void)
{
uint32_t msp_ns = *((uint32_t *)(TZ_START_NS));
volatile funcptr_void NonSecure_ResetHandler;
SYS_Initialize(NULL); // 初始化所有模块
if (msp_ns != 0xFFFFFFFF) {
__TZ_set_MSP_NS(msp_ns); // 设置非安全栈
// 获取非安全复位向量并跳转
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
NonSecure_ResetHandler();
}
while (1) {
touch_process();
if (measurement_done_touch == 1)
touch_status_display1(); // 触摸状态显示
}
}
触摸状态显示 (main.c:71-80):
void touch_status_display1(void)
{
uint8_t key1 = get_sensor_state(0) & KEY_TOUCHED_MASK;
if (key1 != 0)
BTN_LED_Set(); // PA15 输出高,点亮 LED
else
BTN_LED_Clear(); // PA15 输出低,熄灭 LED
}
触摸传感器配置 (touch.c:170-194):
static touch_ret_t touch_sensors_config(void)
{
touch_ret_t touch_ret = TOUCH_SUCCESS;
// 初始化采集模块
touch_ret = qtm_ptc_init_acquisition_module(&qtlib_acq_set1);
touch_ret = qtm_ptc_qtlib_assign_signal_memory(&touch_acq_signals_raw[0]);
// 使能并校准每个节点
for (sensor_nodes = 0; sensor_nodes < DEF_NUM_CHANNELS; sensor_nodes++) {
touch_ret = qtm_enable_sensor_node(&qtlib_acq_set1, sensor_nodes);
touch_ret = qtm_calibrate_sensor_node(&qtlib_acq_set1, sensor_nodes);
}
// 初始化按键
for (sensor_nodes = 0; sensor_nodes < DEF_NUM_SENSORS; sensor_nodes++) {
touch_ret = qtm_init_sensor_key(&qtlib_key_set1, sensor_nodes,
&ptc_qtlib_node_stat1[sensor_nodes]);
}
return touch_ret;
}
安全世界非安全调用入口 (nonsecure_entry.c:44-46):
int __attribute__((cmse_nonsecure_entry)) secure_add(int x, int y)
{
return (x + y); // 安全 API 示例
}
5. 功能展示图及说明
5.1 功能描述
功能 | 说明 |
|---|---|
触摸检测 | 自电容式触摸传感器,Y23/Y16 电极 |
频率跳变 | 3 频点自动跳变 (FREQ_SEL_0/1/2),抗工频干扰 |
LED 反馈 | PA15 连接 LED,触摸时点亮 |
TrustZone 隔离 | 安全世界运行主循环,非安全世界运行触摸采集 |
5.2 触摸配置参数
#define DEF_NUM_CHANNELS 1u // 1 个采集通道
#define DEF_NUM_SENSORS 1u // 1 个按键
#define DEF_SENSOR_TYPE NODE_SELFCAP_SHIELD // 自电容屏蔽模式
#define DEF_TOUCH_DET_INT 4u // 触摸去抖 4 次确认
#define DEF_TOUCH_MEASUREMENT_PERIOD_MS 20u // 20ms 测量周期
#define NUM_FREQ_STEPS 3u // 3 频点跳变
#define KEY_TOUCHED_MASK 0x01 // 触摸状态掩码
5.3 功能展示
按下触摸按键,灯亮起\熄灭

6. 项目中遇到的难题及解决方法
6.1 环境部署困难
本编译烧录环境特别难部署,靠参考官网WIKI以实现
如何使用 MPLAB® 代码配置器(MCC)Harmony - 开发者帮助创建基于 TrustZone® 的触摸项目
6.2 触摸灵敏度不足
问题: 手指触摸时检测不到状态变化
解决: 调整触摸参数:
// 降低阈值,提高灵敏度
#define KEY_0_PARAMS { 20u, HYST_25, NO_AKS_GROUP }
// 原始值较大,改为 20
7. 心得体会
- TrustZone 边界管理: 使用
cmse_nonsecure_entry和cmse_nonsecure_call属性标记边界函数是关键,编译器会自动生成 veneer 代码 - 触摸调参经验: 自电容触摸需要根据 PCB 走线调整
CSD(Charge Share Delay) 和滤波等级,FILTER_LEVEL_16对大多数场景已足够
附件下载
microchip.zip
代码文件
团队介绍
个人项目
评论
0 / 100
查看更多
猜你喜欢
Funpack5-2 - 用EV41C56A实现触摸控制LED该项目使用了Microchip EV41C56A 开发板,实现了触摸输入与LED控制的设计,它的主要功能为:单次触摸点亮板载LED,再次触摸关闭LED。
xusp99
35
Funpack5-2 - 基于Microchip EV41C56A实现触摸按键控制LED该项目使用了Microchip EV41C56A,实现了触摸按键控制LED的设计,它的主要功能为:触摸按键控制LED的亮灭。
波波l
38
Funpack5-2 - 基于EV41C56A实现触摸控制LED该项目使用了EV41C56A,实现了触摸控制LED控制的设计,它的主要功能为:通过板载触摸传感器识别用户操作,支持两种触摸手势:单击和长按,分别实现 LED 状态翻转和亮度调节功能。
鲜de芒果
26