X01 · YBO-CAN 应用层协议——基础文件
- 适用范围:
CORE-S、CORE-M、CORE-HD、SENSE、KEY、AIR-GW、HUB、VIEW(Air 开关与 Tag 是 AIR-GW 的端点,永远不是 YBO-CAN 节点) - 引用的基础文件: X02-config-schema.md
- 状态: draft (t)
- 最后更新: 2026-08-28
1. 范围与分层
本基础文件定义 YBO-CAN 的应用层;YBO-CAN 是 PRODUCT-PLAN.md §1 中的内部控制/遥测/OTA 总线(Backbone:"将专有流量隔离在 N2K 总线之外")。本文件不改变任何 Level-1 数值;通道数、额定值、休眠指标与时序常数均引自 P01-core.md、P02-sense.md、P03-hub.md、P05-air-gateway.md、P06-key.md 与 P07-studio.md。在固件/协议权利签署之前,协议保持 v0(PRODUCT-PLAN.md §P1 需求 1、§6 第 1b 项);§8 将三种所有权选项映射到本协议上。
| 层 | 定义 | 来源 |
|---|
| 物理层 | ISO 11898-2:2024,采用 SIC 收发器(参数集 C);参考器件 NXP TJA1463:符合"ISO 11898-2:2024 参数集 A-C",时序在 tbit(TXD) ≥ 125 ns(最高 8 Mbit/s)和 tbit(TXD) ≥ 200 ns(最高 5 Mbit/s)下表征;VBAT 4.5–28 V;IBAT Standby/Sleep 典型 13 µA / 最大 26 µA(NXP TJA1463 datasheet Rev. 3.0) | P01-core.md §7、P03-hub.md §3、P06-key.md §7 |
| 比特率 | 仲裁段 500 kbit/s,数据段 2 Mbit/s (t),每一帧 YBO 帧均置位 BRS;两个相位的采样点均为 80 % (t);开启发送器延迟补偿 | P01-core.md §5 |
| 终端与拓扑 | 两个物理末端各 120 Ω,模块终端电阻 120 Ω 可切换 (t),分支节点不带终端(KEY "不终结任何东西");限值 (t):干线 ≤ 40 m,分支 ≤ 1 m,每段 ≤ 64 个物理节点——超出后的振铃由 SIC 收发器负责,在 S-02 台架上验证(P01-core.md §14 "CAN 拓扑") | P01-core.md §5、PRODUCT-PLAN.md §P6;限值在 M3 冻结 |
| 唤醒 | ISO 11898-2:2024 图 7 唤醒模式(WUP):显性 ≥ twake(busdom) 0.5–1.8 µs,隐性 ≥ twake(busrec) 0.5–1.8 µs,再显性,全部在 tto(wake)bus 0.8–9 ms 之内;RXD 启动 4–20 µs,INH 启动 4–50 µs(同一数据手册)。500 kbit/s 下一位为 2 µs,因此任何 YBO 帧都是有效的 WUP;§9 定义 WAKE 帧。P01-core.md §7 引用的"20/50 µs"是同一数据手册中 WAKE 引脚的 tWAKE | 数据手册;PRODUCT-PLAN.md §P1 需求 6 |
| 数据链路层 | CAN FD 帧,29 位扩展标识符,载荷最大 64 字节,≤ 16 字节用 17 位 CRC / > 16 字节用 21 位 CRC(CiA: CAN FD — the basic idea);YBO 节点忽略 Classical CAN 帧 | — |
2. 节点模型
| 项目 | 规则 |
|---|
| 节点类别 | CORE-S、CORE-M、CORE-HD、SENSE、KEY、AIR-GW、HUB、VIEW;类别码为 HB 的字节 0(§4.9) |
| 身份 | 出厂 UID 64 位,不可更改,印在标签上(用于配网、密钥包裹、审计)。节点 ID 8 位:0 = 未分配/出厂,1–200 由 Studio 在调试时分配,201–239 保留,240–254 服务工具,255 = 广播;Hub 为 ID 1 (t)。通道索引每节点 8 位,从 0 起,顺序由型号表固定;255 = 本节点全部通道(仅限场景/默认映射操作) |
| 能力块 | 产品、硬件版本/型号 ID、固件版本、通道数与额定值、PWM/半桥/脉冲支持、脉冲上限(max_conduction_ms 硬限值)、绑定表版本、规则容量(P07-studio.md §5);通过 CFG CAP 传输(§4.7);X02-config-schema.md 据此校验。出厂状态:ID 0,无总线密钥,默认状态映射全部为 off(型号表中标记为 critical 的通道除外),保护表为型号最大值;仅接受来自服务工具的 ASSIGN、CAP 请求与 OTA |
| 配网流程 | 1 出厂节点(ID 0)每 1 s (t) 发送带 ID 0 与 UID 的 HB;2 Hub 将其列给 Studio;3 Studio 分配 ID 并发送 CFG ASSIGN(广播,载荷含 UID,已签名);4 节点将 ID + 总线密钥存入 NVM 并重启 HB;5 随后下发首个 CFG 包。3 s 内出现两个 ID 相同而 UID 不同的 HB:两者均回退到 ID 0,发出 ALARM id_collision 并保持本地逻辑运行。独立安装的 AIR-GW(P05-air-gateway.md §9)不在任何 YBO-CAN 总线上 |
3. 标识符布局
bit 28 ...................................................... bit 0
| PRI (3) | FAM (4) | SRC node (8) | DST node (8) | SUB (6) |
28–26 25–22 21–14 13–6 5–0
PRI 0 = 最高仲裁优先级;FAM 族码;SRC 源节点 ID;DST 目标节点 ID 或 255 广播;SUB 族内子类型或多路复用页。ID 位 28–22 全为隐性在 CAN 中是非法的,因此禁止 FAM 15;10–14 保留(VIEW 流、服务)。同一族内 SRC 较小者胜出;因此 Hub(ID 1)永远不会使更高族的节点流量饥饿。
| FAM | 族 | PRI | 方向 | 典型 DLC | 子类型(SUB) |
|---|
| 0 | ALARM | 0 | 节点 → 全部 | 16 | 0 发出/清除,1 确认 |
| 1 | CMD | 1 | 任意 → 节点 | 16 | 0 通道命令,1 场景,2 锁定/解锁,3 默认映射测试 |
| 2 | ACK | 1 | 节点 → 发起者 | 8 | 0 接受/拒绝 |
| 3 | STATE | 2 | 节点 → 全部 | 12 | 0 变化/应答,1 请求(Hub/KEY → 节点),2 快照页 |
| 4 | HB | 3 | 全部 → 全部 | 8/12 | 0 心跳,1 TIME(Hub),2 POWER(模式指令),3 WAKE |
| 5 | TELEM | 4 | 节点 → 全部 | 64 | 0–7 页索引(每页 10 个通道),8 订阅控制 |
| 6 | AUDIT | 5 | 节点 → Hub | 32 | 0 记录,1 缺口请求(Hub → 节点) |
| 7 | DIAG | 5 | 节点 → 全部 | 64 | 0 总线,1 供电/热,2 复位/事件,3 版本,4 请求 |
| 8 | CFG | 6 | Hub ↔ 节点 | 64 | 0 BEGIN,1 DATA,2 END,3 STATUS,4 ROLLBACK,5 CAP,6 ASSIGN |
| 9 | OTA | 7 | Hub ↔ 节点 | 64 | 0 BEGIN,1 DATA,2 END,3 STATUS,4 ACTIVATE,5 ROLLBACK |
4. 消息族
通用编码:小端序,除非另有说明均为无符号;枚举为 u8;保留字节发送时为 0、接收时忽略;未知 SUB 值一律忽略,绝不 NACK。通道状态:off 0、on 1、pending 2、tripped 3、locked 4、bypassed 5、fault 6。发起者类型:keypad_key 1、wireless_key 2、hub_user 3、automation 4、scene 5、mfd_n2k 6、cloud_user 7、service_tool 8、local_input 9。
4.1 CMD——命令(16 字节;每源 ≤ 50 条/s (t);场景在节点内部展开,每节点一条 CMD)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0 | channel | u8 | 目标通道;255 = 全部(仅限场景/默认映射) |
| 1 | action | enum | 0 off、1 on、2 toggle、3 set_level、4 pulse_to、5 momentary_hold、6 momentary_release、7 lock、8 unlock、9 reset_trip、10 scene、11 bypass_ack |
| 2–3 | value | u16 | set_level 0–1000(0.1 %);pulse_to 目标状态 0/1(脉宽来自 CFG,绝不来自 CMD);half_bridge 0–1000 + 位 15 方向;scene id |
| 4–5 | seq | u16 | 每源序号,回绕;由 ACK/STATE/AUDIT 回显 |
| 6–7 | originator kind, flags | enum, bits | 类型如上;b0 上一序号的重试,b1 已完成重试前读取,b2 含过期时间,b3 经云端中继 |
| 8–11 | originator id, ttl, reserved | u16, u8, u8 | 按键索引(KEY id 在 SRC 中)、端点短 id(AIR-GW)、Hub 用户 id、自动化任务 id;ttl 以 100 ms 为单位(0 = 1 s (t)),云端命令携带过期时间与幂等键(P03-hub.md §10) |
| 12–15 | auth tag | u32 | 对 ID ‖ 字节 0–11 ‖ counter32 的 AES-CMAC-128,截断为 32 位 (t)(§7) |
4.2 ACK——100 ms 内接受/拒绝(8 字节)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0–1 | seq | u16 | CMD 序号 |
| 2 | result | enum | 0 accepted、1 rejected_permission、2 rejected_locked、3 rejected_rate(脉冲再次动作 < 12 s)、4 rejected_range、5 rejected_auth、6 rejected_replay、7 rejected_state(tripped/fault/bypassed)、8 busy、9 unknown_channel、10 rejected_critical_wireless、11 already_at_target、12 expired |
| 3–4 | channel, state now | u8, enum | 回显通道;接受时的状态 |
| 5–7 | expected completion, reserved | u8, u16 | 距预期 STATE 的时间,100 ms 单位(脉冲:脉宽 + 回读稳定时间) |
4.3 STATE——设备确认的回读(12 字节)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0–1 | channel, state | u8, enum | 共享词汇 |
| 2 | reason | enum | 0 无,1 命令,2 本地输入,3 默认映射,4 过流跳闸,5 短路跳闸,6 过温跳闸,7 看门狗,8 脉冲完成,9 最大导通切断,10 舵位锁定,11 检测到旁路,12 负荷卸载,13 互锁,14 点动超时,15 不一致 |
| 3–4 | level | u16 | pwm/half_bridge 为 0–1000(0.1 %);其他为 0/1000 |
| 5–6 | current | u16 | 0.1 A 级(P01-core.md FR-02);0xFFFF = 未测量 |
| 7–8 | cmd seq | u16 | 引发的 CMD,主动上报时为 0 |
| 9–11 | flags, trip count, reserved | bits, u8, u8 | b0 经硬件检测确认(辅助触点/电流),b1 应答,b2 状态未知,b3 回读待定;自上次 reset_trip 以来的跳闸次数 |
在每次变化时、应请求时(SUB 1)以及每 10 s (t) 作为快照(SUB 2,5 个通道 × 12 字节)发送。每通道最小间隔 20 ms (t)。UI 与键盘仅渲染 STATE(PRODUCT-PLAN.md §1 控制面原则)。
4.4 TELEM——周期遥测,多路复用(64 字节)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0–2 | page, channel base, count | u8 ×3 | page = SUB;首通道索引;包含的记录数(1–10) |
| 3 | node temperature | i8 | °C,最热传感器 |
| 4 + 6·k | record k: current, voltage, temperature, flags | u16, u16, i8, bits | 0.1 A 级;输出侧 0.01 V(di/ai:按 X02 输入类型的原始值);°C 级传感器,-128 = 无;b0 开通,b1 pwm 激活,b2 降额,b3 重试待定,b4 旁路,b5 传感器故障 |
CORE-M 46 通道 = 5 页,CORE-S 22 = 3,CORE-HD 重载 + 备用 ≤ 30 = 3,SENSE 输入 = 1。默认速率每页 1 Hz (t);订阅者(Hub、经 Hub 的 Studio、VIEW)可用 SUB 8(页掩码,持续时间 ≤ 600 s (t))将某节点提升至 10 Hz,以满足 P01-core.md FR-02 "每通道 ≥ 10 Hz" 的调试与诊断需求;§6 限定全总线的快速预算。节点内部测量始终 ≥ 10 Hz;总线速率只是发布设置。
4.5 ALARM(16 字节;PRI 0)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0 | severity | enum | 0 notice、1 warning、2 critical |
| 1 | code | enum | 1 跳闸,2 过温,3 检测到旁路,4 脉冲不一致(状态未知),5 最大导通切断,6 看门狗复位,7 id 冲突,8 节点丢失(由 Hub 发出),9 配置无效,10 认证失败突发,11 总线错误被动/总线关闭,12 输入规则(Sense/Core M),13 tag 告警(AIR-GW),14 舵位锁定违规尝试 |
| 2–3 | channel, phase | u8, enum | 255 = 节点级;0 发出,1 清除,2 已确认 |
| 4–15 | instance id, timestamp, value, ack originator, reserved | u16, u32, u16, enum, — | 每节点实例号,每次发出递增;节点时间(§9),未同步时为 0;与 code 相关的电流/温度/计数;phase = 2 时的发起者类型 |
critical 每 10 s (t) 重复,直到被确认(来自 Hub/KEY 的 SUB 1,记入审计);告警首先在本地动作(模块 LED、Sense 继电器/蜂鸣器),绝不等待 Hub 或云端(P01-core.md §10、P02-sense.md §10)。
4.6 AUDIT——谁/做了什么/何时/结果(32 字节)
| 字节 | 字段 | 类型 | 含义 |
|---|
| 0–1 | record seq | u16 | 节点环形索引(AIR-GW ≥ 4,096 条记录 (t),按 P05-air-gateway.md §9;KEY 256 条 (t),按 P06-key.md FR-13) |
| 2–7 | ts utc s, ts ms | u32, u16 | 未知时为 0 |
| 8–15 | source node, originator kind, originator id, action, channel, value | u8, enum, u16, enum, u8, u16 | 谁(键盘按键、无线端点、Hub 用户、自动化任务)与做了什么(同 CMD) |
| 16–17 | result, reason | enum, enum | 0 已确认,1 超时,2 已拒绝,3 不一致,4 重放,5 已过期,6 未绑定;reason = STATE 原因或 ACK 结果 |
| 18–23 | cmd seq, counter32 | u16, u32 | 与 CMD/ACK/STATE 关联;执行时的重放计数器 |
| 24–31 | auth tag, reserved | u32, — | 对字节 0–23 的 CMAC(§7) |
每个命令结果以及每次锁定/解锁/确认各一条记录;Hub 在节点丢失恢复后用 SUB 1(起始 seq,结束 seq)拉取缺口并追加到其只追加日志(P03-hub.md FR-04)。
4.7 CFG 与 OTA——分块签名传输(64 字节帧,共用状态机)
| SUB | CFG 载荷(字节) | OTA 载荷(字节) |
|---|
| 0 BEGIN | 0–3 包 id,4–7 片段长度,8–9 块数,10–11 schema 主/次版本,12–43 节点片段的 SHA-256,44–47 上一版本 id,48–51 清单版本 | 0–3 镜像 id,4–7 大小,8 目标槽(A/B),9–12 版本,13–14 最低硬件版本,15–46 SHA-256,47–50 防回滚计数器 |
| 1 DATA | 0–1 块索引,2–61 数据(60 字节),62–63 CRC-16 | 0–3 块索引,4–61 数据(58 字节),62–63 CRC-16 |
| 2 END | 0 部分(0/1),1–32 ECDSA P-256 签名的一半(r ‖ s 分两帧 (t)),33–36 签名密钥 id | 相同,签名对象为镜像哈希 |
| 3 STATUS | 0 结果(0 ok,1 哈希不匹配,2 签名无效,3 schema 不支持,4 额定值超过型号 ID,5 能力不匹配,6 NVM 错误,7 busy),1 阶段,2–3 下一期望块,4–11 缺失块位图 | 相同,外加 12 进度 %,13 启动测试结果(0 待定,1 健康,2 失败) |
| 4 ROLLBACK / ACTIVATE | ROLLBACK:0–3 版本 id → 重新激活上一片段(保留最近两个,P02-sense.md §9) | OTA 4 ACTIVATE:0 槽,1 启动计数上限(3 (t)),2 延迟 s;OTA 5 ROLLBACK:0 槽 |
| 5 CAP | 请求(空)/ 响应页 0–3 = 能力块 | — |
| 6 ASSIGN | 0–7 UID,8 新节点 id,9–24 用设备密钥包裹的总线密钥(AES-128-CCM),25–32 CCM 标签,33–36 计数器纪元;广播,仅 UID 匹配者动作 | — |
规则:选择重传窗口 16 块 (t),全总线 ≤ 200 帧/s (t)(§6);先校验哈希再校验签名,之后才应用任何内容;任何 STATUS NACK 都会在 Hub 上中止整个部署,最近已知良好版本保持激活(P03-hub.md §10)。默认状态映射、保护表与 max_conduction_ms 上限仅在依据硬件型号 ID 校验通过后应用(P01-core.md FR-19)——包可以降低上限,绝不能提高——并且位于 OTA 镜像之外(P01-core.md FR-18)。OTA 期间的节点继续开关与保护;ACTIVATE 仅在没有待处理 CMD 或进行中的脉冲时重启;启动计数耗尽后自动切回。128 KB 器件上的 KEY 可按 P06-key.md §9 提供精简镜像,并对第二个会话回答 busy。
4.8 HB——心跳与时间(8/12 字节;1 s (t);连续丢失 3 次判定节点丢失)
| SUB | 字节 | 含义 |
|---|
| 0 HB | 0 类别,1 电源模式(0 active,1 standby,2 sleep 进入前宣告),2 标志(b0 配置有效,b1 检测到旁路,b2 故障,b3 OTA 待定,b4 时间已同步,b5 舵位锁定激活,b6 出厂 ID 0),3 配置哈希低字节,4–7 counter32 | 存活 + 重放计数器(§7) |
| 1 TIME | 0–3 unix 秒,4–5 ms,6 质量(0 无,1 RTC,2 GNSS/NTP) | 仅 Hub,每 10 s (t);AIR-GW 在独立模式下可发送 |
| 2 POWER | 0 指令模式,1–2 延迟 s | Hub 广播:sleep、standby、active |
| 3 WAKE | 0–7 唤醒者 UID(0 = 任意) | §9;休眠节点不发 HB,列为 sleep 而非丢失;KEY 在 5 s 无 Core HB 后显示总线丢失(P06-key.md FR-11) |
4.9 DIAG(64 字节页)
| 页 | 内容 | 速率 |
|---|
| 0 总线 | TEC、REC、总线关闭与错误被动计数、rx/tx 帧计数器 u32、rx 溢出、认证失败计数、估算总线负载 % | 0.1 Hz (t) |
| 1 供电/热 | V+ u16(0.01 V)、内部电源轨、板温、各级 MOSFET/母排温度 i8 ×16、降额档位 | 0.1 Hz (t),降额期间 1 Hz |
| 2 复位/事件 | 复位原因、看门狗计数、欠压计数、休眠进入次数、唤醒源计数器(CAN / WAKE / di)、运行时间 | 0.1 Hz (t) 及启动时 |
| 3 版本 | 固件、引导程序、当前槽、配置片段哈希、schema 版本、硬件型号 ID、总线密钥 id | 启动时、应请求、0.01 Hz (t) |
1–2(KEY) | FR-16 集合:供电、温度、LED 驱动标志、按键计数器 | 10 s (t) |
5. 命令生命周期状态机
发起者侧按(源,seq),节点侧按通道。常数:ACK ≤ 100 ms,确认窗口 5 s,脉冲再次动作 ≥ 12 s,N = 3 (t) 次连续不一致。
| 状态 | 事件 | 下一状态 | 动作 |
|---|
idle | 用户/自动化意图 | sent | 构建 CMD(seq++,认证标签),启动 100 ms ACK 定时器;UI 显示 pending |
sent | ACK accepted | acked | 启动 5 s 确认定时器(若 ACK "预期完成"更长则取其值,脉冲) |
sent | ACK rejected_* | rejected | AUDIT rejected 并附原因;UI 恢复最后一次 STATE;键盘记录被拒绝的按压 |
sent | 100 ms 无 ACK | sent(重试 ≤ 2) | 带 b0 标志重发,seq 不变;第三次丢失 → timeout |
acked | STATE,seq 匹配,状态 = 目标 | confirmed | AUDIT confirmed;UI 渲染 STATE |
acked | STATE,seq 匹配,状态 ≠ 目标 | mismatch | 计数++;AUDIT mismatch |
acked | 5 s 无 STATE | timeout | UI 视觉回退并提示重试(PRODUCT-PLAN.md §1);AUDIT timeout;发 STATE 请求(SUB 1) |
timeout / mismatch | 重试,类型 level/pwm/half_bridge | sent | 普通重试,最多 2 次 |
timeout / mismatch | 重试,类型 pulse | sent | 重试前读取:发起者必须持有 ≤ 1 s 内、显示状态 ≠ 目标的 STATE,否则节点回答 already_at_target;节点强制该通道距上次脉冲 ≥ 12 s(rejected_rate) |
mismatch | 计数 = N | alarmed | ALARM 代码 4,通道 fault 并带"状态未知";该回路的自动化回退为手动(PRODUCT-PLAN.md §P4、P02-sense.md §10) |
| 任意 | ACK 前 ttl 过期 | rejected | 节点回答 expired;过期的云端命令只记录、不执行(P03-hub.md §10) |
节点在 ACK 之前依次检查:认证标签与重放计数器 → 通道存在且其类型允许该动作 → 通道的 permissions 对象允许该发起者类型(X02-config-schema.md)→ critical 通道拒绝仅来自 wireless_key 的来源(rejected_critical_wireless)→ 舵位锁定(locked,由具有舵位角色的 hub_user 设置;在 Core 中强制执行,键盘仅显示暗红并记录,P06-key.md FR-07)→ 通道不处于 tripped/fault/bypassed → 脉冲速率与重试前读取 → 互锁组。脉冲执行:脉宽来自 CFG(50 ms–1 s);独立于 Studio 的固件定时器在 max_conduction_ms ≤ 1 s (t) 时切断导通(P01-core.md §10)并上报原因 9;回读为绑定到该回路的辅助触点 di,因为电流只能确认闭合、绝不能确认断开(PRODUCT-PLAN.md §P4)。momentary_hold 需要发起者的 HB;节点在连续丢失 3 次 HB 后释放(P06-key.md FR-05)。任何通道都不会仅因 Hub 链路丢失而改变状态。
6. 总线负载预算
T(L) = [48 + S_arb] × 2.0 µs + [10 + 8·L + CRC(17|21) + FSB(5|6) + S_data] × 0.5 µs
48 arbitration-rate bits = SOF, 29-bit ID, SRR, IDE, RRS, FDF, res, BRS, ACK, ACK-del, EOF(7), IFS(3);
data-rate bits = ESI, DLC(4), payload, stuff-count(4), CRC, fixed stuff, CRC-del; S = dynamic stuff, worst 1 per 4
| 载荷 L | 最坏情况帧时间 | 使用者 |
|---|
| 8 字节 | ≈ 165 µs | ACK、HB |
| 12 / 16 字节 | ≈ 185 / 200 µs | STATE、TIME / CMD、ALARM |
| 32 字节 | ≈ 285 µs | AUDIT |
| 64 字节 | ≈ 450 µs | TELEM、DIAG、CFG、OTA |
46 节点 (t) 的最坏情况总线:8 台 CORE-M(各 5 个 TELEM 页)、12 台 CORE-S(3)、4 台 CORE-HD(3)、6 台 SENSE(1)、12 台 KEY、2 台 AIR-GW(1)、1 台 HUB、1 个服务工具。
| 流量 | 帧/s | 负载 | 备注 |
|---|
| TELEM 1 Hz,全部 96 页 | 96 | 4.3 % | 40 + 36 + 12 + 6 + 2 页 |
| HB 46 节点 1 Hz + TIME 0.1 Hz | 46 | 0.8 % | |
| 命令突发:32 通道场景在 1 s 内作为 32 CMD + 32 ACK + 32 STATE + 32 AUDIT | 128 | 2.7 % | 上界;实际上场景为每节点一条 CMD |
| STATE 背景 20/s、ALARM 突发 10/s、DIAG 46 节点 0.1 Hz | 35 | 0.8 % | |
| 快速 TELEM 订阅,全总线上限 | 100 | 4.5 % | 例如两台 CORE-M 全部以 10 Hz(FR-02) |
| CFG/OTA 背景,全总线上限 | 200 | 9.0 % | 最低优先级,受流控 |
| 合计 | 605 | ≈ 22 % | < 30 % (t),留有 8 % 余量;不含 OTA 与快速 TELEM 时 ≈ 8.6 % |
全部 TELEM 页以 10 Hz 发送将达 43 %;因此快速模式是受限订阅,绝非默认。Hub 读取 DIAG 页 0 的总线负载,在超过 25 % (t) 时拒绝新的快速订阅。
7. 安全
| 项目 | 规则 |
|---|
| 密钥 | 每节点 128 位设备密钥在生产时注入 MCU 安全存储(S32K CSEc/HSE_B、ESP32-C5 密钥管理器,按 P01-core.md §7、P05-air-gateway.md §7);每船 128 位总线密钥由 Studio 在调试时生成,用各设备密钥包裹后下发(CFG ASSIGN);密钥绝不离开节点,加密的 Studio 备份除外 |
| 签名 | CFG 包与 OTA 镜像用 ECDSA P-256 签名 (t);签名密钥离线保存(固件用 YBO 发布 HSM,配置用 Studio/Hub 部署密钥);公钥与密钥 id 位于不可更改的引导程序区,仅通过签名 OTA 轮换 |
| 帧认证 | CMD、AUDIT、ALARM 确认、CFG/OTA 的 BEGIN/END/ACTIVATE/ROLLBACK/ASSIGN 携带总线密钥下的 32 位截断 AES-CMAC-128 (t);STATE、TELEM、HB、DIAG 与 DATA 块不做认证(完整性由 CAN CRC、包哈希与签名保证) |
| 重放 | 每源节点 counter32,单调递增,在 HB 中通告;接收方接受 counter > 上次所见,并带 16 值重排序窗口 (t);每 256 次递增持久化到 NVM (t),启动时前进 256;计数器复位需要 ASSIGN |
| 不加密 | YBO-CAN 上的一切:总线物理上位于船内,且所有安全行为必须对服务工具保持可观测;仅总线密钥传输(AES-128-CCM)与 Studio 备份加密 |
| 配网与失败策略 | 密钥注入后锁定调试端口;服务工具(ID 240–254)使用可由 Studio 通过 CFG 撤销的工具密钥;对已分配节点的 ASSIGN 仅接受来自持有当前总线密钥的 Hub;60 s 内 ≥ 10 次认证失败 (t) → ALARM 代码 10,同时节点继续执行本地逻辑与已认证命令,绝不落入无保护模式 |
8. 与 N2K 共存、网关角色与厂商固件映射
N2K 仅承载标准 PGN。本文定义的任何 YBO 族、标识符或载荷都绝不放到 NMEA 2000 主干上(P03-hub.md FR-01、PRODUCT-PLAN.md §1)。
| 网关 | 转发 | 绝不转发 |
|---|
HUB | STATE → PGN 127501(二进制状态,仅回读);PGN 127502(开关组控制)→ 发起者为 mfd_n2k 的 CMD;来自 TELEM 的电池/电源 PGN;J1939 发动机数据 → N2K 与 MQTT(P03-hub.md FR-02/FR-14) | CFG、OTA、AUDIT、DIAG、HB、已命令但未确认的状态 |
CORE-S / CORE-M 原生 N2K 口、SENSE N2K 配置 | 自身通道作为 PGN 127501/127502,组实例来自 X02(P01-core.md §3);SENSE PGN 127505 与 130316,速率按 P02-sense.md §9 | 任何关于其他节点的内容;告警内部信息 |
AIR-GW 系统模式 | 端点手势 → CMD(wireless_key,发起者 id = 端点短 id);Tag 告警 → ALARM 代码 13 | 专有 Air 电报 |
AIR-GW 独立模式 | 端点手势 → PGN 127502 至第三方开关组,从 PGN 127501 回读;经 RS-485 的 Modbus 目标(P05-air-gateway.md §9) | YBO-CAN 上的任何内容(不在总线上) |
Core 厂商固件映射(PRODUCT-PLAN.md §P1 需求 1、§6 第 1b 项):
| 选项 | 谁实现什么 | 协议后果 |
|---|
| A——在厂商硬件上运行自有固件 | YBO 实现全部族、引导程序(OTA A/B)、密钥存储与硬件看门狗接口 | 完全符合(§10);优先——护城河在固件 |
| B——厂商按本规范定制构建 | 厂商实现全部十个族的节点侧并通过 CT-01…CT-15;YBO 提供一致性测试工具、密钥注入流程与签名密钥;厂商必须将 max_conduction_ms 暴露为固件上限、提供型号 ID 锁定以及镜像之外的默认状态映射 | 完全符合作为验收条款;CAN 与保护层的源代码托管 |
C——外部网关节点(YBO S32K148 板位于 YBO-CAN 与厂商专有 CAN 之间) | 网关面向 YBO-CAN 实现全部族;STATE 来自厂商回读帧,绝不来自命令回显;TELEM 限于厂商发布的内容;AUDIT 在网关生成 | 降级:除非厂商固件或网关硬件强制执行导通上限,否则禁止 pulse 通道;休眠 ≤ 5 mA 与 CAN 唤醒取决于厂商自身的休眠;厂商镜像的 OTA 不在范围内 |
9. 休眠/唤醒与时间
| 项目 | 规则 |
|---|
| 模式与休眠进入 | active;standby(收发器 Standby,MCU 监听,≤ 各文件的待机指标);sleep(收发器 Sleep,MCU 停止,≤ 5 mA 家族规则);off。休眠进入:Hub POWER 指令或节点空闲规则(KEY:总线静默 ≥ 60 s (t),P06-key.md FR-10;AIR-GW:仅在总线休眠信号时,P05-air-gateway.md §10;Core:配置的空闲时间 (t));节点宣告 HB 电源模式 2,完成待处理脉冲,保持默认状态映射与 HD 休眠模式常开输出 |
| 唤醒源 | CAN WUP、WAKE 引脚、配置的 di(P01-core.md FR-10);唤醒节点以 100 ms 间隔 (t) 发送三次 HB SUB 3 WAKE,因为第一帧被收发器与 MCU 启动消耗;CAN 在缺少应答时的自动重传弥补空隙;至首个 HB 的延迟 ≤ 1 s (t)(P01-core.md §14),KEY 在 100 ms 内 (t) 可发送(P06-key.md FR-10) |
| 收发器预算 | TJA1463 Sleep 下 IBAT ≤ 26 µA、ICC ≤ 2 µA(数据手册见 §1):相对 5 mA 可忽略;MCU、稳压器与检测链路在各设计附录中承担其余预算 |
| 时间 | Hub 为时间主(每 10 s (t) 发 TIME);独立模式下由 AIR-GW 兜底;节点保持单调计数器,未同步时 AUDIT/ALARM 时间戳为 0;Hub 用到达时间减去节点运行时间差回填墙钟时间 |
10. 一致性测试
| ID | 测试 | 通过判据 |
|---|
| CT-01 | 位时序:节点与参考节点一起加入 500 k / 2 M 总线;10⁶ 帧 | 零错误帧,每帧 YBO 帧均置位 BRS |
| CT-02 | ID 布局:每个发送的 ID 都能解码为有效的 PRI/FAM/SRC/DST/SUB;绝不发送 FAM 15 | 100 % |
| CT-03 | HB 周期与节点丢失:1 s ± 10 %,丢失 3 次后 Hub 发 ALARM 8 | 满足时序 |
| CT-04 | ACK 延迟:以 50 条/s 发 1,000 条 CMD | 每条 ACK ≤ 100 ms |
| CT-05 | STATE 确认与拒绝:level 通道 ON/OFF;未知通道、超范围 level、已跳闸通道 | 5 s 内 STATE,电流确认,UI 仅显示回读;ACK 结果码正确,AUDIT rejected |
| CT-06 | 认证:错误 CMAC、重放计数器、计数器复位 | rejected_auth / rejected_replay,10 次失败后 ALARM 10 |
| CT-07 | 舵位锁定:由 hub_user 锁定,KEY 与 AIR-GW 按压 | rejected_locked,键盘暗红,AUDIT 条目 |
| CT-08 | 脉冲上限:按 CFG 脉宽 50 ms–1 s;试图提高上限的包 | 示波器测得导通 ≤ max_conduction_ms;该包收到 STATUS 4 |
| CT-09 | 脉冲重试前读取与速率:辅助触点强制到目标,发送重试;间隔 < 12 s 的两次脉冲;发起者 HB 停止的点动保持 | already_at_target,无输出边沿;第二次脉冲 rejected_rate;点动通道在 3 个 HB 周期内关闭,原因 14 |
| CT-10 | 不一致升级:断开辅助触点,3 次确认失败 | ALARM 4,通道 fault + 状态未知,不再发脉冲 |
| CT-11 | TELEM:46 通道节点 1 Hz 与 10 Hz 订阅;电流对比参考分流器 | 页完整,误差 ≤ 0.1 A (t),订阅到期 |
| CT-12 | 总线负载:回放 §6 最坏情况 | DIAG 页 0 < 30 %,无 ACK > 100 ms |
| CT-13 | CFG:5 % 块丢失;哈希不匹配;错误签名;额定值高于型号 ID | 选择重传完成;STATUS 1/2/4;最近良好配置保持激活 |
| CT-14 | OTA:5 % 丢失下的 A/B 传输、启动测试失败、传输中途断电 | 在启动计数上限内回滚;默认状态映射不变;通道保持状态 |
| CT-15 | 休眠/唤醒与 N2K 隔离:空闲后 ≤ 5 mA,任意节点发 WUP,唤醒 ≤ 1 s;在含 OTA 的满负荷 YBO 流量期间侦听 N2K | 在 12 V 与 24 V 下满足指标;N2K 上仅有标准 PGN,127501 仅在 STATE 之后变化 |
11. 可案头决定的事项
| 决策 | 建议 | 理由 | 冻结门槛 |
|---|
| 数据段比特率、采样点 | 2 Mbit/s,80 % (t) | 64 字节帧 450 µs 使 46 节点场景保持在 ≈ 22 %;SIC 5 Mbit/s 余量留作储备 | M3,配合 S-02 拓扑台架 |
| TELEM 默认速率、HB 周期、不一致次数 N | 1 Hz 页加受限 10 Hz 订阅;1 s;3 (t) | 无需 43 % 总线即可按通道满足 FR-02;0.8 % 负载且节点丢失 3 s;一次丢失脉冲 + 一次重试 + 确认 | M3,配合 PRODUCT-PLAN.md §6 第 1c 项;Studio schema v0 |
| 认证标签与签名 | 32 位截断 CMAC,ECDSA P-256 (t) | 可容纳于 16 字节 CMD;HSE_B/CSEc 与 ESP32-C5 原生支持 | DVT 前的安全评审 |
| OTA/CFG 窗口与上限 | 16 块,200 帧/s | 9 % 负载上限 | EVT |
| WAKE 帧重复、拓扑限值 | 3 × 100 ms;40 m / 1 m / 64 节点 (t) | 覆盖 4–50 µs 收发器启动加 MCU 唤醒;SIC 台架证据 | S-02 休眠/唤醒与拓扑台架,M3 配合 PRODUCT-PLAN.md §6 第 3 项 |
12. 变更记录
| 日期 | 变更 | 参考 |
|---|
| 2026-08-28 | 初始基础文件草案:标识符布局、十个族、含脉冲模式的生命周期、46 节点总线预算、安全、N2K 共存、厂商映射、一致性测试清单 | PLAN-029 |