思域 FL5 的 25 个 DID 与 109 个信号:只读 UDS 请求流程

作者:

在

结论:这份参考给出 25 个 UDS 服务 22 的 DID 与 109 个解码信号,来自同一辆 Civic Type R FL5(K20C1 2.0T,6 速手动)在 2026-09-08 至 2026-09-16 的八轮只读采集。第一件事不是数信号,而是承认它的形态:这辆车 OBD 口后面有网关,被动监听 24.8 分钟、59 万帧里 16 个 CAN ID 全是 18DAxxxx 诊断帧,广播帧数为 0。所以主键是「模块地址 + DID + 字节 / 位偏移」,不是 CAN ID。

形态决定主键:为什么它不是一份 DBC

钥匙 ON、怠速、行驶全程广播帧数都是 0,文档里每一个数字都是「主动问、ECU 答」得到的正应答字节。同一条物理通道上靠 29 位 ID 里的目标地址区分四个已解码 ECU(ECM、VSA、EPS、组合仪表)。

因此 DBC 不适合作为主格式:DBC 描述周期广播帧的布局,而这里没有广播帧可描述。要机器读,应该用 data/signals.json 或 data/signals.csv,或者 OBDb signalsets/v3 兼容的 obdb-signalset.json——后者只收录「已确认(研究级)」与「中」两档,低置信与候选留在文档里不进 signalset。

层 事实
物理 OBD-II 口:6 脚 CAN-H、14 脚 CAN-L、4 脚 GND、16 脚 12 V 常电。6 / 14 按插进车的公头方向数,数反会得到 0 帧
链路 经典 CAN 2.0B,500 kbit/s,单帧不超过 8 字节,无 CAN FD(12 份日志约 190 万帧,FD 帧计数 0)。只证明网关外的 OBD 侧
寻址 29 位 ISO 15765 物理寻址:请求 18DA 加目标地址加 F1,应答 18DAF1 加目标地址;诊断仪地址固定 F1。点名全车用功能广播 18DB33F1。11 位 7E0 / 7E8 上 Mode 01 无任何应答
传输 ISO 15765-2:请求单帧 03 22 DID高 DID低,用 0x55 填满 8 字节;应答 54 到 63 字节数据区 = 首帧 FF 加 8 到 9 个连续帧 CF。流控 30 00 00(填充 0xAA)必须在几毫秒内回,晚了 ECU 直接放弃
应用 UDS 服务 22 ReadDataByIdentifier。本车默认会话免握手(不需要 10 03,更不需要 27);3E 保活实测不需要(600 s 连续采样零错误)。此条只在本车验证过
偏移口径 offset 指去掉应答头 62 加 DID 两字节之后的数据偏移;[a:b] 不含 b;value = raw 乘 scale 加 add。默认大端,明确标注小端的除外

时序与预算:单 ECU 串行上限约 33 Hz

下表是主机侧观测值,不是 ECU 的硬限制。采集用的适配器无硬件时间戳,所以「VSA 80 ms」应读作首帧到末帧的整段,而不是帧间隔,也不能据此断定是 STmin 硬限制。

模块 / DID 请求到完整 p50 p95 相邻 CF 间隔
ECM 10:2610 24.9 / 27.4 ms 30.7 / 30.6 ms 约 2 ms
ECM 10:2611 29.3 ms 33.5 ms 约 2 ms
ECM 10:268F 27.3 ms 29.8 ms 约 2 ms
VSA 28:4001/4004/4007/4073 约 100.1 ms 约 100.6 ms 约 10 ms
EPS 30:48BD/48C0/48C4 约 67.9 ms 约 69 ms 约 8 ms

串行模型是成立的:2051 轮逐轮恒等式「周期 = 各请求到完整之和 + 各间隙之和」残差为 0,轮间开销 1.48 ms/轮,由此得到单 ECU 串行上限约 1 秒除以 30.5 ms,即约 33 Hz(仅 ECM)。跨模块并发在协议上允许(不同地址各挂一个未完成请求),本车从未验证;按模块求和再取最大的理想周期只比串行快约 28%,不是 100 ms。作为对照,原厂调校工具自己轮询 22 2610 与 22 2611 各 18.13 Hz。

