描述
<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>
评论(5)