# 批量指令离线自动执行 V6 支持在开发板本地保存一组 CAN、CAN FD 和 RS485 指令,并按设定周期和次数自动执行。该功能适合电机批量初始化、循环测试、离线动作片段和生产测试。 `AT+` 控制指令通常通过 USB CDC串口工具发送。命令表为便于阅读只列出命令主体;实际发送时,只输入命令主体,并把发送结束符设置为 `CRLF`。 ## 命令总览 | 命令 | 说明 | | --- | --- | | `AT+VER` | 查询固件版本 | | `AT+STAT?` | 查询运行统计 | | `AT+SETFDCAN=,` | 设置 FDCAN 波特率;`arb_baud` 同时作为经典 CAN 波特率 | | `AT+SETFDCAN?` | 查询当前固件保存的 FDCAN 波特率,返回 `FDCAN:,` | | `AT+SETRS485=,,,` | 设置 RS485 参数 | | `AT+SETRS485?` | 查询当前固件保存的 RS485 参数,返回 `RS485:,,,` | | `AT+SPIMODE?` | 查询当前 SPI 模式 | | `AT+SPIMODE=SHORT` | 切换 SPI 到 23 字节短模式 | | `AT+SPIMODE=LONG` | 切换 SPI 到 73 字节长模式 | | `AT+RS485RAW?` | 查询当前是否处于 RS485 原始数据透传模式 | | `AT+RS485RAW=1` | 开启 RS485 原始数据透传模式 | | `AT+RS485RAW=0` | 关闭 RS485 原始数据透传模式,恢复 SANPO `RT` 封装帧模式 | | `AT+RS485RAWCH?` | 查询 RS485 原始数据透传目标通道 | | `AT+RS485RAWCH=<0~4>` | 设置 RS485 原始数据透传目标通道,`0` 表示全部 | | `AT+CFGERASE` | 擦除通信配置区,并恢复出厂通信默认值 | | `AT+BATBEGIN=,` | 创建或覆盖一个批次 | | `AT+BATADD=,,,,,` | 添加短 payload 指令 | | `AT+BATADDX=,,,,,,,,` | 添加长 payload 分片 | | `AT+BATADDEND=,,` | 结束分片上传并校验 | | `AT+BATCOMMIT=` | 提交并持久化批次 | | `AT+BATRUN=,,,` | 运行批次 | | `AT+BATSTOP` | 停止当前批次 | | `AT+BATLIST?` | 查询批次列表 | | `AT+BATREAD=,` | 读取批次条目 | | `AT+BATDEL=` | 删除批次 | | `AT+BATSTAT?` | 查询批量执行状态 | | `AT+BATAUTOSET=,,,` | 设置上电自动执行 | | `AT+BATAUTOCLR` | 清除上电自动执行 | | `AT+BATAUTO?` | 查询上电自动执行配置 | ## 通信配置区擦除 `AT+RS485RAW` 只控制当前运行时是否开启 RS485 原始数据透传,不写入 COMMCFG 配置区。固件上电默认使用非透传的 SANPO `RT` 封装帧模式,重新上电后会自动恢复为非透传模式。 `AT+SETFDCAN`、`AT+SETRS485`、`AT+SPIMODE`、`AT+RS485RAWCH` 和 `AT+BATAUTOSET/BATAUTOCLR` 会追加写入 Flash 的 COMMCFG 配置区。正常使用不需要手动擦除。 当出现以下情况时,可以发送: ```text AT+CFGERASE ``` - 多次修改配置后返回 `ERR,5`,表示 COMMCFG 配置区空间不足。 - 需要恢复出厂通信参数。 - 需要清除持久化的 SPI 模式、RS485 原始数据透传通道或上电自动执行配置。 `AT+CFGERASE` 只擦除 COMMCFG 配置区,不会擦除 SECINFO 授权信息,也不会擦除已经保存的批量指令数据。执行成功后返回 `OK`,并立即恢复运行时默认值:CAN/FDCAN 为 `AT+SETFDCAN=1000000,5000000`,SPI 为 `SHORT`,RS485 原始数据透传模式为关闭,RS485 原始数据透传通道为 `0`,RS485 为 `4000000,1,0,8`。如果仍需要 SPI `LONG` 或其他波特率,需要重新发送对应 AT+ 指令。 ## 字段定义 | 字段 | 说明 | | --- | --- | | `id` | 批次编号 | | `idx` | 批次内条目序号,从 1 开始 | | `proto` | 协议类型 | | `ch` | 目标通道,`0` 表示当前设备侧全部同类通道 | | `delay_ms` | 执行该条目前的延时 | | `mode` | `1=ONCE`,`2=PERIODIC` | | `repeat` | 重复次数,`0` 表示持续运行 | ## proto 定义 | proto | 含义 | Payload | | --- | --- | --- | | `1` | 经典 CAN 标准帧 | `CANID(2B) + Len(1B) + Data(0~8B)` | | `2` | 经典 CAN 扩展帧 | `CANID(4B) + Len(1B) + Data(0~8B)` | | `3` | RS485 | `Data(0~68B)` | | `4` | CAN FD 标准帧 | `CANID(2B) + 数据长度编码(1B) + Data(0~64B)` | | `5` | CAN FD 扩展帧 | `CANID(4B) + 数据长度编码(1B) + Data(0~64B)` | 经典 CAN 的 `Len` 是真实字节长度,范围 `0~8`。 CAN FD 的“数据长度编码”不是直接字节数。 | 数据长度编码 | 真实数据长度 | | --- | ---: | | `0x00` | 0 | | `0x01` | 1 | | `0x02` | 2 | | `0x03` | 3 | | `0x04` | 4 | | `0x05` | 5 | | `0x06` | 6 | | `0x07` | 7 | | `0x08` | 8 | | `0x09` | 12 | | `0x0A` | 16 | | `0x0B` | 20 | | `0x0C` | 24 | | `0x0D` | 32 | | `0x0E` | 48 | | `0x0F` | 64 | ## 波特率配置 V6 使用 `AT+SETFDCAN=,` 统一配置 CAN/FDCAN: - 经典 CAN 标准帧和扩展帧使用 `arb_baud`。 - CAN FD 仲裁段使用 `arb_baud`。 - CAN FD 数据段使用 `data_baud`,当前支持 `2000000` 或 `5000000`。 - 配置会写入 Flash,下次上电继续使用。 - USB CDC串口的 Line Coding 只保留为主机侧串口属性,不会同步修改 CAN/FDCAN/RS485 参数。 ## SPI 模式说明 `AT+SPIMODE` 只影响 SPI 固定帧长度,不影响 USB CDC串口协议。 | 模式 | 总线长度 | 支持 | | --- | ---: | --- | | `SHORT` | 23 字节 | SPI 经典 CAN、SPI RS485 | | `LONG` | 73 字节 | SPI 经典 CAN、SPI CAN FD、SPI RS485 | 切换 SPI 模式后,SPI 主机应停止当前 SPI 交易,等待至少 10 ms,再按新模式长度发起通信。 ## 长度与分片 - `AT+BATADD` 适合短 payload。 - CAN FD 和较长 RS485 payload 建议使用 `AT+BATADDX` 分片上传。 - `AT+BATADDEND` 使用 `CRC16-CCITT` 校验完整 payload。 ## 使用示例 ```text AT+SETFDCAN=1000000,5000000 AT+SPIMODE=LONG AT+BATBEGIN=1,fd_test AT+BATADD=1,1,5,1,10,000001230A01020304050607081112131415161718 AT+BATCOMMIT=1 AT+BATRUN=1,1,0,1 ``` ## 错误码 | 错误码 | 含义 | | --- | --- | | `1` | 参数格式错误 | | `2` | 状态错误 | | `3` | 参数超范围 | | `4` | CRC 校验失败 | | `5` | 存储空间不足 | | `6` | 批次不存在 | | `7` | 队列忙 | | `8` | Flash 读写错误 |