FPC 不良导致 设备无法正常被识别。 在 USB 接口包括传统的 Micro USB、USB Type-A 以及现在通用的 USB Type-C中D 和 D- 是极其重要的两条信号线。结合你提到的产线维修、FPC柔性电路板折弯以及 Type-C 口不良的背景以下为你详细拆解什么是 D/D- 以及在产线/维修时如何具体进行测试。一、 什么是 D 和 D-D (Data Plus)和D- (Data Minus)是 USB 2.0 协议中规定的一组差分数据信号线。核心作用它们负责在设备如手机、嵌入式板卡和主机如电脑、U盘、OTG设备之间传输数据和识别设备。识别/握手当设备插入时系统通过 D/D- 上的电平变化来识别是否有设备接入以及设备是低速、全速还是高速设备。数据传输USB 读写文件、ADB 调试、刷机等在 USB 2.0 速率下全靠这对双绞线。充电协议握手许多传统的快充协议如 QC2.0/3.0部分 BC1.2 标准需要通过 D/D- 线的电压“对暗号”来决定输出 5V、9V 还是 12V。为什么叫差分信号D 和 D- 传输的是大小相等、方向相反的电压信号例如 D 为高电平 3.3V 时D- 对应低电平 0V。接收端通过计算二者的差值D 减去 D-来判断数据是“0”还是“1”。这种设计能极大地抵消外界的电磁干扰。如果 FPC 受到折弯、拉扯导致这两条线其中一条断裂或断续通信就会立刻失败。二、 在产线与维修中如何测试 D 和 D-根据你提到的“万用表/示波器量 Type-C 口 VBUS、D/D- 通断”在实际操作中通常有以下几种递进的测试方法方法 1用万用表测量“对地阻抗”最常用、最快这是产线和维修判断芯片引脚、FPC、座子是否虚焊/断路最经典、最高效的方法。测试准备设备断电拔掉电池和外部电源万用表打到二极管档Diode档也就是蜂鸣器档旁边那个。测试方法将万用表的红表笔接板子的主地GND。用黑表笔分别去点测Type-C 母座上或 FPC 测试点上的 D 和 D- 引脚。结果分析正常情况D 和 D- 的对地阻抗数值应该非常接近通常在 300mV ~ 700mV 之间具体取决于主控芯片和保护器件。数值为“1”或“OL”溢出说明断路Open。对应你的排查点FPC 焊接虚焊、金手指折弯断线、或 Type-C 座子压接开裂。数值接近 0或蜂鸣器响说明短路Short。可能是 D / D- 与旁边的 GND 短路或者芯片内部被静电ESD击穿。方法 2用万用表测量“通断/电阻”验证 FPC 物理链路当你怀疑“换 FPC 即好”是 FPC 自身的问题时可以直接测线缆。测试方法万用表打到电阻档Ω或蜂鸣器档。一根表笔接 Type-C 座子的 D 焊接脚另一根表笔接主板端接收芯片侧的 D 测试点。结果分析电阻应接近 0 欧姆如果阻值很大或不通说明 FPC 内部走线断裂特别是折弯处最容易发生。方法 3用示波器测量“波形/电平”用于深度分析如果万用表测阻值正常但软件仍然报 OTG 错误或无法连接就需要抓取动态信号。测试准备设备供电并开机插入 USB 或者是触发 FactoryTest OTG 测试。测试方法示波器探头分别接 D 和 D-地线接 GND。结果分析正常情况在设备插入的瞬间可以看到 D 或 D- 有明显的电压跳变比如从 0V 被拉高到 3.3V 保持或者看到密密麻麻的连续方波数据包信号。异常情况若一条线有波形另一条线完全是死线一条直线或者波形严重变形、幅值不够说明线路上有严重的寄生电容、阻抗不匹配、或者 FPC 处于“似断非断”的临界状态。三、 结合你业务背景的维修建议制作专属的“Type-C 测试小板Fixture”直接拿万用表表笔去扎 Type-C 母座内部细小的引脚很容易打滑甚至造成短路。产线维修通常会使用一个带有 Type-C 公头的引出小板测试治具把 VBUS、GND、D、D-、CC1、CC2 等引脚引出来做成大测试点方便员工用万用表快速点测。重点看 CC 线和 D/D- 的配合因为是 Type-C 口且涉及 OTGType-C 还有两根关键线叫CC1 / CC2配置通道。OTG 设备如主控端需要通过 CC 线上的电阻检测来决定自己是做 Host给别人供电还是 Device被供电。如果 CC 线断了VBUS 甚至可能都不会输出电压如果 CC 线正常但 D/D- 断了就会出现“能充电/能供电但无法识别设备/无数据传送”的现象。环节 状态VBUS✅ 有~5VPD sink充电 online ✅ online1, type5Type-C HAL ✅ ufp / device / connectedtrueextcon 切 Device ❌ 没切musb❌ 仍在 Hosthub_control代码里两条路都被堵了mediatek,bypss-typec-sink 1 → PC 插入不走 Type-C SINK → set_role(DEVICE)usb_is_online() 只认 type4/6不认 type5 → psy 备用路径也不切 Device一键快照adb shell “date; getprop ro.build.type; getprop ro.debuggable” usb_diag_base.txtadb shell getprop | grep -iE “usb|adb|persist” usb_diag_base.txtadb shell dumpsys usb usb_diag_base.txtadb shell ps -A | grep -iE “adbd|usb” usb_diag_base.txtadb shell ls -l /sys/class/android_usb/ 2/dev/null usb_diag_base.txtadb shell ls -l /config/usb_gadget/ 2/dev/null usb_diag_base.txtadb shell cat /config/usb_gadget/g1/UDC 2/dev/null usb_diag_base.txtadb shell ls -lR /config/usb_gadget/g1/ 2/dev/null usb_diag_base.txtadb shell ls -l /sys/bus/usb/devices/ usb_diag_base.txtadb logcat -b kernel -d -t 500 | grep -iE “usb|musb|typec|tcpc|extcon|vbus|sc8989|chg|gadget|udc” usb_diag_base.txtadb logcat -d -t 500 | grep -iE “UsbService|adbd|UsbDeviceManager|UsbPort|configfs” usb_diag_base.txt$ adb shell dmesg | grep -iE “typec|extcon|vbus|musb|gadget|udc|connect|sc8989|role” | tail -80[ 1154.802146] charger_thread: [__mtk_pdc_get_setting]watt:28800000,45000,5000000 up:0,1 vbus:9410000 ibus:5, mivr:0,0[ 1154.802181] charger_thread: [__mtk_pdc_get_setting]vbus:9000:5000:5000 current:3000 idx:0 default_idx:1[ 1154.803198] charger_thread: [mtk_chg_enable_vbus_ovp] en:1 ovp:12500000[ 1154.820687] kworker/u16:0: pd_adapter pd_adapter: pd_tcp_notifier_call: sink vbus mv:5000, ma:3000, type:130[ 1154.821037] kworker/u16:0: rt-pd-manager rt-pd-manager: pd_tcp_notifier_call sink vbus 5000mV 3000mA type(0x82)[ 1154.977205] charger_thread: [__mtk_pdc_setup]idx:1:0:1:0 vbus:5000 cur:3000 ret:0[ 1158.679760] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt9[ 1158.679803] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt9[ 1158.679833] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1158.769088] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1159.749090] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt5[ 1159.749144] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt5[ 1159.749182] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1159.855923] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1160.568494] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1160.681172] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1161.372276] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt11[ 1161.372308] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt11[ 1161.372330] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1161.440061] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1163.159046] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt5[ 1163.159078] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt5[ 1163.159100] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1163.159602] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1164.223158] charger_thread: [__mtk_pdc_setup]idx:0:0:1:0 vbus:5000 cur:3000 ret:-100[ 1164.231542] kworker/4:2: mtk_charger_external_power_changed event, name:mtk-master-charger online:1 type:2 vbus:5350[ 1164.237025] kworker/4:1: mtk-extcon-usb extcon_usb: online1, type5[ 1164.239561] charger_thread: Vbat4326 vbats0 vbus:5360 ibus:1 I1 T-10 uisoc:86 type:stdstd idx:0 ta_stat:0 swchg_ibat:0 cv:4352000 cmd_pp:-1[ 1167.420321] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt3[ 1167.420350] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt3[ 1167.420371] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1167.535780] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1168.244787] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1168.379155] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1169.080095] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt11[ 1169.080126] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt11[ 1169.080149] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1169.195230] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1169.876056] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1169.996782] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1170.892514] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt11[ 1170.892566] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt11[ 1170.892605] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1170.893637] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1174.488325] kworker/1:2: mtk_charger_external_power_changed event, name:mtk-master-charger online:1 type:2 vbus:5300[ 1174.496318] kworker/1:3: mtk-extcon-usb extcon_usb: online1, type5[ 1174.498867] charger_thread: Vbat4228 vbats0 vbus:5130 ibus:0 I0 T33 uisoc:86 type:stdstd idx:0 ta_stat:0 swchg_ibat:0 cv:4352000 cmd_pp:-1[ 1174.506358] charger_thread: [__mtk_pdc_get_setting]watt:14500000,5000000,5000000 up:0,1 vbus:5150000 ibus:1000, mivr:0,0[ 1174.506370] charger_thread: [__mtk_pdc_get_setting]vbus:9000:5000:5000 current:3000 idx:0 default_idx:0[ 1174.506391] charger_thread: [__mtk_pdc_setup]idx:0:0:1:0 vbus:5000 cur:3000 ret:-100[ 1174.525815] charger_thread: Vbat4228 vbats0 vbus:4940 ibus:0 I-3 T33 uisoc:86 type:stdstd idx:0 ta_stat:0 swchg_ibat:0 cv:4352000 cmd_pp:-1[ 1174.527444] charger_thread: [__mtk_pdc_get_setting]watt:14500000,5000000,5000000 up:0,1 vbus:4930000 ibus:1000, mivr:0,0[ 1174.527459] charger_thread: [__mtk_pdc_get_setting]vbus:9000:5000:5000 current:3000 idx:0 default_idx:0[ 1174.527486] charger_thread: [__mtk_pdc_setup]idx:0:0:1:0 vbus:5000 cur:3000 ret:-100[ 1174.897026] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt3[ 1174.897074] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt3[ 1174.897110] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1174.997627] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1176.191905] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt5[ 1176.191936] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt5[ 1176.191959] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1176.260555] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1178.671844] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt5[ 1178.671916] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt5[ 1178.671973] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1178.697729] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1180.715136] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt3[ 1180.715183] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt3[ 1180.715218] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1181.013860] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1181.708323] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1181.725653] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt7[ 1181.725741] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt7[ 1181.803515] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1182.476140] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1182.476968] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl0x80[ 1183.827660] charger_thread: Vbat4324 vbats0 vbus:5060 ibus:0 I0 T33 uisoc:87 type:stdstd idx:0 ta_stat:0 swchg_ibat:0 cv:4352000 cmd_pp:-1[ 1183.830240] charger_thread: [__mtk_pdc_get_setting]watt:14500000,5000000,5000000 up:0,1 vbus:5060000 ibus:1000, mivr:0,0[ 1183.830275] charger_thread: [__mtk_pdc_get_setting]vbus:9000:5000:5000 current:3000 idx:0 default_idx:0[ 1183.830331] charger_thread: [__mtk_pdc_setup]idx:0:0:1:0 vbus:5000 cur:3000 ret:-100