BOM: second WT61 on a CP2102 at 115200/100 Hz; it speaks the register protocol; no PL2303 driver in JetPack
/ crosscheck (push) Successful in 0s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
2026-10-14 00:15:19 +09:00
parent 47ba62bb17
commit 43a2b8bf0b
+14 -5
View File
@@ -132,7 +132,7 @@ All ports are taken.
| **Purpose** | Motion data for the recordings: longitudinal and lateral g, yaw rate, road grade | | **Purpose** | Motion data for the recordings: longitudinal and lateral g, yaw rate, road grade |
| **Interface** | TTL UART on the 40-pin header: **UART1, `/dev/ttyTHS1`** (free: no console or getty on it). The header I²C stays free for other sensors | | **Interface** | TTL UART on the 40-pin header: **UART1, `/dev/ttyTHS1`** (free: no console or getty on it). The header I²C stays free for other sensors |
| **Protocol** | 11-byte packets, `0x55` header: accel `0x51`, gyro `0x52`, angle `0x53`, each three int16 values + temperature + checksum. Reference: smart-serow `arduino/IMU.md` | | **Protocol** | 11-byte packets, `0x55` header: accel `0x51`, gyro `0x52`, angle `0x53`, each three int16 values + temperature + checksum. Reference: smart-serow `arduino/IMU.md` |
| **Rate** | Planned 115200 baud / 100 Hz (factory default) | | **Rate** | **115200 baud / 100 Hz**, set 2026-10-14 on the second module (it came at 9600 / 10 Hz); 100 packets/s of each type, no checksum errors |
| **Power** | 3.3 V from header pin 1. Datasheet v24-0429: 3.3–5.5 V, **5 mA** working (5 V), 39 µA asleep; data valid ~1 s after power-up | | **Power** | 3.3 V from header pin 1. Datasheet v24-0429: 3.3–5.5 V, **5 mA** working (5 V), 39 µA asleep; data valid ~1 s after power-up |
| **Range** | ±16 g, ±2000 °/s; roll and yaw ±180°, pitch ±90°. No magnetometer | | **Range** | ±16 g, ±2000 °/s; roll and yaw ±180°, pitch ±90°. No magnetometer |
| **Datasheet** | v24-0429: `/mnt/wdelem/dropzone/WT61-datasheet-240429.pdf`. Older: `~/infra/kb/inbox/engineer/raw/WT61_Datasheet.pdf` (raw, not yet in the KB) | | **Datasheet** | v24-0429: `/mnt/wdelem/dropzone/WT61-datasheet-240429.pdf`. Older: `~/infra/kb/inbox/engineer/raw/WT61_Datasheet.pdf` (raw, not yet in the KB) |
@@ -166,11 +166,20 @@ Header facts (carrier board spec SP-11324-001 v1.3, Table 3-3 and 5-3; raw copy
"TTL level", so if it is ever fed 5 V, first check that its idle TX reads ~3.3 V. "TTL level", so if it is ever fed 5 V, first check that its idle TX reads ~3.3 V.
- Power comes from the header's 3.3 V supply pin (1 or 17), a regulated rail on the carrier board. Not from a GPIO: a GPIO pin is a signal - Power comes from the header's 3.3 V supply pin (1 or 17), a regulated rail on the carrier board. Not from a GPIO: a GPIO pin is a signal
and is not meant to power anything. and is not meant to power anything.
- The module stores its baud rate and output rate in flash. Leaving smart-serow it is set to **9600 baud / 20 Hz**. The reader opens at 9600, - **The second module (2026-10-14) speaks WitMotion's newer register protocol, not the 3-byte commands** in smart-serow's `IMU.md`:
sends `FF AA 63` (115200 / 100 Hz), and reopens at 115200. Commands at the wrong baud are ignored, so configuring on every start is safe. it ignored `FF AA 63`. It came at 9600 baud / 10 Hz (a rate the datasheet does not list). Commands are 5 bytes,
- Mounting mode: `FF AA 65` flat, `FF AA 66` upright. Set it once the car mounting is known. `FF AA <register> <low> <high>`, each run as **unlock `FF AA 69 88 B5`, the write, save `FF AA 00 00 00`**, all at the module's
current baud. Done on the car Orin, checking after each step:
1. at 9600: unlock, `FF AA 04 06 00` (BAUD = 6, 115200), save → it answered at 115200 at once, still 10 Hz;
2. at 115200: unlock, `FF AA 03 09 00` (RRATE = 9, 100 Hz), save → 100 packets/s of each type.
Stored in the module's flash. Back to 9600: BAUD = 2. The register map is WitMotion's general one (its "WT61 Protocol" document, linked
from the datasheet, is not in the KB); confirmed here only by the module's behaviour.
- Mounting mode (`FF AA 65` / `66` on the old protocol): not needed; the reader rotates into the car's frame itself.
- Do not zero the accelerometer at startup the way smart-serow's `imu_calibrate()` does: that removes gravity, which tilt and grade need. - Do not zero the accelerometer at startup the way smart-serow's `imu_calibrate()` does: that removes gravity, which tilt and grade need.
- The user needs the `dialout` group to open `/dev/ttyTHS1`. - The serial device belongs to `dialout` (the header's `/dev/ttyTHS1` and USB adapters alike); a service gets it with
`SupplementaryGroups=dialout`, not by adding users to the group.
- **USB-UART adapter:** JetPack's kernel has drivers for CP210x and FTDI only (no PL2303, no CH341). In use: a CP2102 (`10c4:ea60`,
generic serial `0001`, so it can only be told apart by port). A PL2303GC (`067b:23a3`) enumerates but gets no driver.
- The temperature field is the chip's own temperature, not the air's: `raw / 340 + 36.53` °C per the datasheet (smart-serow's `IMU.md` - The temperature field is the chip's own temperature, not the air's: `raw / 340 + 36.53` °C per the datasheet (smart-serow's `IMU.md`
says 36.25). says 36.25).
- **The gyro zeroes itself at power-up**, and yaw resets to 0. The module must be still while it powers up; it is, if it powers with the - **The gyro zeroes itself at power-up**, and yaw resets to 0. The module must be still while it powers up; it is, if it powers with the