NRC 含义 本车观察
0x31 requestOutOfRange(该 DID 不存在) 扫描时的主力否定应答,全归档最常见
0x11 serviceNotSupported 服务 21(五个模块各 256 个 LID)与服务 24 全部返回它,本车不支持,不必再试
0x22 conditionsNotCorrect 有处理逻辑;扫描中零星出现
0x78 requestCorrectlyReceived-ResponsePending 有处理(最多 5 乘 timeout);全归档统计里不计入否定应答
0x80 厂商自定义 / 未列入标准表 第二轮扫 ECM 时出现过一次

两条吃了亏才写下的采集纪律

其一,一笔请求超时会触发对该地址的隔离,所以采样组的第一笔要放最稳的 DID。其二,行驶中不要把扫描和核心采样混在一条串行链上——边行驶边扫描的一份日志里核心采样最长断流 7.891 s,而纯核心采样的另一份最长只有 1.244 s。

模块清单与扫描覆盖

零件号由 22 F181 或 22 F110 读出,是同款车共有的零件号,不是单车序列号;数据集不含 VIN、ECU 序列号或任何单车唯一标识。功能广播点名时,公开信号集里有而本车无应答的地址有 0x2A、0x0E、0x11、0x1D、0x01、0x15、0x16。

地址 身份 零件号 扫描覆盖 有正应答 DID 收录 状态
0x10 ECM/PCM 发动机控制 37805-66V-H020 0000–FFFF 全段 77 个(26xx 52 + 30xx 5 + DC59–FFFF 段 20) 10 个 扫描中 6F2B / 6F8A / DC58 三个单点无应答触发隔离,未复读
0x28 VSA 车身稳定(ABS/ESC) 57114-T60-AA20 0000–A082 31 个(4000–400A、4030–403B、4070–4073、0EEC、4100、48AF、48F5) 5 个 A083–FFFF 未扫
0x30 EPS 电动转向助力 39990-T60-J030 0000–7EEB 20 个(全在 48xx) 5 个 重扫 0000–2A30 无新增;2A31–FFFF 待续
0x3A ADS 自适应减振 39390-31M-A040 0000–FFFF 全段 16 个(48AF、48F5、52xx、5280/5281、E600、E602、F1xx) 0 个 10 个数据类里 9 个逐字节恒定,唯一在动的 520A 未解码
0x53 SRS 气囊 77959-T60-H830 未扫 — 0 个 故意不碰
0x60 组合仪表 78108-T60-H020 7000–70FF 18 个(有数据的 6 个) 5 个 其余段未扫
0x70 未知(33137 系,疑似大灯控制) 33137T24Y112M1 未扫 — 0 个 功能广播点名有应答
0xB0 多用途摄像头(Honda Sensing) 36161-T60-H050 0000–00C5 0 0 个 对服务 22 基本不配合,两次都在 00xx 某个 DID 超时被隔离;已放弃
0xB3 Honda Sensing 子单元 36162-T51-H010 未扫 — 0 个 功能广播点名有应答
0xB7 驻车雷达控制单元 39670T60E010M1 未扫 — 0 个 功能广播点名有应答
0xED 车身控制 / 网关之一(38898 系) 38898-T60-H010 未扫 — 0 个 与 EF 成对
0xEF 网关 / 车身控制之一(38897 系) 38897-T60-H010 未扫 — 0 个 功能广播时它最先应答,疑似网关

信号总表摘录

四个模块、25 个 DID、109 个信号,置信度分布为已确认(研究级)52、中 39、低 / 候选 18。文档不升不降任何一条的置信度。下面摘录 ECM 两个主包与几个跨模块的对照项;「实测范围」是全部采集里出现过的最小 / 最大值与样本数,只说明观察到过什么,不定义量程也不定义报警阈值。

