
ESP32-Typec电流表(PPS诱骗器&监听器)
简介
基于 ESP32-S3 的 USB-PD 诱骗器与监听器
简介:基于 ESP32-S3 的 USB-PD 诱骗器与监听器开源协议
:GPL 3.0
描述
基于 ESP32-S3 的 USB-PD 诱骗器与监听器
> 11.25 上传固件与外壳stl模型
> 对于部分充电头仍有BUG,还在修复,慎重复刻!
PD诱骗与电流监测

PD报文解析

实施解析PD报文

PD报文记录

PCB

一、项目概述
1.1 项目名称
ESP32-S3 USB Power Delivery 诱骗器与协议分析仪
1.2 项目简介
本项目基于 立创·ESP32S3R8N8开发板,实现 USB Power Delivery (PD) 电压诱骗(主动请求)与协议监听(被动抓包)、实时功率监测与 LVGL 可视化。主要用途包括充电器测试、PD 协议学习、方案验证与维修诊断。
核心硬件:ESP32‑S3 + CH224A (PD 诱骗) + CH32X035 (PD 监听) + INA226(电参采集)+ 9mΩ 分流电阻 + 双 USB‑C(输入/输出)+ 240×240 SPI TFT。
1.3 应用场景
- 📱 移动设备快充测试:验证手机/笔记本的 PD 协议支持情况
- 🔌 电源适配器开发:测试充电器的 PD 协议实现
- 📚 教学实验平台:USB-PD 协议原理学习与实践
- 🔧 维修诊断工具:快速检测充电异常问题
- 🧪 硬件方案验证:原型设计阶段的供电测试
1.4 技术亮点
- 双模式:诱骗模式(主动请求电压) / 监听模式(被动采集,不干扰)
- 电压支持:5 / 9 / 12 / 15 / 20 / 28 V + PPS (3.0–21.0 V,100 mV 步进)
- 实时测量:INA226 精度 ±1%,9 mΩ 分流电阻,电压 0–36V,电流 0–6A
- 协议支持:USB‑PD 2.0 / 3.0 / 3.1(支持解析 Source Capabilities / Request / PS_RDY / VDM 等)
- UI:LVGL 8.3 + TFT(实时显示、数据包列表、HEX 导出)
- 软件架构:三层(Application / Business / HAL),FreeRTOS 任务隔离,UART 接收后台任务,I²C 驱动器抽象
- 按照USBPD3.2手册进行解析PD报文

二、硬件设计
2.1 核心硬件清单
| 硬件模块 | 型号/规格 | 功能说明 | 数量 |
|---|---|---|---|
| 主控开发板 | 立创·ESP32S3R8N8开发板 | 主控芯片,运行三层架构软件 | 1 |
| PD 诱骗芯片 | CH224A (I2C 地址: 0x23) | 主动请求 USB-PD 电压档位 | 1 |
| PD 监听芯片 | CH32X035 | 监听 CC 线 PD 通讯协议 | 1 |
| 电流传感器 | INA226 (I2C 地址: 0x40) | 测量电压/电流/功率 | 1 |
| 采样电阻 | 9mΩ / 2W | INA226 电流采样 | 1 |
| 显示屏 | 240x240 TFT LCD (SPI) | LVGL 图形界面显示 | 1 |
| 按键 | 拨轮开关 | 左键/右键/下键(GPIO 6/7/42) | 1 |
| USB-C 接口 | 公头 + 母头 | 输入输出接口 | 2 |
2.1.1 ESP32-S3 控制核心

原理图采用 立创·ESP32S3R8N8开发板,负责界面绘制、PD 业务逻辑、电压管理和数据解析。
主要特性:
- 240MHz 双核 Xtensa LX7
- 集成 USB OTG/PSRAM
- 内置 Wi-Fi,可未来扩展无线 OTA / Web UI
- 资源充足,可同时运行 LVGL + CH32 解码任务
所有外围驱动通过 HAL 层抽象,包括:
- I²C(CH224A / INA226)
- UART(CH32 PD 抓包)
- SPI(TFT 显示屏)
2.1.2 CH224A USB-PD 诱骗芯片

