ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Serial Studio CANable(gs_usb)适配器 CAN FD 支持与热插拔检测:从协议实现到验收的全过程解析

Serial Studio CANable(gs_usb)适配器 CAN FD 支持与热插拔检测:从协议实现到验收的全过程解析 Serial Studio CANablegs_usb适配器 CAN FD 支持与热插拔检测从协议实现到验收的全过程解析【免费下载链接】Serial-StudioOpen-source telemetry dashboard. Supports UART, BLE, MQTT, Modbus, CAN Bus and more.项目地址: https://gitcode.com/GitHub_Trending/se/Serial-StudioSerial Studio 的 CAN Bus 驱动此前只支持经典 CANclassic CAN固定 8 字节负载、单一仲裁位速率。随着 CANable 2.0 系硬件RH-02 Elite/Plus/Pro、candleLight FD 固件板卡普及CAN FD最高 64 字节负载、独立数据相位能力对应用完全不可见。本文以 Spec 0049 任务清单 为主干结合 规格文档、实施方案 及仓库实际源码完整讲解 CAN FD 协商、FD 尺寸读写路径、逐适配器能力门控、libusb 热插拔监听与设备拔出错误映射的实现细节读者将掌握该功能从 wire 协议词汇、驱动层协商到 QML UI 与验收测试的完整链路。背景与动机两个真实痛点Serial Studio 现有的 CANable 支持gs_usb/ candleLight 固件只讲经典 CAN固定 8 字节负载、单一仲裁位速率。而第二代 CANable 硬件CANable 2.0 衍生板例如 Jhoinrch RH-02 Elite/Plus/Pro、candleLight FD 板卡具备 CAN FD 能力——最高 64 字节负载、带更快的 data phase——这一能力对应用完全不可见。用户在 CAN FD 总线上看不到任何解码结果尽管手中的适配器原生支持该总线。该问题于 2026-08-10 在 RH-02 Elite 实测中被提出见 spec.md。另一方面适配器的接入与移除只有在固定时刻打开设备列表、尝试连接时才被察觉。连接面板打开时插入适配器不会让它出现会话中途拔线应用只能通过一次失败的传输间接发现丢失。这两种都是口袋 USB 设备的日常操作且当前体验均劣于用户熟悉的 UART 路径。需求全景Spec 0049 的 R1–R9规格文档定义了九条可验收需求是后续任务拆解的验收锚点编号需求内容R1CAN Bus 连接 UI 提供 CAN FD 选项仅当所选适配器上报 FD 能力时可用经典适配器上明确不可用R2启用 CAN FD 后数据相位位速率可与仲裁位速率分开配置且受适配器上报的时序限制约束R3CAN FD 激活时收到的 FD 帧最高 64 字节、带或不带 BRS与今天经典帧一样到达 dashboard/consoleR4CAN FD 激活时发送帧遵守 FD 与 BRS 标志负载最高 64 字节负载长度向上取整到最近的有效 CAN FD DLCR5CAN FD 关闭默认时在所有已支持适配器上的行为与今天逐字节一致包括早于 FD 的固件R6连接面板可见时插入支持的适配器约 2 秒内出现在设备列表拔出同样移除R7会话中拔出适配器会话立即断开并给出指明原因设备移除的用户可见通知而非泛化 I/O 错误R8热插拔监控仅在存在消费者面板打开或会话激活时运行驱动空闲时零周期开销帧热路径上零开销R9macOS、Linux、Windows 行为等价包括无原生热插拔回调的 USB 栈允许在 R6 延迟内的轮询回退总体技术方案与关键设计决策plan.md 给出了 HOW 阶段的技术设计其核心判断是IO::Drivers::CANBus已具备canFD复选框、FD 感知写路径64 字节负载 setFlexibleDataRateFormat和 64 字节 RX 处理真正缺失的是数据相位位速率属性、gs_usb 的 FD 线上协议、逐适配器能力门控、热插拔感知。方案由此分四路推进教GsUsbCanBackend学会 gs_usb 协议的 FD 半边BT_CONST_EXT/DATA_BITTIMING请求、GS_CAN_MODE_FD、76 字节 host frame、DLC 码映射、pad quirk新增持久化dataBitrate属性经QCanBusDevice::DataBitRateKey流动FD 复选框按接口能力门控Qt 插件经QCanBusDeviceInfo::hasFlexibleDataRate()上报gs_usb 在枚举阶段探测BT_CONSTfeature word在共享 libusb 上下文上增加一个进程生命周期热插拔监听器去抖进入refreshInterfaces()会话中拔出则复用既有读循环失败路径以 adapter disconnected 消息替代泛化读错误。关键取舍详见 plan.md 权衡表FD 实现位置原生 FD 做在 gs_usb 后端而非仅依赖 Qt 插件或 slcan-FD——Qt 插件方案会让目标适配器停留在经典模式slcan-FD 是非标准 ASCII 方言且属于 spec 非目标热插拔机制libusb 回调 200 ms 去抖而非 1 Hz 全量重枚举——轮询每秒重开每个设备违反 R8 精神且会干扰其他主机能力探测时机在枚举期间设备已打开探测并做 per-label 缓存——一次只读控制传输、缓存预热后零额外打开探测失败保守降级为 不支持 FD绝不阻塞经典使用会话中拔出检测读循环错误映射而非热插拔事件驱动关闭——读循环本身已在 ≤100 ms 内检测到移除无新增活动部件热插拔关闭会与读循环自身失败竞争并双重上报BRS 发送策略FD 激活时总是置位——应用write()接口当前没有 per-frame 标志通道配置了数据位速率即隐含切换语义。任务拆解T1–T12 逐个解析任务清单将 plan 分解为 12 个小型、有序、可独立验证的工作单元每个任务 一个聚焦、可评审的 diff并约定门禁人类标记approved之前不得开始/ss-implement。所有任务均已完成[x] done。T1 — gs_usb FD 协议词汇纯新增无行为变化新增 core/Protocols/CAN/GsUsbProtocol.hheader-only仿照MirrorProtocol.h先例使测试套件无需链接 libusb/SerialBus在既有常量旁添加 FD 半边线上词汇控制请求对应 Linux 内核gs_usb_breq枚举kBreqDataBitTiming 10、kBreqBtConstExt 11早期 plan 草案误标为 5/6 即 DEVICE_CONFIG/TIMESTAMP已纠正feature 位kFeatureFdBIT(8)、kFeaturePadPktsBIT(7)、kFeatureBtConstExtBIT(10)模式标志kModeFdBIT(8)另有kModeListenOnly、kModeLoopBack、kModeBerrReporting帧标志kFrameFlagFd/kFrameFlagBrs/kFrameFlagEsiBIT(1)/BIT(2)/BIT(3)结构体GsHostFrameFD76 字节 packed 结构 static_assert、GsDeviceBtConstExt72 字节含数据相位时序范围dtseg1Min/Max、dtseg2Min/Max、dsjwMax、dbrpMin/Max/Inc辅助函数dlc2len/len2dlc自由函数对固定查找表 R4 向上取整规则与solveBitTiming位时序求解器。该任务不改动任何既有行新符号暂无人读取。T2 — 单元测试tst_gsusb_protocol新增 app/tests/tst_gsusb_protocol.cpp通过既有 test-include 模式仿照tst_checksums链接配方绝不把代码复制进测试对纯辅助函数做单元测试dlc2len/len2dlc往返 向上取整用例0→0、9→12、13→16、20→20、21→24、49→64、64→64、越界 1000→64FD 数据相位solveBitTimingfclk 80 MHzSTM32G431 FDCAN 级常量下 1M/2M/4M/5M/8M 求解有效段且重建精确速率fclk / (brp * total) bitrate且余数为 0经典 48 MHz 求解回归九个标准速率10k/20k/50k/100k/125k/250k/500k/800k/1M逐位钉住今日输出R5 防线timingLimits()从BT_CONST_EXT中切出仲裁与数据相位两视图求解器拒绝不可能速率。测试注册于 app/tests/CMakeLists.txt 的ss_add_unit_test(tst_gsusb_protocol ...)维护者构建后以ctest -R gsusb_protocol运行。T3 —configureDevice()中的 FD 协商 协商状态成员在 GsUsbCanBackend.h 增加m_fdActive、m_rxFrameSize、m_padTxToMaxPacket成员仅在构造初始化列表中赋值不做头内初始化。configureDevice()读取CanFdKeyDataBitRateKey请求 FD 时要求 feature word 含kFeatureFd否则给出明确指向固件的错误The adapter firmware does not support CAN FD. Flash candleLight FD firmware or disable the flexible contenteditable="false">【免费下载链接】Serial-StudioOpen-source telemetry dashboard. Supports UART, BLE, MQTT, Modbus, CAN Bus and more.项目地址: https://gitcode.com/GitHub_Trending/se/Serial-Studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表