模块 : DID 信号 偏移 解码 单位 实测范围(样本数) 置信
10:2610 ENGINE_RPM 6(2 B 大端) raw 乘 0.25 rpm 0 到 5300(53,908) 已确认(研究级)
10:2610 MAP_ABS 9(2 B 大端) raw 乘 0.0078125 kPa 22.27 到 282.35(53,908) 已确认(研究级)
10:2610 ECT 11(1 B) raw 减 40 摄氏度 33 到 90(53,908) 已确认(研究级)
10:2610 VEHICLE_SPEED 18(1 B) raw km/h 0 到 137(53,908) 已确认(研究级)
10:2610 BATTERY_V 22(1 B) raw 乘 0.1 V 6 到 14.6(53,908) 已确认(研究级)
10:2610 OIL_PRESSURE 44(2 B 大端) raw kPa 0 到 626(53,908) 已确认(研究级)
10:2611 LAMBDA 8(2 B 大端) raw 乘 3.0517578e-05 lambda 0.765 到 2.000(42,797) 已确认(研究级)
10:2611 SHORT_TRIM 10(1 B) raw 乘 0.78125 减 100 % -10.16 到 17.97(42,797) 已确认(研究级)
10:2611 GEAR 19(1 B) raw gear 0 到 6(42,797) 已确认(研究级)
10:2611 PEDAL 20(2 B 大端) raw 乘 0.005 % 0 到 60.83(42,797) 已确认(研究级)
10:2611 BOOST_PRESSURE 24(2 B 大端) raw 乘 0.013157894736842105 kPa 绝压 94.51 到 215.08(42,797) 已确认(研究级)
10:2611 WASTEGATE 28(2 B 大端,有符号) raw 乘 0.001 mm(未证实) -0.176 到 8.412(42,797) 已确认(研究级)
10:268F OIL_TEMP_MODEL 15(1 B) raw 减 40 摄氏度 32 到 82(20,684) 已确认(研究级)
28:4005 BRAKE_PRESSURE 7(2 B 大端) raw 减 25 bar 0 到 106(4,840) 已确认(研究级)
28:4007 REVERSE_GEAR 11(bit 1,掩码 0x2) raw 与 0x2 bool 0 到 2(3,515) 已确认(研究级)
28:4007 CLUTCH_PEDAL 24(1 B) raw % 0 到 100(3,515) 已确认(研究级)
30:48BD STEER_ANGLE 11(2 B 大端,有符号) raw 乘 0.1 deg -405.6 到 408.1(5,164) 中
30:48C4 WHEEL_SPEED_FL 23(2 B 大端) raw 乘 0.01 km/h 0 到 115.23(3,193) 已确认(研究级)
60:7022 ODOMETER_CLUSTER 6(3 B 大端) raw km 不公开(1,394) 已确认(研究级)
60:7028 AMBIENT_TEMP 17(1 B) raw 摄氏度 26 到 34(2,059) 已确认(研究级)
60:7029 FUEL_LEVEL 12(2 B 大端) raw 乘 0.01 L 16.46 到 43.88(1,393) 已确认(研究级)

三条容易读错的约定

同名信号出现在两个 DID 时(VEHICLE_SPEED_COPY、STEER_ANGLE_COPY),是两个不同位置的独立字段,解码与置信度各按所在 DID 读。标 kPa_abs 的是绝压;要增压表压请用同一应答包内的 MAP_ABS 减 BARO(同包相减,不要减 101.325 这类常数)。带掩码的位字段在「实测范围」列显示的是掩码后的原始值,例如掩码 0x8 的置位状态显示为 8,而不是 1。

证据边界:未映射的变化字节与不可辨识项

已映射的 25 个 DID 里还有 206 个未映射的变化字节、1,183 个位,其中在单次采集内部就会变的有 189 字节、1,124 位——由位级覆盖分析从全部采集算出。其中 4 个字节里「未映射位」与「已映射位」同处一室,按整字节做候选筛选的工具看不到它们。

