# 车检器参考代码分析方法论 拿到一份新车型参考代码时的标准拆解流程。按此模板逐节分析,保证各型号文档结构一致、可横向对比。 ## 0. 平台识别(先做,决定后续所有数值解读) | 检查项 | 方法 | |--------|------| | MCU 型号 | 头文件/工程名(如 `iostm8s003f3.h`、`REG_MA801.H`) | | 工具链 | 工程文件类型:`.ewp`=IAR、`.uvproj`=Keil、`.uvprojx`=Keil5、`.mpy`=MounRiver 等 | | 架构 | 8051(`.A51` 启动)/ STM8 / Cortex-M / RISC-V | | 主频/时钟 | 晶振配置代码(`CLK_SWR`/`OSCCON` 等)、PLL 设置 | | 代码规模 | 核心文件行数、有无 UART/协议 | ## 1. 硬件资源 - 引脚分配:线圈捕获脚、继电器、LED、拨码、通信口 - 线圈调频:电容档(FLEVEL 引脚、档位数、电容值——**以实测反推为准,代码注释可能过时**) - 看门狗:类型(IWDG/WWDG/WDTCR)、超时时间、喂狗位置 ## 2. 频率测量(核心第一步) | 检查项 | 关注点 | |--------|--------| | 捕获外设 | TIM 输入捕获 / PCA / 门控计数 / 外部中断计时 | | 捕获边沿 | 上升/下降/双边沿,周期法还是频率法 | | 时钟分频 | PSC 值、捕获时钟 = 主频/分频 | | 周期有效性窗口 | Xn 上下限(对应频率范围)——**跨平台移植必须按捕获时钟比例缩放** | | 归一化 | LPCNT = BASE/Xn?BASE 是多少(32768/131072/524288…)→ 决定灵敏度表量纲 | ## 3. 滤波 - IIR 系数(如 `ALFA_CAP1=79` → α=79/256≈0.31) - 多档滤波(增强滤波开关切换系数) - 滤波生效位置(CAPVD 还是 Value) ## 4. 基线跟踪 - 滑动平均窗口(100/500…)、更新节拍 - 有车冻结逻辑、冻结超时/稳定期检查 - 上电稳定期(STABLE_SAMPLES、绕过滤波) ## 5. 检测判据 - 进入:`CAPVD < Origin − dlt`?(负向/正向) - 离开:滞回表选择(当前档 / 固定最高档) - 平坦性/确认机制(连续 N 次) - 斜率限幅/防抖 ## 6. 灵敏度表 - 表值 + 归一化基数 → 换算 Δf/f 和 ΔL/L(**口径必须标注**:`Δf/f = SensTable/BASE`,`ΔL/L ≈ −2×`) - 档位数、默认档、拨码映射 - ⚠ 跨型号照搬灵敏度表 = 基数不同量纲错位(如 PD132 32768 基数的 {300,60,32,21} 不能直接对到 65536 基数的产品) ## 7. 状态机与时序 - 进入/离开/脉冲标志转移(FLAG_IN→IN_PLUSE→FLAG_OUT→FLAG_PLUSE) - tick 时长(5ms/10ms/50ms)、脉冲宽度、延时参数 - 有限存在(HOLD)超时行为 ## 8. 异常处理 - 线圈断开检测(RF_FLAG/Xn 窗口失败)→ 继电器/指示灯行为 - 看门狗复位触发源(超时/灵敏度变化/断开) - 上电自检流程 ## 9. 参数速查表(输出格式) | 参数 | 值 | 说明 | |------|-----|------| | 归一化基数 | | | | 捕获时钟 | | | | 测量窗 | | | | IIR 系数 | | | | 基线窗口 | | | | 灵敏度表 | | | | tick/脉冲 | | | | 看门狗 | | | ## 10. 移植注意事项(跨型号/跨平台) 1. **Xn 窗口按捕获时钟缩放**(PD132L 320-1620 vs PD132T 406-2050 ≈ 1.27 倍) 2. **灵敏度表按归一化基数换算**,禁止照搬数值 3. **电容档以实测反推为准**(代码注释可能错) 4. 拨码编码位序各型号不同(组合位 vs 直接编码),移植时按硬件重排 5. 看门狗/复位方式随平台变化(WWDG 写序列 vs ISPCR)