# RS485 透传模式 RS485 透传模式直接传送设备原始字节。4路 USB串口 对应4路独立的 RS485 总线通道。 ## USB 串口和对应关系 接入开发板USB,会显示6个串口:分别为 2 个SANPO Studio管理口,4 个 RS485 独立串口。Windows 和 Linux 均免驱动。 Windows下4个RS485透传串口统一显示为 `SANPO USB2RS485 Port`,Linux下为 `/dev/ttyACM*`。操作系统分配的端口号不保证与开发板丝印顺序一致。首次使用时请一次只连接或测试一路电机,确认每个端口与物理 RS485-1/2/3/4 的对应关系。 ## 数据收发 打开目标 RS485 独立串口,并设置与电机一致的波特率、停止位和校验位。随后发送的每个字节都会直接进入该路 RS485,设备反馈也会从同一个串口原样返回,可以直接使用串口助手软件、Python `pyserial` 或电机原厂串口上位机。 例如,宇树 GO-M8010 常用 4 Mbps、8-N-1。在十六进制发送模式下可以发送: ```text FE EE 11 00 00 00 00 00 00 00 00 00 00 00 00 18 7C ``` 正常反馈通常以 `FD EE` 开头,具体字段和校验应以电机厂家协议为准。 ## 串口参数 独立串口支持 `2400`~`4000000`,`5000000`,`6000000`,`7500000` bit/s、1 或 2 个停止位、无/奇/偶校验和 8 个数据位。打开端口时,操作系统设置的串口参数会在运行时应用到对应的一路 RS485。 ### 字节流和长度 USB CDC 与 RS485 都按字节流工作。一次 `write()` 可能被 USB 分成多个数据包,一次 `read()` 也可能得到半帧或多帧。开发板固件不会增加、删除或解释电机协议字节,上位机应根据电机协议的帧头、长度和校验持续组帧。 开发板固件按 RS485 空闲事件提交接收数据,一次连续接收块最多 96 字节;更长的数据流会分块返回。 ## Python 示例 安装 `pyserial` 后,可以按照 [RS485 原始透传使用说明](https://gitcode.com/sanpo/robot/blob/main/products/spine/v8/demo/guides/native-rs485-v8.md)查看端口并发送原始十六进制数据: ```bash python -m pip install pyserial python native_rs485_v8.py --list python native_rs485_v8.py COM8 --baudrate 4000000 --data FEEE11000000000000000000000000187C ``` Linux 下把 `COM8` 替换为实际的 `/dev/ttyACM*`。程序不会增加 SANPO 报文头或 Channel。 宇树 GO-M8010 运动示例见[独立 USB2RS485 控制宇树 GM8010](https://gitcode.com/sanpo/robot/blob/main/products/spine/v8/demo/guides/native-unitree-gm8010.md)。该程序只有明确增加 `--enable-motion` 后才发送控制命令;首次运行必须空载、小幅测试并保留物理急停手段。 ## 串口助手或电机上位机 在串口助手或支持标准串口的电机上位机中选择 `SANPO USB2RS485 Port`,设置与设备一致的串口参数,并以十六进制模式直接收发设备原始协议帧。不要选择 `SANPO Studio Management Port`,也不要添加 `RT`、Channel 或其他 SANPO 报文头。 ## 常见问题 | 现象 | 处理方法 | | --- | --- | | 电脑出现 6 个串口 | 正常:2个管理口,每个对应一颗STM32 MCU;4个独立RS485透传口,对应4路独立的RS485通道 | | 独立串口发送后没有反馈 | 检查端口对应关系、串口参数、设备 ID、A/B 接线和供电 | | 独立串口返回 `52 54` | 选到了管理口;RS485 独立串口只返回原始数据 | | 返回乱码或长度异常 | 检查波特率、停止位、校验位、数据位和 A/B 接线,并按电机协议处理分包 | | 同一路数据偶发交错 | 确认没有同时通过独立串口、管理口、SPI 或离线任务发送 |