LEGO USB IR tower (RIS 2.0)
Status: ⚠️ protocol documented — not device-tested
The LEGO USB IR tower is LEGO's own sanctioned way to program the Micro Scout's P slot, and the standard link for the RCX. It emits VLL on a dedicated visible-red LED.
Per LEGO customer service: filling the Micro Scout P program over VLL "requires… Robotic Invention System 2.0 with the USB IR tower" — see LEGO FAQ — P program & IR tower.
Why it matters
- The tower programs the Micro Scout's P slot over VLL — emitted on its red VLL LED (visible red), per the official spec below. So the tower precedent shows VLL works, not that the sensor sees IR. (IR sensitivity is confirmed separately, on-device → Micro Scout; the tower's ~940 nm IR LED is for the RCX serial link.)
- For the RCX it's a full two-way serial link → RCX IR protocol.
Variants
- Serial tower (DB9, 2400 baud) — used by LegoRcxPy.
- USB tower — the RIS 2.0 one referenced by LEGO; works with NQC · BrickCC / legousbtower drivers.
Emitting VLL — fully documented (updated 2026) ✅
Correction to earlier "Windows-locked" verdict: the whole VLL-mode protocol is in the official LEGO USB Tower Interface Reference (1999–2000) — no reverse-engineering needed.
- The tower is a vendor-specific USB device (two interrupt endpoints; EP2 = host→device), driven by USB vendor control requests.
SET_PARM(bmRequest 0x02) withLTW_PARM_MODE(0x01) =LTW_MODE_VLL(0x01) → switches the tower to VLL mode (wValue = 0x0101,wIndex = 0).- Then write the 7-bit VLL code byte to the host→device endpoint; the tower clocks the VLL waveform itself (VLL speed is fixed in firmware).
- VLL goes out on a dedicated red LED (
LTW_LED_VLL= "the red led, normally used to carry out VLL communications") — visible red, not IR.
So on macOS / Linux / any desktop via pyusb / libusb: open the tower (VID 0x0694), send the SET_PARM→VLL control transfer, write the code byte. The only physical extra is a clear optical tube (tapered hollow LEGO pegs) to funnel the output into the Micro Scout's sensor.
WinVLL is simply the Windows app that does this (WinVLL); it also offers a no-tower "WinVLL Probe" LED driven from the sound-card output. The open Linux legousbtower driver is raw read/write (RCX-oriented), so a Mac route uses pyusb + the documented vendor requests directly.
Best for
Authentic, period-correct programming — now actually doable cross-platform. The LED routes (FTDI DTR + LED, Arduino · ESP32 + LED, Powered Up hub (Pybricks VLL)) are still simpler if you don't have a tower + tube — see VLL emitters — options & status.
Links
- WinVLL — Windows app that drives the tower (and a no-tower "WinVLL Probe" LED via sound-card output)