专业版
#第11届立创电赛#全功能USB线测试仪-基于CH32X035

创建时间:3个月前

394 12

描述

<h3>* 1、项目功能介绍</h3> <hr> <p>电子爱好者手上都有一堆各种USB线,有买廉价电子产品送的劣质线、也有昂贵的USB4全功能线、100W高功率快充线等,从外观上很难区分线缆功能和质量,有一个全功能的测试仪可以快速鉴别,把没有使用价值的线扔了。</p> <h4>主要功能</h4> <ul> <li>支持3种USB线类型:C to C (全功能)、A to C (USB3.0)、A to MicroB (USB2.0);</li> <li>支持所有线的通断测试,快速鉴别线缆功能和好坏,包括:屏蔽层、电源、地、CC、SBU、USB2.0信号、USB 3.0/4.0信号(TX1、TX2、RX1、RX2);</li> <li>支持电源和地线阻值测量(相加总阻值),快速鉴别线缆过电流能力,分辨率1mΩ;(最大支持到10kΩ,也可用于通用电阻测量)</li> <li>支持读取E-Marker芯片详细信息(线缆类型、速度等级、电流能力等);</li> <li>支持判断线缆是否支持华为5A快充(A to C线);</li> <li>0.96寸TFT显示,1个按键切换显示内容;</li> <li>单USB Type-C供电,无需外接其它电路;</li> <li>预留USB通信能力,也可用于更新固件;</li> </ul> <h4>实物示例</h4> <p>A-C线缆:内阻117 mΩ,USB 2.0通信,支持华为5A快充 <img src="//image.lceda.cn/pullimage/VkXJ9We0R7Z1pZ87MdQar7VekZ6KLrgd36Whidi5.jpeg" alt="A-C.jpg"></p> <p>C-C线缆:内阻134 mΩ,全功能线缆,带E-Marker,支持5A电流 <img src="//image.lceda.cn/pullimage/ojY7zSNSadvwFh6kwe6S3WEw98CYTNzPPz9xhEzn.jpeg" alt="C-C-full.jpg"></p> <p>E-Marker详细信息: <img src="//image.lceda.cn/pullimage/yR07psMkhUKf8I8XK22oDTDMkZ3fmkHh0zafuSnC.jpeg" alt="e-marker.jpg"></p> <p>A-MicroB线:送的劣质充电线,内阻过大,不支持通信 <img src="//image.lceda.cn/pullimage/B4DLaCH6O8CiZUkMOvY5QQBKEklB1OQ5yql86TCt.jpeg" alt="micro.jpg"></p> <h3>* 2、项目属性</h3> <hr> <p>原创项目,首次公开,基于前期只能通过LED灯指示通断的版本进行大幅改进。</p> <h3>* 3、开源协议</h3> <hr> <p>本项目硬件和软件完全开源,使用MIT开源协议,使用时请注明出处。</p> <h3>* 4、硬件部分</h3> <hr> <h4>单片机最小系统</h4> <h5>单片机选型</h5> <p><img src="//image.lceda.cn/pullimage/w8heZjAfrFb6u6P9qWwizZOCrRyabVWZcI07hqaY.png" alt="image.png"></p> <p>单片机选择CH32X035G8U6,主要是因为带PD通信模块,同时价格便宜,外围电路简单,IO数刚好够用,并支持USB ISP下载,可以无需下载器。</p> <h5>通信和调试接口</h5> <p><img src="//image.lceda.cn/pullimage/4SvLfOh2wpXeb2PqHBqoseENMWwPCVHd01nrg5uE.png" alt="image.png"></p> <p>使用USB-C口进行电源输入、USB通信(ISP下载,暂未实现上位机)和SWD调试接口。其中SWD调试接口使用了C口未使用的SBU信号,普通线缆不支持,需要使用一个转接小板转出排针接WCH-Link,参考电路如下(不在本项目中): <img src="//image.lceda.cn/pullimage/fANhldNtm55jX4Ye1ybjzScbgzvAZhnEPPPBpahv.png" alt="image.png"></p> <p>预留了一个串口排针,可以通过串口输出信息(暂未实现): <img src="//image.lceda.cn/pullimage/rTYyV1iX0GCSMJmiK6NZ8AG2OXpZPmPlJTgQ53HI.png" alt="image.png"></p> <h5>供电电路</h5> <p><img src="//image.lceda.cn/pullimage/StF4SADA9WznUtcclc181gcZHBDHM1SZmivHVwSL.png" alt="image.png"></p> <p>由于所需功率很小,供电电路非常简单,直接使用XC6219 LDO从USB 5V电源生成3.3V电源,给所有其它电路供电。</p> <h5>按键和显示</h5> <p><img src="//image.lceda.cn/pullimage/lGr0rTRkvxEQ62DBplUbETDcdcJpBan9zCpFOFJ7.png" alt="image.png"></p> <p>显示使用0.96寸的TFT屏,SPI驱动,为了减少单片机IO使用了RC复位电路。</p> <p><img src="//image.lceda.cn/pullimage/hcLNISd3zMTeY1SofRdDgCTzZVS2O1q6Yk1aNu5R.png" alt="image.png"></p> <p>支持2个按键,1个是进入ISP模式,另一个用于切换显示界面。</p> <h4>核心测试电路</h4> <p><img src="//image.lceda.cn/pullimage/HoTcdPrJn2D2SwO0Zgp5B1HKPzVhIelej8eqN5w8.png" alt="image.png"></p> <h5>线缆通断测试</h5> <p>大部分信号线通过环回测试通断,减少使用的单片机IO数,例如USB2.0的D+和D-、USB3.0的TX+/TX-等信号对,在USB4和USB5短接,在USB2和USB3一端接地,另一端接单片机IO,IO设置为上拉输入,如果相应信号线对是通的就会被拉低。</p> <h5>线缆电源线内阻测试</h5> <p>内阻测试也是在USB4和USB5将VBUS和GND短接,在USB2和USB3的VBUS通过参考电阻R8输出测量电流(约3.3V/100Ω=33mA),单片机ADC测量VBUS的电压即可计算出被测线缆电源+地线电阻之和。 为了提高小电阻测量精度,经过U2进行101倍同相放大并经过RC低通滤波器再输入ADC测量,实现mΩ级测量分辨率。 未经过放大的电压也直接输入另一路ADC,用于测量较大的电阻。 为了减少耗电和R8发热,通过Q1控制电流输出开关,每次测量前才打开,测量完成后关闭。</p> <h5>华为充电线检测</h5> <p>华为5A快充线在CC线上有56k上拉电阻(接到VBUS),由于VBUS已经短接到GND,测量时实际是下拉,通过单片机IO输出高电平,经过R10形成分压,ADC测量分压大小即可判断是否带56k电阻。</p> <h5>E-Marker信息读取</h5> <p>E-Marker使用CH32X035的PD模块进行通信,并使用2个IO并联输出高电平作为VCONN供电。由于线缆在不同方向插入时VCONN引脚和CC通信引脚会交换,硬件设计上两种情况都要支持,由软件进行识别处理。 标准PD协议要求CC线上由Rp和Rd电阻形成分压作为通信的偏置电压,BMC编码信号是调制在偏置电压上,因此使用R10作为Rd电阻,虽然实测在不提供Rd电阻时也能成功读取E-Marker。</p> <h3>* 5、软件部分</h3> <hr> <p>软件主要使用AI辅助生成,详细参考源码内文档。</p> <h4>系统架构</h4> <pre><code class="language-c">┌─────────────────────────────────────┐ │ 应用层 (Application) │ │ ┌──────────┬──────────┬──────────┐ │ │ │ UI显示 │ 测试逻辑 │ 按键处理 │ │ │ └──────────┴──────────┴──────────┘ │ ├─────────────────────────────────────┤ │ 状态机层 (State Machine) │ │ ┌───────────────────────────────┐ │ │ │ 测试状态机 + 电阻测量状态机 │ │ │ │ - 非阻塞执行 │ │ │ │ - 时间戳驱动 │ │ │ │ - 事件响应 │ │ │ └───────────────────────────────┘ │ ├─────────────────────────────────────┤ │ 驱动层 (Driver Layer) │ │ ┌──────┬──────┬──────┬───────────┐ │ │ │GPIO │ ADC │ SPI1 │ SysTick │ │ │ └──────┴──────┴──────┴───────────┘ │ ├─────────────────────────────────────┤ │ 硬件抽象层 (HAL) │ │ CH32X035标准外设库 │ └─────────────────────────────────────┘</code></pre> <h4>目录结构</h4> <pre><code class="language-c">CH32X035G8U/ ├── Startup/ # 启动文件(向量表、复位处理) ├── Core/ # RISC-V 核心初始化(时钟、延时) ├── Peripheral/ # WCH HAL 库(GPIO/ADC/SPI/USBPD 等) ├── Debug/ # printf 串口调试 ├── User/ # 应用代码 │ ├── main.c # SysTick(1ms)、初始化、主循环 │ ├── cable_gpio.c/h # 引脚配置、电源控制、CC_E 驱动 │ ├── cable_adc.c/h # 双通道 ADC、电阻计算、自动量程 │ ├── cable_spi.c/h # 硬件 SPI1 驱动 TFT │ ├── cable_tft.c/h # ST7735S 驱动、多字体渲染 │ ├── cable_test.c/h # 测试状态机、按键、双模式显示 │ ├── emarker_pd.c/h # USB PD 协议、E-Mark 通信 │ └── cable_font.c/h # 点阵字库(5×8/8×16/12×24) └── Ld/Link.ld # 链接脚本(62K Flash / 20K RAM)</code></pre> <h4>显示模式</h4> <ol> <li>MODE_CONTINUITY - 通断测试+电阻值+快充识别,合并显示在同一页面</li> <li>MODE_EMARK - E-mark信息(通过USB PD协议读取详细信息)</li> </ol> <p><strong>通断模式</strong>:</p> <pre><code class="language-c">┌───────────────────────────────────┐ 160×80 │ ● USB 2.0 HUAWEI 5A │ ← 线缆等级 / 快充状态 ├───────────────────────────────────┤ │ R: 123 mΩ │ ← 电源线电阻(12×24 大字体) ├───────────────────────────────────┤ │ ■ D+- ■ CC ■ SBU ■ SHLD │ ← 信号通断 │ ■ TX1 ■ RX1 ■ TX2 ■ RX2 │ 绿=通 / 红=断 ├───────────────────────────────────┤ │ E-Marker: 5A USB 3.2 Gen2 │ ← E-Mark 摘要 / 速率 └───────────────────────────────────┘</code></pre> <p><strong>E-Mark模式</strong>:</p> <pre><code class="language-c">┌───────────────────────────────────┐ 160×80 │ E-Mark: YES Passive │ ← E-Mark 存在性 / 线缆类型 ├───────────────────────────────────┤ │ USB 3.2 Gen2 5A │ ← 速率等级 / 电流能力 ├───────────────────────────────────┤ │ EPR: Yes MaxV: 20V │ ← EPR 支持 / 最大电压 │ SBU: Yes Len: ~1m │ ← SBU 支持 / 线缆长度 │ VID: 0xFFFF PID: 0xFFFF │ ← Vendor ID / Product ID │ HW: 0x1 FW: 0x1 │ ← 硬件 / 固件版本 │ VDO: 12345678 87654321 │ ← Cable VDO 原始值 └───────────────────────────────────┘</code></pre> <h4>构建</h4> <p>在 MounRiver Studio 中,打开 <code>CH32X035G8U.wvproj</code> 工程 → 点击<code>编译</code>。注意 <code>obj/</code> 下 Makefile 由 IDE 自动生成,勿手工修改。</p> <p>或使用命令行方式:</p> <pre><code class="language-bash">cd CH32X035G8U/obj make -j16 all</code></pre> <p>产物:<code>obj/CH32X035G8U.elf</code>( ISP下载使用<code>obj/CH32X035G8U.hex</code>)。</p> <h4>固件下载</h4> <h5>使用WCH-Link下载和调试</h5> <ul> <li>SWD引出到了供电USB-C口的SBU引脚,使用转接板连接到WCH-Link/WCH-LinkE</li> <li>使用WCH-LinkUtility软件下载:<a href="https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html" target="_blank">WCH-LinkUtility</a></li> <li>或在MounRiver Studio内点击 <code>下载</code>(F8)下载</li> </ul> <h5>直接使用USB下载</h5> <ul> <li>按住ISP按键,再插入供电USB-C口连接电脑</li> <li>使用WCH ISP软件下载:<a href="https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html" target="_blank">WCH-ISP</a></li> </ul>

文档

BOM

附件

附件名 下载
CH32X035G8U.hex
CableTester_src.zip
演示视频.mp4

成员

评论(5)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
haha2xiao 回复
<p>需要,复刻一个玩玩[emojis:色]</p>
i_code 回复
<p>需要,复刻一个玩玩</p>
i646593001 回复
<p>很有意义的项目,谁做一批出来,我买买买。</p>
eda_thuqidqri 回复
<p>牛牛牛,这个线阻测出来准吗?刚想准备买个开尔文套件测线阻</p>
eleqian 回复
<p>@eda_thuqidqri 测量本身是很准的,但是USB母座和线缆间有接触电阻,不同设备测量有几十mΩ偏差也正常,更多是做相对大小对比</p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow