聆风 ZE0 的 CAN 信号:LBC 六组读数与 64 A 折返电流

作者:

在

结论:2012 款 Nissan Leaf(ZE0)的只读遥测建立在两件事上:ELM327 走 Car-CAN 的 ISO 15765-4(11 位、500 kbit/s),以及一小撮 UDS 服务 0x21 组读取。这台车的标准 OBD-II PID 完全不实现,模式 01 的请求 0100 只会返回 NO DATA;真正的数据来自电池控制器的六组 UDS 应答。所有信号按「已验证、静态、待定」三档标注,其中最大的坑是第五组的包电流:它是有符号 16 位除以 1024,超出正负 32 A 就会以 64 A 为单位折返。

传输层:先把 ELM327 的几条硬约束定死

这套档案把所有适配器的公共事实放在最前面,因为它们决定了后面所有字节能不能拿到。协议用 ATSP6(ISO 15765-4,11 位,500 kbit/s,引脚 6/14 的 Car-CAN);UDS 对电池控制器需要一组固定的头与流控设置,而针对 Car-CAN 的被动嗅探必须用 ATCAF0——如果保留 ATCAF1,大部分原始帧会直接打印成数据错误。

事实 细节
协议 ATSP6,ISO 15765-4 CAN,11 位,500 kbit/s,Car-CAN(OBD 引脚 6/14)
标准 OBD-II PID 这台车不实现,0100 返回 NO DATA
电池控制器 UDS 请求头 ATSH 79B、应答过滤 ATCRA 7BB、格式 ATCAF1、流控头 ATFCSH 79B、块大小与帧间隔设置,另加 ATFCSM1;由整车控制器在 Car-CAN 与 EV-CAN 之间桥接
被动嗅探 必须用 ATCAF0,否则绝大多数原始帧打印为数据错误
缓冲区 未过滤的 ATMA 约 24 帧就溢出,必须配 ATCRA 过滤
EV-CAN(引脚 12/13) 标准 6/14 接口下不可达,需要改线的 OBD 延长线
蓝牙连接 每次写入都要带应答标志,否则收不到通知

同一份档案还维护了一条替代路径:把一台原生 USB-CAN 控制器直接接到诊断口上,由 USB ID 决定走哪条驱动。

电池控制器:六组 UDS 读数的分工

电池控制器的六组数据按职责分开轮询,而不是一次全读。分组第一、二、四、五组标记为已验证,第三与第六组仍属待定。偏移量是相对 61 NN 之后载荷的 0 基位置。

组 长度 内容 状态
01 电池状态 39 字节 高压电流两个传感器、包电压、12 V、绝缘电阻、HX、SOC、容量 已验证
02 单体电压 192 字节单体数据,解析填充到 200 字节 96 路无符号 16 位毫伏,末位之后用 0xFFFF 填充 已验证
03 32 字节 字节 10–11 为最高单体毫伏,12–13 为最低单体毫伏,其余未知 待定
04 温度 18 字节 四组「无符号 16 位原始值 + 有符号 8 位摄氏度」,字节 12 看起来是均值 已验证
05 扩展状态 74 字节 最高/最低单体、温度原始值、放电标志、包电流、绝缘、分段差值与组电压 已验证
06 均衡 25 字节 24 个数据字节即 192 位,每单体对 2 位,非零疑似表示正在泄放 待定

第一组的字节偏移

字节 字段 量纲
0–3 高压电流传感器 1 有符号 32 位除以 1024 安
6–9 高压电流传感器 2 有符号 32 位除以 1024 安;在一次 13 分钟行驶中测到负 66 安,库仑积分占 SOC 乘容量推算值的 96%
18–19 包电压 无符号 16 位除以 100 伏,与 96 路单体之和相差在 0.1 伏内
20–21 12 V 蓄电池 无符号 16 位除以 1024 伏
22–23 绝缘电阻 千欧
26–27 HX 无符号 16 位除以 100
29–31 SOC 无符号 24 位除以 10000,单位百分比
33–35 容量 无符号 24 位除以 10000 安时,SOH 再除以 66 安时
4–5、24–25 未知,静态 样本值分别为 0x0287 与 0x00F2

电流传感器的行为也定了处理规则:三个电流来源在怠速时绕着零点漂正负 0.5 安,第五组的放电标志跟着噪声走;传感器 1 很粗,以约 2 安为台阶。500 瓦负载下,传感器 2 与第五组相差在 0.05 安以内。于是读取器以传感器 2 为基准逐周期取值,每 5 秒学一次相对第五组的偏移,再叠加上本车的零位标定,并在控制器报告放电时把正电流钳零;仪表侧把绝对值小于 0.6 安(功率小于 0.25 千瓦)视为怠速。

第五组的电流会折返,不是饱和

这是这套档案里最有决策价值的一条。第五组的包电流是有符号 16 位除以 1024,理论上在正负 32.0 安处就该饱和,但这台车的实际电流远大于此。2026-09-03 的一次 13 分钟行驶给出了答案:171 条记录、92 个新鲜第五组样本,第一组传感器 2 达到负 66.5 安。

