# CAN CH1 发送切换(2026-09-29) 实时 CAN 改为 CH0 只接收、CH1 只发送。CH0 与 CH1 都使用 60 MHz 时钟、仲裁域 500 kbps、数据域 2 Mbps,并随设备生命周期一同初始化、启动和复位;合并接收仍由 CH0 的单一接收线程执行,收到的 CH1 数据被忽略。自动风险报文和按需 `sendCan()` 均只允许 CH1,CH0 发送参数会抛出 `std::invalid_argument`。 风险协议未改变:标准 CAN `0x1F6`、DLC 8,首字节 `clear=0x00`,其余状态 `0x11`,后七字节清零;首次状态发送一次,之后仅在二值状态变化时发送。摄像头采集、停止恢复、0x391 解析和实时画面只显示 CH0 的行为未改动。 ## 本机模拟回归 `tests/run_can.sh` 通过(模拟 SDK + UBSan)。测试桩强制要求 CH0/CH1 均完成初始化、终端电阻配置、启动和复位,所有经典 CAN/CANFD 发送调用必须使用 CH1;覆盖 CH0 接收及 CH1 输入忽略、按需发送校验、风险变化触发、发送失败、阻塞合并和停止清理。`tests/run_session.sh` 通过,会话兼容性未受影响;完整 CMake 构建和 `git diff --check` 通过。 ## Orin 真实硬件验证 使用当前 Orin 的 `/dev/video5`、TensorRT 引擎、USBCANFD-200U 和原 `config/camera.json`,以 `./run_camera.sh --no-visualize --save-results` 运行 12 秒。SDK 识别到双通道适配器并打印 `CH0 receive, CH1 transmit`;产生 260 个结果 JSON,末次快照为 CAN `OPEN`、CH1 成功发送 1 帧、发送错误 0,CH0 的 `0x391` 计数为 11,证明摄像头/TensorRT 推理、CH0 接收和 CH1 SDK 发送可在同一进程继续运行。 本次未进行板端故障注入或物理拔插,没有人为触发风险 0/1 变化,也未使用独立总线分析仪或 CH1 接收节点核验线上 `0x1F6` 的电气载荷与 ACK。因此“CH1 线上报文已被对端接收”仍未覆盖,不能由 SDK 成功计数替代。测试前无常驻 `camera_risk`,测试结束恢复为无常驻进程;原配置和启动脚本未修改。 详细计数与版本见 [实机结果](orin_ch1_tx_results.json)。 ## 部署核对 源码构建 `build/camera_risk` 与独立包 `orin/build/camera_risk` SHA256 一致: `feca0b7f476171f45489c22f11a51ba1fe0dabe2d9a17bfcdc50110d1afdb276` 独立包已运行 `sha256sum -c orin/SHA256SUMS` 并全部通过。当前检出分支为 `inference-only`,HEAD `f87e5aad40478824da16eb42c76b40383de3a9a1`;修改位于未提交工作区。联网只读核对远端 `inference-only` 为 `0192fccbf06cb928eac098b3dfad32abf0fc370d`,本次未创建提交或推送远端。