# 固件更新 V6 固件面向 STM32G473 系列 MCU。推荐使用 STLINK/SWD 和 STM32CubeProgrammer 更新固件。 ## 准备工作 - [STM32CubeProgrammer](https://gitcode.com/sanpo/robot/tree/v6/firmware/tools) - STLINK/SWD 下载器 - [V6 固件镜像](https://gitcode.com/sanpo/robot/tree/v6/firmware/sanpo_spine/Release/) - 稳定的 USB 或外部 5V 控制电源 - 开发板有两个STLINK接口,分别对应两颗STM32G473芯片,需分别更新固件 ## 更新步骤 1. 连接5V控制系统电源供电。 2. 使用 STLINK 连接开发板 SWD 接口。 3. 打开 STM32CubeProgrammer,选择 `ST-LINK`。 4. **安装工具** 下载并安装ST官方烧录软件:[STM32CubeProgrammer](https://gitcode.com/sanpo/robot/tree/v6/firmware/tools) 5. **获取固件** 下载V6 固件镜像:[sanpo_robot_spine_board_firmware-v6-latest.bin](https://gitcode.com/sanpo/robot/tree/v6/firmware/sanpo_spine/Release) 6. **烧录固件** 使用STM32CubeProgrammer将固件刷入开发板(两颗芯片需分别操作) 6. 复位开发板或者重新上电。 7. 通过 USB CDC串口工具发送 `AT+VER`,发送结束符选择 `CRLF`,确认版本号。 ## 默认协议状态 固件更新或恢复默认配置后,默认状态如下: | 项目 | 默认值 | | --- | --- | | USB 设备形态 | 两颗 STM32 芯片分别枚举为 `gs_usb + USB CDC串口(CDC ACM)` 复合设备 | | SocketCAN | 单块 SANPO 集成开发板通常枚举为 4 个 `canX` 接口,支持经典 CAN 和 CAN FD | | USB CDC串口协议 | 支持 `ST/ET/SF/EF/RT/AT`,可通过 `AT+RS485RAW=1` 临时开启 RS485 原始数据透传 | | SPI 模式 | `SHORT`,总线长度 23 字节 | | CAN/FDCAN 波特率 | `AT+SETFDCAN=1000000,5000000` | | CAN FD BRS | 开启 | | RS485 原始数据透传模式 | 关闭,上电默认使用 SANPO `RT` 封装帧模式 | | RS485 原始数据透传通道 | `0`,发送到全部 RS485 接口 | 如需修改 USB CDC串口/SPI 使用的 CAN/FDCAN 或 RS485 波特率参数,应通过 USB CDC串口发送 AT+ 指令,配置会写入固件Flash,下次上电无需重复配置。AT+ 控制指令通常通过串口工具发送,操作时只输入命令主体,并把发送结束符设置为 `CRLF`。与V4版本不同,USB CDC串口连接时的波特率不会同步修改 CAN/FDCAN/RS485总线的波特率。 `AT+RS485RAW=1` 用于临时开启 RS485 原始数据透传,便于宇树等第三方上位机设置设备参数。该模式不作为上电默认配置保存,重新上电后会自动恢复为非透传模式;生产通信建议使用 SANPO `RT` 封装帧。 SocketCAN 使用 Linux `ip link set canX type can ...` 配置当前运行时 CAN 参数。该配置不会写入固件Flash,设备重新上电或重新枚举后,SocketCAN 上位机应重新配置 `canX`。 如果升级后希望恢复出厂通信配置,或 固件配置区因为多次修改配置而写满,可通过 USB CDC串口发送: ```text AT+CFGERASE ``` 该命令只擦除通信配置区,不擦除批量指令数据。执行后如需使用 SPI CAN FD,应重新设置 `AT+SPIMODE=LONG`。 如需使用 SPI CAN FD,应通过 USB CDC串口发送: ```text AT+SETFDCAN=1000000,5000000 AT+SPIMODE=LONG ``` ## 注意事项 - 固件更新过程中不要断开控制电源。 - 更新前确认目标硬件版本和固件版本匹配。 - 单块 SANPO 集成开发板提供 4 路 SocketCAN 接口,在主机没有其他 SocketCAN 设备时通常显示为 `can0`、`can1`、`can2`、`can3`。`canX` 编号不保证和板上 CAN1~CAN4 的物理顺序固定一致,正式使用前应确认 `canX` 与物理 CAN 总线的对应关系。