假设 超过正负 32 安样本的中位误差(21 个)
线性延伸(第五组等于传感器 2) 8.49 安
在正负 32 安处饱和 8.49 安
另一套斜率(半量程) 11.88 安
折返(16 位混叠) 2.50 安

饱和假设被直接证伪:邻域超过 40 安的样本没有一个停在轨值上,全部 169 个样本里只有 4 个落在 30 至 32 安区间,绝对电流分布直到边界都是平滑的;最大值只到 31.919 安,而且跨越边界时符号会翻转——传感器 2 为负 34.11 安时第五组读到正 31.71 安,负 47.50 安时读到正 15.57 安,负 41.13 安时读到正 23.58 安。轨内标度则是对的:在三行窗口内传感器 2 移动小于 3 安的 25 个样本中,两者中位相差 0.27 安、最差 1.43 安,拟合关系为 g05 约等于 0.956 倍传感器 2 减 0.199,R² 0.995。

工程后果很具体:读取策略把传感器 2 当作权威值是对的,但如果它每次都在新鲜第五组样本上学习偏移并在样本间传递,那么超过 32 安时学到的差值本身就是折返误差。那次行驶中,融合后的电流相对传感器 2 中位偏离 5.9 安、九十分位 23.6 安、最差 41.1 安,随后「正在放电却读到正电流就钳零」的规则又把大量行驶行直接归零。修正办法是只在第五组读数明确处于轨内、且两次读数接近时才学习偏移。另有一条仍未解决:传感器 1 在负载下读到的是传感器 2 的中位 1.358 倍(十分位 1.294、九十分位 1.429,48 个超过 15 安的样本),而做库仑积分能与 SOC 对上的是传感器 2。

还有一处信任边界:存入数据库的是控制器报告的原值,不再是策略改写后的值。进程量全部落在 current_adj_a 与 power_adj_kw 上,并用 current_adj_src 注明经过的步骤;任何车型档案的策略都不得改写已报告字段。

Car-CAN 被动帧与其他 ECU 探测

车身侧的被动帧必须靠 ATCAF0 加 ATCRA 逐号抓。下面这批已验证的条目构成了挡位、灯光、车门、门锁与胎压的数据源。

ID 字节 字段 解码 状态
0x421 b0 挡位 08 停车、10 倒车、18 空挡、20 前进、38 经济 已验证,五种全部
0x174 b3 粗挡位 AA 停车或空挡、99 倒车、BB 前进或经济 已验证,无法再细分
0x358 b2 转向灯 80 关、82 左、84 右、86 危险灯 左右已验证,危险灯为社区值
0x385 b2–5 胎压 psi 等于原始值除以 4,顺序为左前、右前、右后、左后 静态,数值合理;小于 5 psi 视为传感器休眠
0x5C5 b1–3 里程 无符号 24 位,单位随 0x355 b6 bit5 静态,与仪表一致
0x5B3 b1 仪表 SOH 原始值右移 1 位,百分比 静态,与电池控制器一致
0x60D b0 车门 08 驾驶位、10 副驾、20 左后、40 右后、80 尾门 已验证
0x60D b2 门锁 18 已锁、00 未锁 已验证
0x60D b0 / b1 灯光 04 示宽、02 近光、08 远光、01 雾灯 已验证
0x284 b4–5 车速 原始值除以 100 km/h 待定,只见过 0
0x5A9 b1–2 剩余续航 无符号 16 位右移 4 位后除以 5 km 待定,标度未确认
0x180 b5 加速踏板 原始值除以 2,百分比 待定
0x292 b6 制动踏板 / 制动灯 原始值大于 0 即制动 待定

其他 ECU 的探测结果基本是负的,构成了边界:整车控制器对所有模式 22 与 0x21 请求都返回否定码 0x80,需要原厂会话与安全访问;逆变器与转向模块完全无应答;ABS、车身模块与助力转向会回应第一组读取,尚未解码。EV-CAN 上的 0x1DB、0x1DA、0x55B 等报文虽然有公开社区可视化的布局记载,但在这台车上从未被看到过,档案只把它们作为待核对的假设放在帧仿真器里,而这些编码器刻意不与真实车辆的解码器放在同一处。

OBD-II 引脚 信号
6 / 14 Car-CAN 高低,普通 ELM327 用的就是这一对
13 / 12 EV-CAN 高低,电池、逆变器与充电机所在网络
11 / 3 AV-CAN 高低,信息娱乐网络,本项目不读
4 / 5 底盘地 / 信号地
8 仅在车辆上电时输出 12 V
16 常电 12 V

原生 USB-CAN 通道带来的量级变化

