通过 CAN 控制 Synairy 设备
客户通过 CAN 或 CAN FD 接口连接支持该接口的产品,用 ISO-TP 传输 Synairy 命令报文。命令号、请求参数和响应字段仍查阅产品通用协议与对应产品业务协议。
01 接入前确认
从具体型号的接口资料取得以下参数,再配置主机 CAN 控制器和收发器。接口资料中的实际参数优先;本页不为所有产品指定统一速率或 CAN ID。
| 参数 | 客户需要确认 |
|---|---|
| 接口能力 | 该型号支持 Classical CAN、CAN FD,或两者;是否支持通过 CAN 进入 Boot 和升级 |
| 总线参数 | 仲裁段速率;CAN FD 还需数据段速率与 BRS 设置;终端电阻和接线要求 |
| 设备标识 | 每台设备的节点标识、请求 CAN ID 和响应 CAN ID,以及标准帧或扩展帧类型 |
| 承载上限 | 该型号允许的 ISO-TP 报文最大长度、应用响应超时与 OTA 能力 |
多台设备共线时,各设备必须有不冲突的请求/响应 CAN ID。节点标识与 CAN ID 的设置或出厂分配方法由具体产品接口资料给出;主机不能仅凭设备 UID 推算 CAN ID。
02 报文如何放入 CAN
CMD(1字节) + SEQ(1字节) + PAYLOAD(0…N字节) + CRC16(2字节)ISO-TP(完整原始命令报文)主机向设备的请求 CAN ID 发送 ISO-TP 报文,并在该设备的响应 CAN ID 接收 ISO-TP 报文。采用 ISO-TP 普通寻址:地址由这对 CAN ID 确定,数据区不再加 ADDR 字节。每个方向单独配置对应的发送与接收 ID。
完整原始报文与串口使用相同的 CMD、SEQ、PAYLOAD、CRC16 定义。CRC16 覆盖 CMD、SEQ、PAYLOAD,采用 CRC-16/CCITT-FALSE,低字节在前。CAN 接口不使用 COBS 编码,也不附加串口的 0x00 结束符。
| 原始报文长度 | ISO-TP 处理 | 客户操作 |
|---|---|---|
| 能放入一帧 | Single Frame(单帧) | 交给 ISO-TP 发送;不要把原始报文直接当作完整 CAN 数据区 |
| 超过一帧 | First Frame、Flow Control、Consecutive Frame | 用 ISO-TP 完成分帧、流控、顺序检查和重组,再解析 Synairy 报文 |
Classical CAN 单帧数据区最多 8 字节,CAN FD 最多 64 字节;ISO-TP 还会占用部分数据区,因此能否单帧发送应交由 ISO-TP 实现判断。发送端必须遵守接收端的 Flow Control(块大小与最小间隔)。补齐字节如接口要求使用 0x00,补齐不属于原始命令报文。
03 客户收发步骤
- 按产品接口资料连接 CAN_H、CAN_L、参考地与终端电阻;设置一致的帧类型、总线速率和 CAN FD 参数。
- 为目标设备配置 ISO-TP:主机发送 ID 为设备请求 ID,主机接收 ID 为设备响应 ID,使用普通寻址。
- 查阅通用命令或对应产品业务命令,填写 CMD、SEQ、PAYLOAD,计算 CRC16,形成原始报文。
- 把完整原始报文交给 ISO-TP 发送;收到响应后由 ISO-TP 重组,校验 CRC16、CMD 和 SEQ,再解析 PAYLOAD 首字节
Result与后续字段。 - 等待最终响应或应用超时后再发送下一条请求。若收到
ACCEPTED,继续等待相同 CMD、SEQ 的最终响应;重试沿用完全相同的 CMD、SEQ、PAYLOAD。
ISO-TP 超时表示传输未完成;Synairy 命令超时表示完整报文已发出但业务未得到最终响应。主机需要分别处理两类超时。
04 示例:读取设备信息
发送 0x01 Get Info,SEQ=0x01,请求 PAYLOAD 为空:
CMD 01 | SEQ 01 | CRC16 1F 3E01 01 1F 3E在 Classical CAN 的 ISO-TP 单帧中,数据区可为 04 01 01 1F 3E:第一个 04 是 ISO-TP 单帧长度,后面四字节才是 Synairy 原始报文。CAN ID 使用目标设备的请求 ID。若接口要求补齐到 8 字节,则尾部补 00 00 00。
Get Info 成功响应的 PAYLOAD 为 19 字节,连同 CMD、SEQ、CRC16 共 23 字节。在 Classical CAN 上,ISO-TP 会将它拆成多帧;主机必须完成流控与重组后,再按获取设备信息的字段表读取版本、模式和 MaxPayload。CAN FD 是否单帧由实际数据长度、DLC 和 ISO-TP 编码决定。
05 多设备和升级
多台设备可以共用一条 CAN 总线,主机使用目标设备的请求/响应 CAN ID 进行访问。按当前通用协议,一条总线上一次只发起一条未完成请求;访问下一台设备前等待当前事务结束。不同设备的响应按各自 CAN ID 区分。业务命令仍使用相同 CMD,无需新增“多设备模式”命令。
如果型号声明支持 CAN 升级,Boot 与应用应沿用该设备的 CAN ID 和 ISO-TP 接入参数。主机发送 Enter Boot 并等待响应,复位后以 Get Info 确认 Mode=BOOT,再按通用 OTA 命令升级。OTA 数据通常需要 ISO-TP 多帧传输。
本页定义协议接入方式,不代表现有每个 Synairy 型号都已实现 CAN 或 CAN FD。具体型号是否支持、实际 ID、速率和 Boot 能力,必须以该型号发布的接口资料为准。
