news 2026/7/9 11:36:14

FPC 不良导致 设备无法正常被识别。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 协议中规定的一组差分数据信号线

  1. 核心作用:它们负责在设备(如手机、嵌入式板卡)和主机(如电脑、U盘、OTG设备)之间传输数据和识别设备
  • 识别/握手:当设备插入时,系统通过 D+/D- 上的电平变化来识别是否有设备接入,以及设备是低速、全速还是高速设备。
  • 数据传输:USB 读写文件、ADB 调试、刷机等,在 USB 2.0 速率下全靠这对双绞线。
  • 充电协议握手:许多传统的快充协议(如 QC2.0/3.0,部分 BC1.2 标准)需要通过 D+/D- 线的电压“对暗号”来决定输出 5V、9V 还是 12V。
  1. 为什么叫差分信号?
  • D+ 和 D- 传输的是大小相等、方向相反的电压信号(例如 D+ 为高电平 3.3V 时,D- 对应低电平 0V)。
  • 接收端通过计算二者的差值(D+ 减去 D-)来判断数据是“0”还是“1”。这种设计能极大地抵消外界的电磁干扰。如果 FPC 受到折弯、拉扯导致这两条线其中一条断裂或断续,通信就会立刻失败。

二、 在产线与维修中,如何测试 D+ 和 D-?

根据你提到的“万用表/示波器量 Type-C 口 VBUS、D+/D- 通断”,在实际操作中,通常有以下几种递进的测试方法:

方法 1:用万用表测量“对地阻抗”(最常用、最快)

这是产线和维修判断芯片引脚、FPC、座子是否虚焊/断路最经典、最高效的方法。

  • 测试准备:设备断电(拔掉电池和外部电源),万用表打到二极管档(Diode档,也就是蜂鸣器档旁边那个)
  • 测试方法
  1. 将万用表的红表笔接板子的主地(GND)
  2. 黑表笔分别去点测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 处于“似断非断”的临界状态。

三、 结合你业务背景的维修建议

  1. 制作专属的“Type-C 测试小板(Fixture)”
    直接拿万用表表笔去扎 Type-C 母座内部细小的引脚很容易打滑甚至造成短路。产线维修通常会使用一个带有 Type-C 公头的引出小板(测试治具),把 VBUS、GND、D+、D-、CC1、CC2 等引脚引出来做成大测试点,方便员工用万用表快速点测。
  2. 重点看 CC 线和 D+/D- 的配合
    因为是 Type-C 口且涉及 OTG,Type-C 还有两根关键线叫CC1 / CC2(配置通道)。OTG 设备(如主控端)需要通过 CC 线上的电阻检测来决定自己是做 Host(给别人供电)还是 Device(被供电)。如果 CC 线断了,VBUS 甚至可能都不会输出电压;如果 CC 线正常但 D+/D- 断了,就会出现“能充电/能供电,但无法识别设备/无数据传送”的现象。
    环节 状态
    VBUS✅ 有(~5V,PD sink)
    充电 online ✅ online=1, type=5
    Type-C HAL ✅ ufp / device / connected=true
    extcon 切 Device ❌ 没切
    musb❌ 仍在 Host(hub_control)

代码里两条路都被堵了:

mediatek,bypss-typec-sink = <1> → PC 插入不走 Type-C SINK → set_role(DEVICE)
usb_is_online() 只认 type=4/6,不认 type=5 → psy 备用路径也不切 Device