把 ELM327 换成 CANable 2.0 一类的原生 USB-CAN 控制器后,被动项不再需要 ATCRA 加 ATMA 的停留开销,整个循环坍塌为纯 UDS 请求时间。2026-10-03 在这台车上的实测结果是:蓝牙约 2 秒的完整循环压缩到 0.58 秒,第一组读取 0.07 秒、96 路单体读取 0.29 秒;开单体日志后,全新 96 路读取的中位间隔为 351 毫秒(2.77 次每秒,最大 498 毫秒)。

项目 实测结果
识别方式 USB ID 16d0:117e 为 slcan 固件,1d50:606f 或 1209:2323 为 candleLight,0483:df11 为烧录模式
被动窗口 10 秒内 1,692 帧每秒、49 个报文 ID、0 错误帧
完整循环 0.58 秒,含电池各组、96 路单体、暖通模块三组读取和全部被动 ID
ISO-TP 间隔 暖通模块 在间隔 0 毫秒时丢连续帧(6 次里只有 3 次完整),5 与 10 毫秒时 6 次全通
终结电阻 适配器跳线必须断开;车辆诊断口在 6/14 与 13/12 间测得约 60 欧
接线基准 优先用引脚 5 信号地,而不是承载车身负载电流的引脚 4 底盘地

EV-CAN 那条通道则以只听模式为唯一打开方式:只听模式下的控制器连应答位都不驱动,总线在电气上与没有这个监听节点时完全相同;「曼哈顿 EV-CAN」配置项会强制只听,且不提供覆盖开关。需要注意的细节是,不同固件对只听的实现强度不同:candleLight 需要重新打开设备并回读模式,slcan 的静默命令无法从主机侧确认,而 SocketCAN 由内核强制且可被校验。

常见问题

为什么标准 OBD-II 的 PID 在这台 Leaf 上完全读不到?

因为这台车压根没有实现这套标准诊断服务:模式 01 的 0100 请求直接返回 NO DATA。所以所有可用的数据都要从自定义的 UDS 服务走,主要是电池控制器的 0x21 组读与暖通模块 的 0x21 组读。这也意味着通用诊断 App 在这台车上基本拿不到东西。

第五组的包电流为什么超过 32 安就不可信?

因为它是有符号 16 位除以 1024 的字段,没有更宽的备选字段也没有钳位,真实值超出正负 32 安后就会以 64 安为单位连符号一起折返。13 分钟行驶里,邻域超过 40 安的样本没有一个停在轨值上,且跨越边界时符号必定翻转;四种假设中折返假设的中位误差最小,为 2.50 安。处理方式是把第一组传感器 2 作为权威值,并限制只在轨内学偏移。

换成原生 USB-CAN 控制器后,提升具体体现在哪里?

最直观的是被动项的开销消失:原先每个被动项需要一次「设过滤加监听」的停留,约 0.2 至 0.8 秒;原生控制器一直在收全部帧,被动项退化成一次字典查找。结果是完整循环从蓝牙的约 2 秒降到 0.58 秒,单体日志开启时 96 路新读数中位间隔 351 毫秒。另一个区别是它能挂到 EV-CAN 引脚上,而这在 ELM327 方案里做不到。

想在 EV-CAN 上取数据需要什么条件?

需要一根改线的 OBD 延长线,把母座的 6 与 14 分别接到插头的 13 与 12,或者直接通过引出全部 16 针的直通分流接头取 13/12 两针。两条总线同样是 500 kbit/s、11 位 ID,适配器终结跳线必须断开。软件侧把总线标识明确配置为 EV-CAN,强制以只听模式打开。

数据库里存的是不是控制器原值?

是。策略层不再改写电流与功率字段,保留的就是解码器产出的控制器原值;融合偏移、零位标定与放电钳零这些派生步骤全部落在带后缀的调整字段上,并用专门的字段注明经过哪些步骤。另有测试约束所有车型档案不得改写已报告字段。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/davidkarnowski-leaf-ze0/docs/SIGNALS.md(传输层事实、LBC 六组字节偏移、Car-CAN 被动帧、EV-CAN 引脚表与三档置信度分级)
  • 项目 01 —— public-can-dbc-datasets/additional/davidkarnowski-leaf-ze0/docs/CAN_TRANSPORT.md(原生 USB-CAN 的实现方式、接线与终结要求、只听模式作用域,以及验证与未验证清单)
  • 项目 01 —— public-can-dbc-datasets/additional/davidkarnowski-leaf-ze0/README.md(只读边界、安全说明与两个车辆档案的规模)

免责声明

本文所有 CAN ID、字节偏移、缩放系数与置信度标注均来自一台 2012 款 Nissan Leaf 的公开只读遥测档案,属社区逆向工程产物,不代表车辆制造商的官方数据,也未经独立实车复现。不同年款与市场区域的字节偏移可能发生变化,标注为待定的内容不得用于计量、交易或安全判定。文中提及的诊断请求仅用于读取,涉及动手接线时请先确认车辆断电状态与终结电阻,本文不构成任何维修、购买或行驶决策的唯一依据。

更新记录

  • 2026-10-15 初稿

评论

发表回复

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