类型 位置 现状 缺什么
未映射 10:2610 [8] 与 [27] 完全相同,燃压低字节镜像 未命名,仅登记
未映射 10:2610 [16] 日志内变化,只有低 4 位(掩码 0x0F),5 种取值,与水温 r 约 -0.77 位域身份未定
未映射 10:2610 [51] 0 到 240 阶梯,步长约 7.5 未扫,性质未知
未映射 10:2611 [53:55] / [55:57] ECM 内部短时负向修正量,值域 -53 到 0;位宽不可辨识(该值域内 s8 与 s16 小端恒等);两者是单向包含关系 需要一个绝对值大于 127 的样本才能分开
未映射 10:268F [12] / [13] / [14] 带 255 端点码;[12] 与转速的关系在差分与配对两道检验下都存活(r = 0.21 / 0.256),是 50 个候选里唯一存活的 不命名
未映射 3A:520A 整包 64 B ADS 唯一在动的数据包,未解码;多字节字段候选 3 个(10:12、36:38、38:40,均大端) 整包未扫
不可辨识 偏航率刻度 0.0045(运动学模型)对 0.003924(后轮差速几何法) 需外部偏航率参考(不低于 10 Hz、误差小于 3%)或实测轮距与滚动周长
不可辨识 2610[39] 的门限 单一压力门限与 Schmitt 迟滞均已推翻;转速 / 档位分层使留出集 log-loss 改善 17 到 18% 未过 20% 门槛,判不出,不是无效应
不可辨识 AIRC_MAX / AIRC_PROT / AIRC_COMP 三个字节 [49] / [57] / [58] 全程相等 三个名字在现有数据里无法区分
不可辨识 扫描期链路停摆的机制 现象强相关;单 ECU 忙已排除,网关限流 / ISO-TP 异常 / 工具实现 / 静默超时四种都证据不足 缺适配器状态遥测,分不开「工具阻塞」与「总线 / 网关静默」

常见问题

这份参考能直接转成 DBC 吗?

不能,也不该转。DBC 描述的是周期广播帧的布局,而这辆车的 OBD 侧广播帧数为 0,全部数据来自服务 22 的问答。主键是模块地址加 DID 加字节 / 位偏移,同一条物理通道上靠 29 位 ID 里的目标地址区分四个已解码 ECU。要机器读请用 signals.json、signals.csv 或 OBDb 兼容的 signalset。

为什么按 7E0 / 7E8 发 Mode 01 收不到任何东西?

因为这辆车走 29 位物理寻址:请求是 18DA 加目标地址加 F1,应答是 18DAF1 加目标地址,诊断仪地址固定 F1;11 位地址上 Mode 01 全程零应答。另一个常见失误是引脚数反了——6 脚 CAN-H、14 脚 CAN-L 要按插进车的公头方向数,数反了同样得到 0 帧。

轮询频率能开到多高?

串行模型下约 33 Hz(仅 ECM),由 1 秒除以单事务约 30.5 ms 得出,轮间开销 1.48 ms/轮,2051 轮恒等式残差为 0。跨模块并发在协议上允许但本车从未验证,理想化估算只比串行快约 28%。作为对照,原厂调校工具自己只跑 18.13 Hz。

为什么两条里程信号不给出实测范围?

因为精确里程读数能定位到具体某一辆车,作者主动不公开。样本数照常给出:ECM 的 ODOMETER 是 365 个样本,仪表的 ODOMETER_CLUSTER 是 1,394 个,两条相互核对一致且单位都是 km(公开信号集里写成英里是错的)。

「已确认(研究级)」是不是等于已经标定过?

不等于。它只表示这一辆车上证据强——与独立仪表逐点对上、或与调校工具的未取整导出逐列拟合到 r 约等于 1、或有干净的前后对照动作。它不代表已用独立仪器标定,也不代表在原厂车上成立。这辆车装有调校工具,ECU 已解锁,市场版本也未确认。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/caldis-honda-civic-fl5-dids/SOURCE.md(固定修订、许可条款、25 DID / 109 信号的范围与限制)
  • 项目 01 —— public-can-dbc-datasets/additional/caldis-honda-civic-fl5-dids/README.zh-CN.md(分层事实、逐事务耗时、NRC、模块扫描覆盖与信号总表)
  • 项目 01 —— public-can-dbc-datasets/additional/caldis-honda-civic-fl5-dids/README.md(英文版信号总表与已推翻说法)
  • 项目 01 —— public-can-dbc-datasets/additional/caldis-honda-civic-fl5-dids/CHANGELOG.md(数据版本 1.0.0 与 1.0.1 的变更记录)

免责声明

本文所述 DID 与信号均为社区只读诊断所得,不代表本田的官方数据,全部来自同一辆装有调校工具(ECU 已解锁)的 Civic Type R FL5,年款与市场版本均未确认。采集与本文档制作全程只使用服务 22 及配套只读服务,不含任何刷写、安全访问或内存读取内容;被明确排除且不得据本文尝试的服务包括 27、23、2E、31、11、14 与 34 到 37。把这里任何一条用在别的车上之前请自行复核。涉及安全相关用途时请仅作参考。

更新记录

  • 2026-10-15 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注