本电路采用 CH224A 作为 USB-PD 的主动协商器件,用于向电源适配器请求电压档位。
硬件特性:
- I²C 地址:0x23
- 支持标准 PD 固定档位:5V/9V/12V/15V/20V/28V
- 支持 PPS 可调:3V ~ 21V
- 配合 ESP32-S3 可实现按键切换电压、长按调节 PPS
典型应用电路包括:
- CC1/CC2 上拉电阻
- VBUS 过压保护电路
- CH224A 使能脚(与 GPIO 控制电源模式切换)
2.1.3 CH32X035 PD 监听器(Sniffer)

为了不干扰 PD 协商过程,本项目采用 CH32X035 独立捕获 CC 线的 PD 通信(BMC 调制)。
监听功能包括:
- 捕获 Source Capabilities、Request、PS_RDY 等 PD 报文
- 解析 SOP / SOP’ / SOP’’
- 通过 UART 将解析结果实时发送给 ESP32-S3
硬件实现:
- CH32X035 配合外部 CC1/CC2 电平检测电路
- UART 与 ESP32-S3 的 RX/TX 交叉连接
- 独立供电,保证监听链路不会对 PD 诱骗产生干扰
2.1.4 INA226 精密电流/电压采集

采用 INA226 作为主电流/电压监测器件,具备高精度与宽量程优势。
关键硬件参数:
- I²C 地址:0x40
- 电压测量范围:0~36V
- 电流测量:配合 9mΩ 采样电阻,支持 6A 以内
- 上位机:ESP32 读取 INA226 的电压/电流/功率寄存器
硬件注意点:
- 浮地测量:INA226 正负输入跨接在取样电阻两端
- 使用 2W 大功率分流电阻,避免高电流发热
- 在 PD 诱骗高电压(20~28V)时仍能稳定工作
2.1.5 双 USB-C 接口设计

本设计包含 输入端(电源适配器) 与 输出端(被测设备) 两个 Type-C。
硬件结构:
- 输入 USB-C:与 CH224A/CH32X035 的 CC 信号相连,用于 PD 协商与监听
- 输出 USB-C:提供 Vbus 输出给负载设备
- 采用 MOS + 二极管的防倒灌与切换电路(原理图 U6/U7 区块)
- CC1/CC2 通过分离电阻引出,避免 PD 调试产生互相影响
确保以下特性:
- Vbus 反灌保护
- USB-C 插入方向适配(CC 自动切换)
- 高电压下的可靠隔离(20~28V)
2.1.6 TFT SPI 显示屏

使用 240×240 分辨率 TFT 显示屏,SPI 接口。
硬件特性:
- 驱动 IC:ST7789
- 支持 LVGL 8.3
- 使用 TFT_eSPI 库驱动
- 采用 GPIO + SPI 控制片选、D/C、Reset、Backlight
原理图已包含背光控制电阻、滤波电容和 SPI 信号完整性设计。
2.1.7 TPS54202 同步降压电源

为整板提供 3.3V 稳压电源。
硬件特点:
- 28V 宽输入
- 2A 输出能力
- 低待机功耗
- 典型电路包括:电感、肖特基二极管、输入输出滤波电容
这是保证整个 PD 系统在高压条件下稳定工作的重要部分。
2.2 系统框图

