宝马 E9X 集成模块:K-CAN、PT-CAN 与 D-CAN 的消息翻译

作者:

在

结论:这份档案来自一台 2008 年 E92 335i 上自制的 CAN 集成模块,它同时接入了 K-CAN、PT-CAN 与 D-CAN 三条总线。文档给出的速率是 K-CAN 100 kbit/s、模拟的 KCAN2 500 kbit/s;PT-CAN 与 D-CAN 的速率文档未标注。模块的核心工作是把老一代 BN2000 的消息翻译成新主机(NBT)能认的 BN2010 格式,并把一部分消息改走 K-CAN 以绕开网关延迟。边界有三条:代码与消息逻辑是「为这一辆 2008 E92 335i 定制的」;随附的两份 DBC 是该项目参考素材、不是经过验证的整网定义;文档还涉及对 DME 固件的定义修改,本文不复述其地址与字节,也不建议照做。

本文整理自该项目的 README 与一份 BN2000 至 NBT 的消息翻译清单。文档本身多次强调其车型特定性,本文原样保留这层限定。

车辆与适用范围

项目对象是一辆 2008 年 E92 335i。文档在开头就写明:「代码对我这台车相当特定,但很多 CAN 消息逻辑可能有用。」硬件为一块 Teensy 4.0 三路 CAN 板(两路 CAN 2.0B、一路 CAN FD)配额外的一块 CAN 控制器用于主机模拟。

项 内容
车型 宝马 E92 335i(E9X 一代)
年款 / 市场版本 2008(源文档未给出市场版本)
ECU / 改装状态 自制集成模块,接入 K-CAN / PT-CAN / D-CAN;集成 F 系列主机(NBT / iDrive)
采集跨度 源文档未给出;以功能清单与消息翻译清单形式记录
适用范围 仅这一辆车;随附 DBC 为参考素材,非整网定义

总线与寻址

模块同时处理三条总线。文档明确的两处速率是:把 CAN 适配器速度设为 100000 对应 K-CAN、设为 500000 对应模拟的 KCAN2。PT-CAN 承载发动机扭矩等数据,D-CAN 用于诊断访问。文档说明消息发送被优化为走最短路径:需要送到仪表(KOMBI)的消息即使原厂走 PT-CAN,也会改发到 K-CAN,以绕开网关延迟。

项 内容
K-CAN 100 kbit/s(文档明确)
KCAN2(模拟) 500 kbit/s(文档明确)
PT-CAN 存在(承载发动机扭矩等);速率源文档未给出
D-CAN 存在(诊断访问);速率源文档未给出
寻址 消息以 11 位标准 ID 列出;CAN FD 能力由硬件支持

已解码信号

下表取自「BN2000 到 NBT」的消息翻译清单:左列为发往主机(NBT)的帧,右列为它的来源或处理方式。这些条目是该模块主动构造或翻译的消息映射,而不是某台车出厂网络的完整定义。

帧 / 信号 ID 来源或处理 证据
车辆状态 0x3C 由 BN2000 0x130 翻译 项目翻译清单
终端状态 0x12F 由 BN2000 0x130 翻译 项目翻译清单
道路倾角 0x163 经 0x6F1 取自报警器(SINE) 项目翻译清单
俯仰角 X_VIEW 0x180 经 0x6F1 取自报警器(SINE) 项目翻译清单
偏航率(陀螺) 0x19F 由 BN2000 0x1A0 翻译;NBT 硬件 10 及以上需要 项目翻译清单
车速 0x1A1 由 BN2000 0x1A0 翻译 项目翻译清单
距离 0x1C4、0x1C5 由 BN2000 0x1A6 翻译 项目翻译清单
运动显示数据 0x253 运动显示相关 项目翻译清单
亮度 0x2A5 由 BN2000 0x314 翻译 项目翻译清单
PDC 状态 0x2C1 由 BN2000 0x3AF 翻译 项目翻译清单
静止状态 0x2ED 由 BN2000 0x1A0 翻译 项目翻译清单
转向角 / 有效转向角 0x301、0x302 由 BN2000 0xC8 翻译 项目翻译清单
驱动模式开关 0x3A7 由 mdrive_status 与 dsc_program_status 适配 项目翻译清单
MDrive 状态 0x42E 由 BN2000 0x399 翻译 项目翻译清单
iDrive 音量 / 网关 0x6F1 承载 iDrive 音量与 SVT_70 网关等;检测到 OBD 工具在 D-CAN 通信时该组功能被关闭 项目 README

