# RS485 Raw Passthrough Raw passthrough is intended for sending RS485 data without a SANPO wrapper. After RAW replies are enabled, device commands from the PC are sent unchanged to RS485 and bus feedback is returned unchanged without a SANPO `RT` header. > Raw passthrough is not hardware-optimized. After the host finishes one command, leave at least 3 ms with no data before the next command; 5 ms is recommended. For continuous high-rate real-time control, use the wrapped [SANPO USB to RS485](usb_rs485) protocol. This delay is independent of the RS485 bitrate. ## Connection and Communication Settings A complete board normally exposes two USB serial ports. Each port belongs to one MCU and its two RS485 interfaces. `COM` or `/dev/ttyACM*` numbering may not follow board silkscreen order. For first use, connect one device to identify the correct port. V6 defaults to 4 Mbps, one stop bit, no parity, and eight data bits. The bitrate selected in a USB serial application does not change RS485 bus settings. Configure the bus with: ```text AT+SETRS485=,,, ``` See [Communication Settings](baudrate_config) for supported values. ## Enable Raw Replies Send this as text with a `CRLF` line ending: ```text AT+RS485RAW=1 ``` Success returns: ```text OK ``` You can then close the configuration program and open the same port in the host application that sends raw data. RAW mode remains active while the board stays powered, but it is disabled after a power cycle. After testing, disable RAW replies with: ```text AT+RS485RAW=0 ``` RS485 feedback then returns in the SANPO `RT` format with a Channel field. ## Select the Target Interface Raw data has no Channel field, so select the target before passthrough: ```text AT+RS485RAWCH=<0~4> ``` | Value | Target controlled by the current USB serial port | | --- | --- | | `0` | Both RS485 interfaces on the current MCU | | `1` or `3` | First RS485 interface on the current MCU | | `2` or `4` | Second RS485 interface on the current MCU | Query the current target: ```text AT+RS485RAWCH? ``` Select only the first interface: ```text AT+RS485RAWCH=1 ``` The target Channel is saved to Flash. `AT+RS485RAW=1` itself is not saved, so RAW replies remain disabled after a power cycle. ## Unitree GO-M8010 Test After enabling RAW replies and selecting the correct channel, send this raw motor command in hexadecimal mode: ```text FE EE 11 00 00 00 00 00 00 00 00 00 00 00 00 18 7C ``` A normal reply begins with `FD EE`. Decode fields and checksum according to the motor manufacturer's protocol. Do not add a SANPO `RT` header and do not let the serial application append `0D 0A` to raw binary data. ## Limitations - RAW replies do not contain Channel. If both RS485 devices reply at once, the host cannot identify the source from the reply alone. - Prefer selecting one interface with `AT+RS485RAWCH`. To manage both interfaces, use [SANPO USB to RS485](usb_rs485). - Firmware separates received blocks based on serial idle time. The host must still parse the device protocol header, length, and checksum. - One continuous receive block retains at most 96 bytes. The host must reassemble longer protocols. ## Troubleshooting | Symptom | Action | | --- | --- | | The host transmits but cannot parse replies | Confirm `AT+RS485RAW=1` and the correct USB serial port | | Both interfaces receive the command | `AT+RS485RAWCH` is `0`; select a specific channel | | Replies begin with `52 54` | SANPO `RT` replies are still active; enable RAW replies | | Corrupted data or unexpected length | Check bitrate, stop bits, parity, data bits, and A/B wiring | | `RT` replies return after power-up | This is expected; send `AT+RS485RAW=1` again after each power cycle |