2.3 引脚分配
| 功能 | GPIO | 说明 |
|---|---|---|
| I2C_SDA | GPIO 21 | CH224A + INA226 共享 |
| I2C_SCL | GPIO 22 | CH224A + INA226 共享 |
| UART1_RX | GPIO 18 | CH32 数据接收 |
| UART1_TX | GPIO 17 | CH32 数据发送 |
| TFT_CS | GPIO 5 | TFT 片选 |
| TFT_DC | GPIO 16 | TFT 数据/命令 |
| TFT_RST | GPIO 23 | TFT 复位 |
| TFT_MOSI | GPIO 23 | SPI 数据 |
| TFT_SCLK | GPIO 18 | SPI 时钟 |
| BUTTON_LEFT | GPIO 6 | 左键(上拉输入) |
| BUTTON_DOWN | GPIO 7 | 下键(上拉输入) |
| BUTTON_RIGHT | GPIO 42 | 右键(上拉输入) |
| CC_EN | GPIO 4 | CH224A 使能控制 |
三、软件架构
3.1 三层架构设计
┌─────────────────────────────────────────────────┐
│ Application Layer (应用层) │
│ ┌───────────────────────────────────────────┐ │
│ │ AppController │ │
│ │ • 模块初始化与生命周期管理 │ │
│ │ • 主循环调度(按键/传感器/显示更新) │ │
│ │ • 按钮回调事件分发 │ │
│ │ • 模式切换(诱骗模式/监听模式) │ │
│ └───────────────────────────────────────────┘ │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────▼──────────────────────────────┐
│ Business Logic Layer (业务逻辑层) │
│ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ VoltageManager │ │USBPDProtocolHandler │ │
│ │ • 电压档位选择 │ │• PD 数据包解析 │ │
│ │ • PPS 精细调节 │ │• 协议类型识别 │ │
│ │ • 配置持久化 │ │• HEX 格式化输出 │ │
│ │ • 状态同步到UI │ │• 数据包存储管理 │ │
│ └──────────────────┘ └──────────────────────┘ │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────▼──────────────────────────────┐
│ HAL Layer (硬件抽象层) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │CH224A │ │INA226 │ │SerialDriver │ │
│ │Driver │ │Driver │ │(CH32 UART) │ │
│ │• 设置电压│ │• 读传感器│ │• 后台任务 │ │
│ │• PPS控制 │ │• 校准配置│ │• 数据包回调 │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ ┌──────────┐ ┌──────────────────────────────┐ │
│ │Button │ │DisplayDriver │ │
│ │Driver │ │• LVGL UI刷新 │ │
│ │• 去抖 │ │• 双界面切换(主屏/USBPD屏) │ │
│ │• 事件 │ │• 传感器数据渲染 │ │
│ └──────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────┘