读取方法与注意事项

最短路径发送与队列。文档说明消息发送被优化为走最短路径以尽快到达接收模块,并用 FIFO 队列保证读写不被延迟阻塞。

诊断访问下的自保。凡用到 0x6F1 的功能(如 iDrive 音量、SVT_70 网关),在检测到某个外部诊断工具于 D-CAN 上通信时会被停用。

硬件与启动。文档列出的硬件包括 Teensy 4.0、MCP2562 收发器与用于主机模拟的 MCP2515 板;并提示为让部分启动时序敏感功能工作需修改 Teensy 启动代码。USB 类型随用途变化(单口常规、双口状态、三口 CAN USB 接口)。

关于固件修改。文档提到对发动机 ECU 固件中与 CAN 消息表、CAN 过滤器相关的定义做过修改,并需要重算校验;还提到停用一部分原厂驾驶模式相关逻辑。这类操作属于对发动机 ECU 的固件改动,风险高且与本文主旨无关,本文不复述其地址、字节或步骤,也不建议照做。源文档未提供任何安全访问绕过方法。

证据等级与边界

来源说明把两份 DBC 的性质写得很清楚:EXX-BN2000.dbc(131 条消息、552 条信号行)与 FXX-BN2010.dbc(70 条消息、248 条信号行)是该项目的参考素材,不是针对每一款宝马 E / F 车型或年份验证过的整网定义;其中 EXX-BN2000.dbc 还在独立信号块里重复出现 TPCI、TA 等信号名,严格解析器可能拒绝;其他消息布局与 NBT 翻译未在本归档内对照实车核对。

第二层边界来自项目自述:代码与 CAN 消息逻辑是为这一辆 2008 E92 335i 定制的,很多功能依赖具体选装件。因此文中列出的翻译关系与行为,只能视为「这台车 + 这套模块」的实现记录。

据此,任何帧含义、来源映射或发送策略都不能外推到其他 E9X 或其他宝马车型;需要真值时应以本车抓包与独立复核为准。

常见问题

E9X 上有哪几条 CAN 总线?

文档涉及三条:K-CAN、PT-CAN 与 D-CAN。其中明确给出速率的是 K-CAN(100 kbit/s)与模拟的 KCAN2(500 kbit/s);PT-CAN 与 D-CAN 的存在可以确认,但速率源文档未标注。

为什么要把消息改发到 K-CAN 上?

为了走最短路径。文档说明:需要送达仪表(KOMBI)的消息,即使原厂会经 PT-CAN,也被改发到 K-CAN,以绕开网关(JBE)带来的延迟。

随附的 DBC 能当整网定义用吗?

不能。来源说明写明两份 DBC 是该项目的参考素材,不是针对每一款车型或年份验证过的整网定义;EXX-BN2000.dbc 还存在重复信号名,严格解析器可能拒绝。未在本归档内做实测核对。

0x6F1 相关的功能什么时候会失效?

文档记录:当检测到某个外部诊断工具在 D-CAN 上通信时,凡用到 0x6F1 的功能(如 iDrive 音量、SVT_70 网关)会被停用,以避免冲突。

本文会给出 DME 固件修改的步骤吗?

不会。文档确实提到对发动机 ECU 固件里 CAN 消息表与过滤器的定义做过修改并需重算校验,但这类操作风险高,本文只作事实提及,不复述地址、字节或步骤,也不建议照做;源文档未提供任何安全访问绕过方法。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/superwofy-bmw-e9x-can/README.md(本项目车型档案主来源,取用了总线、硬件与功能清单)。
  • 项目 01 —— public-can-dbc-datasets/additional/superwofy-bmw-e9x-can/Message translation for NBT.txt(取用了 BN2000 至 NBT 的消息翻译清单)。
  • 项目 01 —— public-can-dbc-datasets/additional/superwofy-bmw-e9x-can/SOURCE.md(取用了两份 DBC 的规模与「非整网定义」边界)。

说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。

更新记录

首次发布 2026-10-11 最近核对:2026-10-11

评论

发表回复

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