2.6 KiB
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,测试结束恢复为无常驻进程;原配置和启动脚本未修改。
详细计数与版本见 实机结果。
部署核对
源码构建 build/camera_risk 与独立包 orin/build/camera_risk SHA256 一致:
feca0b7f476171f45489c22f11a51ba1fe0dabe2d9a17bfcdc50110d1afdb276
独立包已运行 sha256sum -c orin/SHA256SUMS 并全部通过。当前检出分支为 inference-only,HEAD f87e5aad40478824da16eb42c76b40383de3a9a1;修改位于未提交工作区。联网只读核对远端 inference-only 为 0192fccbf06cb928eac098b3dfad32abf0fc370d,本次未创建提交或推送远端。