3.2 关键模块说明
3.2.1 应用层(Application Layer)
- 文件:
src/application/AppController.cpp - 职责:
- 系统启动时检测模式(通过 DOWN 按钮)
- 初始化所有驱动和业务模块
- 主循环中协调按键扫描、传感器读取、UI刷新
- 按钮事件回调注册与分发
3.2.2 业务逻辑层(Business Logic Layer)
-
VoltageManager(
src/business/VoltageManager.cpp):- 管理 8 种电压档位(5V/9V/12V/15V/20V/28V/PPS/AVS)
- PPS 电压步进调节(100mV 步长,3V~21V)
- 与 CH224A 驱动交互,应用电压选择
-
USBPDProtocolHandler(
src/business/USBPDProtocolHandler.cpp):- 接收 CH32 串口原始数据包
- 调用
usbpd_parser.cpp解析协议 - 管理最多 1000 个数据包的缓存
- 支持 HEX 格式导出到串口
3.2.3 硬件抽象层(HAL Layer)
| 驱动模块 | 关键接口 | 硬件依赖 |
|---|---|---|
| CH224ADriver | setVoltage(mode), setPPSVoltage(mV), isPDActive() | CH224A (I2C 0x23) |
| INA226Driver | readSensorData(), configure() | INA226 (I2C 0x40) |
| SerialDriver | initUART1(), setPacketCallback(), startBackgroundTask() | UART1 (CH32) |
| ButtonDriver | init(), tick(), onLeftClick(), onRightClick() | GPIO 6/7/42 |
| DisplayDriver | updateSensorData(), switchToScreen(), refresh() | TFT SPI + LVGL |
3.3 技术栈
| 分类 | 技术选型 | 版本 |
|---|---|---|
| 框架 | Arduino (PlatformIO) | - |
| RTOS | FreeRTOS (ESP-IDF 内置) | - |
| UI框架 | LVGL | 8.3.10 |
| I2C库 | Wire (Arduino) | - |
| 电流传感器库 | INA226_WE | 1.2.12 |
| 按键库 | OneButton | 2.6.1 |
| TFT驱动 | TFT_eSPI | 2.5.43 |
四、功能特性
4.1 核心功能
4.1.1 双模式运行
| 模式 | 启动方式 | 功能描述 | 应用场景 |
|---|---|---|---|
| 诱骗模式 | 按住 DOWN 键上电 | • 可主动切换电压档位 • 支持 PPS 精细调节 • 实时监测输出参数 | 设备供电测试、充电器性能验证 |
| 监听模式 | 正常上电 | • 锁定 5V 供电 • 被动监听 CC 线通讯 • 不干扰原有协议交互 | 协议分析、教学演示、故障诊断 |
4.1.2 电压诱骗功能
- 固定档位:5V / 9V / 12V / 15V / 20V / 28V
- 可调模式:
- PPS (Programmable Power Supply):3V ~ 21V,步进 100mV
- AVS (Adjustable Voltage Supply):动态电压调节
- 操作方式:
- 左右键切换档位
- 长按左右键在 PPS 模式下微调电压
- 下键确认应用选择
4.1.3 实时功率监测
- 监测参数:
- 电压:±1% 精度
- 电流:±1% 精度(通过 9mΩ 采样电阻)
- 功率:实时计算显示
- 更新频率:5 秒/次(可配置)
- 量程范围:
- 电压:0 ~ 36V
- 电流:0 ~ 6A
- 功率:0 ~ 216W
4.1.4 USB-PD 协议分析
- 支持协议:USB PD 2.0 / 3.0 / 3.1
- 可解析消息类型:
- Source Capabilities (电源能力)
- Request (请求)
- Accept/Reject (应答)
- PS_RDY (电源就绪)
- Vendor Defined Messages (厂商自定义)
- 数据展示:
- 实时解析显示(LVGL 界面)
- HEX 原始数据导出(串口)
- 最多存储 1000 个数据包
4.1.5 图形化界面
- 界面设计:使用 NXP GUI Guider 可视化设计工具生成
- 屏幕切换:
- 主屏幕:电压选择、传感器数据、PD 状态
- USBPD 屏幕:协议数据包列表、HEX 数据显示
- 交互方式:
- 单击左/右键:切换电压档位
- 长按左/右键:PPS 精细调节 / 切换到 USBPD 界面
- 单击下键:应用电压设置 / 导出数据包到串口
4.2 特色亮点
4.2.1 架构设计优势
✅ 清晰的分层架构:应用层、业务层、HAL层解耦,易于维护和扩展
✅ 无全局变量污染:V2.1 版本彻底废弃全局变量,使用对象引用传递
✅ 回调机制解耦:下层通过回调通知上层,避免循环依赖
✅ 依赖注入设计:驱动对象通过构造函数传递,便于单元测试
4.2.2 并发处理
✅ FreeRTOS 多任务:串口数据接收独立后台任务,不阻塞主循环
✅ LVGL 定时器:UI 刷新异步处理,保证界面流畅
✅ 按键去抖:OneButton 库硬件级去抖,支持单击/长按/双击事件
4.2.3 内存优化
✅ 固定缓冲区:串口接收使用 256 字节固定缓冲区,避免动态分配
✅ 数据包限制:USB-PD 数据包最多存储 1000 个,防止内存溢出
✅ 字体压缩:LVGL 字体使用内置压缩算法,节省 Flash 空间
五、开发与测试
5.1 开发环境
5.1.1 必需工具
- IDE:Visual Studio Code
- 插件:PlatformIO IDE
- 编译平台:Espressif32 (Arduino Framework)
- 烧录工具:esptool.py (PlatformIO 自动集成)
5.1.2 推荐工具
- UI 设计:NXP GUI Guider 1.6+
- 串口调试:PlatformIO Serial Monitor / Termite
- 协议分析:Wireshark (USB-PD 插件)
- 版本管理:Git
5.2 测试验证
| 模块 | 测试内容 | 结果 |
|---|---|---|
| CH224A | 5~28V 档位诱骗 | ✅ 稳定 |
| CH32X035 | PD 报文监听 | ✅ 能完整解析 |
| INA226 | 电压/电流精度 | ✅ 误差 <1% |
| MOS 防倒灌 | 反向插入测试 | ✅ 无反灌 |
| TFT | LVGL 刷新性能 | ✅ >30 FPS |
| 整机 | 20V/5A 功率测试 | ✅ 通过 |
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










