# 硬件接口工具特有坑与边界 ## 电平与供电(烧板高危区) - **3.3V 板接 5V 信号 = 烧**:板上逻辑电平先万用表实测(常见 3.3V,也有 5V/1.8V)——适配器/分析仪电平不匹配用 TXS0108 类双向电平转换,绝不硬插 - **VCC/GND 反接**:接线顺序先 GND 后信号线;上电前用万用表通断档复核 VCC-GND 不短路 - **带电插拔**:USB 设备(调试器/编程器/分析仪)接线瞬间的浪涌可能损伤接口——标准流程是断电接线、上电验证 - **夹子接触不良**:SOIC8 夹子夹歪/氧化导致识别失败或读出数据错位——用 `-v` 校验,多读两遍比对;接触不稳时换测试座 ## 接口识别与连接 - **丝印不可靠**:板上标 TX/RX 的是芯片视角还是板级视角不确定——串口无输出先对调 TX/RX,再用逻辑分析仪实测 - **波特率猜错**:乱码不代表坏——按 9600/115200 优先枚举(57600/38400/230400 兜底);逻辑分析仪抓 TX 波形直接数位宽最准 - **TTL 电平 ≠ RS-232 电平**:老设备上的 DB9 串口是 ±12V RS-232,USB-UART 适配器不能直连——需要 RS-232 电平转换(MAX232 类) - **JTAG 引脚复用**:量产板常把 JTAG 脚复用为 GPIO 或只引出 SWD——丝印只有 4 针时先按 SWD 试 ## JTAG/SWD 熔断与保护 - **IDCODE 全 0/超时**:量产板熔断 JTAG(或 RDP 读保护开启)——openocd 连不上是常态;试 SWD 接口、按目标系列的 unlock 序列(如 `stm32f1x unlock 0`,部分系列 unlock 会擦除 flash——先备份数据评估) - **调试器供电冲突**:ST-Link/J-Link 默认给目标供电(3.3V),目标已独立供电时两路电源打架——关掉调试器供电选项或用只接信号的接线方式 - **电平不匹配连不上**:1.8V 目标直接接 3.3V 调试器,除了烧口风险,电气参数也不合格——按目标电平选适配器(ST-Link 新版支持 1.65-3.6V 自适应,老版本不行) ## flash 读取质量 - **识别不出型号**:新芯片在老 flashrom 里没条目——先 `flashrom -p ch341a_spi` 看输出,识别失败但芯片丝印明确时用 `-c` 强制指定型号(风险自担,先验证 ID) - **读出全 0 或全 FF**:夹子没夹好/芯片被写保护/SPI 电压不对——读回内容与丝印型号容量核对,空数据先排查接触 - **读保护芯片**:部分 MCU 内置 flash 读保护(RDP/OTP)——flashrom 读不到,走 openocd 解锁流程或改走 UART/固件升级通道 - **大容量镜像校验**:64MB+ flash 读取耗时长,中途断线文件损坏——加 `-v` 校验,失败重读 ## 逻辑分析仪采样 - **采样率不足 → 波形假象**:低于信号速率 4 倍会漏跳变(经验值)——UART 115200 用 ≥1MHz;SPI 数十 MHz 用 100MHz+ 设备,先按信号速率选设备再抓 - **通道错位**:多通道同时抓时引脚标号与物理位置对应错——抓取前先用已知信号(如 TX 空闲高电平)校准通道 - **解码器参数错**:UART 解码器波特率/数据位配置错会解出乱码——对照波形先确认位宽再改参数 ## 版本差异 - **openocd**:0.12.x 为最近正式版(2021);发行版打包版本新旧不一——脚本路径以 `/usr/share/openocd/scripts/` 实际为准;新版对部分国产 MCU 支持更好(target/ 下新增 cfg),旧版可能没有对应 target 文件 - **flashrom**:1.4(2024)为主流,新芯片条目持续加入——老版本识别不了新 SPI flash,升级优先;ch341a_spi 支持自 1.0 起成熟 - **sigrok-cli/pulseview**:0.7.x 长期稳定;解码器(decoders)随版本扩充,旧版本缺新协议解码器 - **JTAGulator**:开源固件长期无正式新版,功能以烧录进板的固件版本为准;自行打样的板子注意引脚排列与官方一致 ## 使用注意 - 断电接线、先测后接、共地必须(SKILL.md 坑 3 优先过一遍) - 提取产物(镜像 + sha256 + 板型/芯片型号)入档([[re-triage]] 惯例),转 [[re-fw-extract]] / [[re-fw-rootfs]] 分析 - 仅操作自己持有或有授权的硬件