一键快照
adb shell “date; getprop ro.build.type; getprop ro.debuggable” > usb_diag_base.txt
adb shell getprop | grep -iE “usb|adb|persist” >> usb_diag_base.txt
adb shell dumpsys usb >> usb_diag_base.txt
adb shell ps -A | grep -iE “adbd|usb” >> usb_diag_base.txt
adb shell ls -l /sys/class/android_usb/ 2>/dev/null >> usb_diag_base.txt
adb shell ls -l /config/usb_gadget/ 2>/dev/null >> usb_diag_base.txt
adb shell cat /config/usb_gadget/g1/UDC 2>/dev/null >> usb_diag_base.txt
adb shell ls -lR /config/usb_gadget/g1/ 2>/dev/null >> usb_diag_base.txt
adb shell ls -l /sys/bus/usb/devices/ >> usb_diag_base.txt
adb logcat -b kernel -d -t 500 | grep -iE “usb|musb|typec|tcpc|extcon|vbus|sc8989|chg|gadget|udc” >> usb_diag_base.txt
adb 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_cnt<9>
[ 1158.679803] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<9>
[ 1158.679833] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1158.769088] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1159.749090] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<5>
[ 1159.749144] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<5>
[ 1159.749182] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1159.855923] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1160.568494] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1160.681172] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1161.372276] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<11>
[ 1161.372308] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<11>
[ 1161.372330] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1161.440061] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1163.159046] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<5>
[ 1163.159078] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<5>
[ 1163.159100] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1163.159602] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 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: online=1, type=5
[ 1164.239561] charger_thread: Vbat=4326 vbats=0 vbus:5360 ibus:1 I=1 T=-10 uisoc:86 type:std>std 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_cnt<3>
[ 1167.420350] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<3>
[ 1167.420371] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1167.535780] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1168.244787] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1168.379155] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1169.080095] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<11>
[ 1169.080126] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<11>
[ 1169.080149] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1169.195230] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1169.876056] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1169.996782] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1170.892514] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<11>
[ 1170.892566] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<11>
[ 1170.892605] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1170.893637] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 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: online=1, type=5
[ 1174.498867] charger_thread: Vbat=4228 vbats=0 vbus:5130 ibus:0 I=0 T=33 uisoc:86 type:std>std 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: Vbat=4228 vbats=0 vbus:4940 ibus:0 I=-3 T=33 uisoc:86 type:std>std 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_cnt<3>
[ 1174.897074] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<3>
[ 1174.897110] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1174.997627] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1176.191905] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<5>
[ 1176.191936] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<5>
[ 1176.191959] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1176.260555] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1178.671844] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<5>
[ 1178.671916] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<5>
[ 1178.671973] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1178.697729] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1180.715136] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<3>
[ 1180.715183] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<3>
[ 1180.715218] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1181.013860] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1181.708323] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1181.725653] binder:502_2: [MUSB]usb_spm_dpidle_request 3061: USB_DPIDLE_FORBIDDEN, skip_cnt<7>
[ 1181.725741] binder:502_2: [MUSB]usb_spm_dpidle_request 3054: USB_DPIDLE_ALLOWED, skip_cnt<7>
[ 1181.803515] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1182.476140] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1182.476968] binder:502_2: [MUSB]musb_hub_control 374: port status 00000100,devctl=0x80
[ 1183.827660] charger_thread: Vbat=4324 vbats=0 vbus:5060 ibus:0 I=0 T=33 uisoc:87 type:std>std 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 11:36:05

查看数据库服务器告警日志命令

# 实时看数据库告警日志 su - oracle tail -200f $(sqlplus -s / as sysdba <<EOF set pages 0 feedback off SELECT value FROM v\$diag_info WHERE nameDiag Trace; EOF )/alert_$ORACLE_SID.log

作者头像 李华
网站建设 2026/7/9 11:34:04

开发体育比分App,国内体育数据服务商哪家比较靠谱?

很多团队在做体育比分 App 时&#xff0c;最开始会把需求说成一句话&#xff1a;接一个足球篮球比分数据接口。这个说法不算错&#xff0c;但不够完整。真正进入产品设计和开发后&#xff0c;会发现比分只是其中一层数据。赛程、赛果、赛事详情、技术统计、球队球员资料、积分榜…

作者头像 李华
网站建设 2026/7/9 11:33:58

抖音下载神器:一键批量获取创作者完整作品库的终极指南

抖音下载神器&#xff1a;一键批量获取创作者完整作品库的终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…

作者头像 李华
网站建设 2026/7/9 11:32:52

全域无感跨镜追踪,重构智慧安防新范式——黎阳之光跨相机无感人员定位系统重磅上线

在园区厂区、工矿基地、产业辖区等大型场景安防管控中&#xff0c;多机位监控画面割裂、人员轨迹断点频发、外来人员难追踪、溯源核查效率低下等痛点长期制约安全管理效能。传统定位方案依赖基站、电子标签、穿戴设备&#xff0c;改造成本高、运维繁琐&#xff0c;且极易受粉尘…

作者头像 李华
网站建设 2026/7/9 11:32:43

Windows Defender完全移除指南:3种深度技术方案对比与实践

Windows Defender完全移除指南&#xff1a;3种深度技术方案对比与实践 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华