当前位置: 首页 > news >正文

基于STM32的PD抓包器

目录

前言

一、实物展示

二、硬件设计

三、软件设计

四、GUI设计

总结

前言

平时经常做一些PD协议相关的开发,肯定少不了抓包器,目前市面上成熟的产品像Power-Z、GRL等都很好用,但是这些产品的vbus和cc波形采样速率有点低,且只有抓包的功能,就打算做一个高采样率的抓包器并带诱骗功能。闲来没事,就是干!

本项目旨在设计并实现一个基于STM32(或其他MCU)平台的USB PD抓包器,通过输入捕获、DMA和协议解析算法,实现对PD通信过程的实时采集与还原,可以更直观地理解PD协议流程、分析角色切换、诊断通信故障,同时也可以增加一些定制化的功能。

一、实物展示

STM32硬件:

手搓了一个简单的GUI上位机界面,目前的Log是Apple 18W充电头小米充电宝充电,数据解析太多了,就做了简单几个

二、硬件设计

vbus采集使用分压电阻直接用内部ADC采集就可以,不讲究精度问题。

电流采集使用INA240A芯片,然后通过内部ADC采集,将电压数据转为电流值即可,原理图如下:

CC采集就比较简单了,直接一个运放做跟随器,连接到STM32即可。

三、软件设计

cubemx配置图:

1、比较器配置

选择比较器正极到CC引脚,负极通道到内部DAC,同时选择输出通道到定时器

2、DAC配置

设置CC信号的比较器负极的阈值,将CC低电压信号转为3.3V的数字信号,提供后级采样

3、ADC配置

目前只配置了CC采样的ADC,用于检查CC目前的电压状态,区分Vconn、attach、open,其对应的电压阈值可以参考USB-IFD的Type-C协议文档

4、串口配置

打印调试

5、USB_PD配置

打算做PD诱骗功能的,抓包器功能还没搞好,先配置在这里

6、USB_Device配置

只支持全速配置,打脑壳的很,每个端点只有64Byte,当时选型没注意这里,大意了。我没有c使用cubemx的usb类型配置,用的第三方库Cherryusb

7、Timer

采样核心,比较器的输出连接通道,使用DMA采集CC信号高低电平的时间,将时间信号转化为单独bit流,再将bit流转换为5B编码,5B编码转为4B编码后通过USB接口上传

可以看到Timer定时器干的事情很多,所以需要在一些数据转换的环节中插入fifo缓存,防止丢包!

8、Freertos

任务调度功能,代码模块化处理容易,其实裸机也可以,但是后期不好维护以及加其他功能。

四、GUI设计

用python-qt写的,比较简单,接收到STM32传输的数据后,解析数据,然后显示在界面上。解析的内容比较少,要根据USB-PD协议慢慢添加,东西太多了,精力有限。


总结

干了2-3周,感觉STM32的性能还是有限,计划增加ADC采集VBUS和CC电压的,但是目前PD信息传输还是会丢点包,因为用的USB通信(STM32无法支持高速通信,理论12M),只能靠加fifo,加了过多的fifo之后感觉RAM快爆了,所以后续还是考虑替换为FPGA接着干!!!这个STM32的方案就先放放....

http://www.dtcms.com/a/304340.html

相关文章:

  • Vue3 状态管理新选择:Pinia 从入门到实战
  • Item24:若所有参数皆需类型转换,请为此采用non-member函数
  • [leetcode] 组合总和
  • 《林景媚与数据库神谕》
  • 【C++算法】82.BFS解决FloodFill算法_被围绕的区域
  • 驱动(platform)
  • 青少年软件编程图形化Scratch等级考试试卷(三级)2025年6月
  • CentOS Nginx 1.13.9 部署文档
  • Elasticsearch索引设计与性能优化实战指南
  • 使用Y modem协议进行瑞萨RX MCU OTA数据传输
  • vim的`:q!` 与 `ZQ` 笔记250729
  • 数据结构之时间复杂度
  • 【绘制图像轮廓】——图像预处理(OpenCV)
  • 互联网医院系统包含哪些优势?
  • taro+react重新给userInfo赋值后,获取的用户信息还是老用户信息
  • 搭建一个自定义的 React 图标库
  • 设计模式---单例
  • 测试用例的编写:让测试用例的编写条理起来
  • Redis学习09-AOF-混合持久化
  • iPhone 神级功能,3D Touch 回归!!!
  • 对象的创建过程
  • c++-list
  • Python 程序设计讲义(29):字符串的处理方法——大小写转换
  • 【C++算法】83.BFS解决最短路径问题_最短路径问题简介
  • Redis学习07-Redis的过期策略
  • (1-7-5) Mysql 对 数据的基本操作
  • MC0241防火墙
  • Object.freeze() 深度解析:不可变性的实现与实战指南
  • 道路坑洞检测数据集介绍8300张图片-智能道路巡检系统 车载安全监测设备 城市基础设施管理
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现