Skip to content
FRC Article 13 min read

The roboRIO 2.0: Imaging, Setup & Managing FRC's Robot Brain

Image, set up, and wire the roboRIO 2.0 and 1.0: the roboRIO Imaging Tool workflow, microSD flashing, team number, I/O ports, power, and deploying code.

to read
13 min

to read

words
2,774

words

sections
10

sections

Every FRC robot has exactly one brain, and it's the roboRIO. It's the box that runs your team's code, reads your sensors, and tells every motor controller what to do. Before a single line of your robot code matters, the roboRIO has to be imaged with the current season's software, told what team it belongs to, wired to power, and connected to everything else on the robot. Get that setup right and the rest of the season is about your code; get it wrong and you'll spend a Saturday chasing a controller that won't connect to the Driver Station.

This guide walks through what the roboRIO is, how the 1.0 and 2.0 differ (the 2.0 boots from a microSD card, which changes how you image it), the roboRIO Imaging Tool workflow for each, how to set your team number, the full port list and what plugs into each one, how to power and wire it, deploying code, and the setup problems that trip up most teams. Every hardware detail here is checked against the WPILib docs and the NI roboRIO user manual — where something is specific to the 1.0 or the 2.0, it's called out.

What the roboRIO actually does

The roboRIO is NI's reconfigurable robotics controller, and in the FRC control system it's the "brain" that runs team-generated code commanding all the other hardware. It's not a general-purpose PC and it's not just a microcontroller — it's a real-time Linux system with an FPGA underneath, which is why it can read encoders and drive PWM outputs with hard timing guarantees while your Java, C++, or Python code runs on top.

Physically, it packs a lot of I/O into one enclosure: built-in ports for PWM, digital I/O, analog inputs, relays, CAN, plus I2C, SPI, RS232, USB, and Ethernet. Sensors and actuators plug straight in without needing extra breakout boards for the common cases. If you want the wider picture of how the roboRIO fits alongside the radio, Driver Station, and power distribution, the FRC control system explained guide maps out the whole stack.

roboRIO 1.0 vs roboRIO 2.0

There are two generations in the field, and they're software-compatible — your robot code runs the same on either. The big practical difference is the boot media, and that changes how you image them. The 1.0 has fixed internal flash; the 2.0 boots from a replaceable microSD card, so the season image gets flashed onto the card in an SD reader rather than pushed over USB.

FeatureroboRIO 1.0roboRIO 2.0
Boot storageFixed internal flashReplaceable microSD card (2 GB or larger recommended)
How you image itDirectly over USB with the roboRIO Imaging ToolFlash the .img to the microSD in an SD reader (balenaEtcher / Raspberry Pi Imager)
Team number setDuring imaging (Format Target)After imaging, via Edit Startup Settings over USB
I/O portsIdentical port layoutIdentical port layout
Robot code compatibilitySame WPILib deploySame WPILib deploy
Physical sizeLarger enclosureSmaller, lighter enclosure

The 2.0's microSD is a real advantage at competition: if an image goes bad or you want a known-good backup, you can swap in a pre-flashed card in under a minute instead of re-imaging a controller in the pit. Bring a spare, imaged card.

Imaging the roboRIO

"Imaging" writes the season's operating system and FRC software onto the controller. You do this once per season (and any time you need to recover a controller), using the roboRIO Imaging Tool that installs with the NI FRC Game Tools. The FRC software tools overview covers where the Game Tools sit relative to WPILib and the Driver Station; you need the Game Tools installed before you can image anything.

The workflow differs by generation, so follow the section that matches your hardware.

Imaging a roboRIO 1.0 (over USB)

The 1.0 is imaged directly over the USB connection — not Ethernet. WPILib is explicit that you should only image via USB and not attempt it over the network.

  1. Power the roboRIO from the robot's power distribution (it needs to be on and booted).
  2. Connect a USB Type A–to–Type B cable (the "printer" style) from your PC to the roboRIO's USB Device port.
  3. Launch the roboRIO Imaging Tool from its desktop shortcut (run it as Administrator).
  4. Select the roboRIO in the top-left pane once the tool detects it.
  5. Enter your team number in the Team Number box.
  6. Choose Format Target, select the latest available image version, and click Reformat.
  7. Wait — reformatting typically takes 3 to 10 minutes.
  8. When it finishes, reboot the roboRIO with the Reset button so the team number takes effect.

If the tool never sees your roboRIO, it's almost always the USB side: try a different cable or port, confirm the NI network adapter installed, and make sure you launched the tool as Administrator. A brand-new controller that still won't appear may need a firmware update in Safe Mode first (see below).

Imaging a roboRIO 2.0 (flash the microSD)

This is the part that surprises teams coming from the 1.0: imaging the roboRIO 2.0 directly with the roboRIO Imaging Tool is not supported. Instead you flash the season image onto the microSD card using a separate SD-card burner app on your PC, then boot the roboRIO from that card.

  1. In the roboRIO Imaging Tool, click the SD button to open the folder of SD images, and find the image file (named like FRC_roboRIO2_YEAR_VERSION.img.zip).
  2. Put your microSD card into an SD reader / microSD-to-USB adapter on your PC. Any microSD works; 2 GB or larger is recommended.
  3. Flash the image with either balenaEtcher (Flash from file → pick the image → select the card → Flash) or Raspberry Pi Imager (Choose OS → Use Custom → pick the image → select the card → Write). If Windows prompts you to format the card afterward, don't — the flashed card is already formatted correctly.
  4. Insert the flashed microSD card into the roboRIO 2.0's card slot and boot it.
  5. The team number is not set during flashing. Connect the roboRIO over USB, open the Imaging Tool, and use Edit Startup Settings to enter and apply your team number.

Because the 2.0's boot media is just a microSD card, flashing an image never risks bricking the controller — worst case you re-flash the card. Keep the image .zip handy on the machine you image from so you're not hunting for it in the pit.

Firmware vs. image

These are two different things and teams mix them up constantly. The image is the OS and FRC software that you update every season — it's what the imaging/flashing steps above install. The firmware is lower-level and lives beneath the image; it generally only needs updating on a brand-new roboRIO, is applied in Safe Mode, and isn't touched during normal operation. WPILib notes a minimum firmware (v5.0 or newer) for current tooling.

The practical rule: image every season, every roboRIO. Only worry about firmware if a new controller won't image or the tool flags an out-of-date firmware — then boot into Safe Mode (hold Reset for 5+ seconds) and update firmware before re-imaging.

Setting the team number

Your team number is how the roboRIO, radio, and Driver Station find each other. It sets the controller's mDNS name (roboRIO-TEAM-frc.local) and its static IP on the field network (10.TE.AM.2 — for team 1234 that's 10.12.34.2). If it's wrong or unset, the Driver Station simply won't connect, no matter how good your code is.

  • roboRIO 1.0: set the team number during imaging, in the Team Number box before Format Target. Reboot for it to take effect.
  • roboRIO 2.0: set it after flashing, using Edit Startup Settings in the Imaging Tool over USB.

You can re-run Edit Startup Settings any time to change the team number without a full re-image — useful if you inherit a controller from another team or a mentor's old build.

The I/O ports: what connects where

The roboRIO exposes a fixed set of ports, and the layout is the same on the 1.0 and 2.0. Here's the reference, with the standard counts from the NI roboRIO user manual and what typically plugs into each.

PortCountSignal / levelWhat connects here
PWM10 (0–9)5 V outputPWM motor controllers (Spark, Victor SP, Talon SR), servos
DIO10 (0–9)3.3 V output, 3.3 V/5 V-tolerant inputLimit switches, quadrature encoders, beam-break sensors, LEDs
Analog In4 (0–3)Single-ended, 0–5 VPotentiometers, analog gyros, pressure/analog distance sensors
Relay4 (0–3)FWD/REV, 5 V outputSpike-style relays, simple on/off actuators
CAN1 busDifferential H (yellow) / L (green)Motor controllers, PDP/PDH, Pigeon/CANcoder — daisy-chained
RSL1Switched power, limited to 120 mARobot Signal Light (required)
USB Host2 (Type A)USB camera, flash drive
USB Device1 (Type B)Imaging and tethered connection to your PC
MXP13.3 V expansionNavX and other add-on boards: extra DIO/PWM/analog, SPI, I2C, UART
microSD1Boot image on the 2.0; auxiliary storage on the 1.0

A few things worth knowing beyond the counts. CAN is a single differential bus that you daisy-chain through every CAN device — most modern FRC electronics (Falcon/Kraken motors, CTRE and REV controllers, the PDH) live on it, and it's how you get status and current data back, not just commands. If you're leaning on CAN motor controllers, the FRC CAN bus guide covers wiring order and termination. The MXP is the expansion header along the top; boards like a navX-MXP mount directly to it and borrow its DIO, SPI, and I2C lines. The RSL is not optional — it's a rules-required light that flashes when the robot is enabled, and it's driven straight off the roboRIO's RSL port.

Powering and wiring the roboRIO

The roboRIO runs off the robot's 12 V battery, fed through a dedicated, protected connection on the power distribution device. That dedicated feed matters: it keeps the controller on a stable supply separate from the big motor loads.

  • On the CTRE PDP: the roboRIO connects to the panel's dedicated fused connector.
  • On the REV PDH: install a 10 A fuse in one of the non-switchable fused channels (20–22) and run the roboRIO's power leads from there.
  • At the roboRIO: strip about 5/16" (roughly 8 mm) of the 18 AWG red and black leads, and land them in the power input connector — red to V, black to C — using a small flat screwdriver. Screw the connector down securely.

A loose or under-tightened power connector is a top cause of mysterious reboots and brownouts. After wiring, tug-test the leads and confirm all four screws on the connector are snug. Intermittent power here looks exactly like a code crash but isn't.

The Robot Signal Light wires to the RSL port with the supplied two-pin connector — the black wire goes toward the outside edge of the roboRIO. FRC requires a specific RSL (the Allen-Bradley 855PB-B12ME522 or AndyMark am-3583); it flashes when the robot is enabled and stays solid when disabled, which is a quick at-a-glance state check in the pit. Your robot radio is powered separately, usually from the Voltage Regulator Module (VRM), which supplies regulated outputs off the PDP/PDH so noisy motor current never reaches the radio. For the full robot wiring picture — battery, main breaker, PDP/PDH, and controllers — see how to wire an FRC robot.

Deploying your code

Once the roboRIO is imaged, team-numbered, and powered, deploying code is a WPILib operation, not an NI one. You write your robot program in VS Code with the WPILib extension, then use the WPILib command palette's "Deploy Robot Code" to build and push it to the controller. The deploy travels over your connection to the roboRIO — USB while tethered at the bench, or the robot radio once you're on the field network.

For the connection to work, the team number has to match on the roboRIO, and the Driver Station has to be set to the same team. If those line up, the Driver Station shows communications and robot code as green and you can enable. If you're new to the build-and-deploy loop, the FRC programming tutorial walks through your first robot project end to end, and the broader guides index collects the rest of the control-system material.

Common setup issues (and quick fixes)

  • Driver Station won't connect at all. Ninety percent of the time it's the team number — mismatched or never set on the roboRIO. Re-check it with Edit Startup Settings and confirm the Driver Station is set to the same number.
  • Imaging Tool doesn't see the roboRIO. For a 1.0, it must be over USB (not Ethernet); try another cable/port, run the tool as Administrator, and verify the NI network adapter installed with the Game Tools.
  • Trying to image a 2.0 with the Imaging Tool. It won't work — the 2.0's image goes onto the microSD via balenaEtcher or Raspberry Pi Imager, and the team number is set afterward over USB.
  • Brand-new controller won't image. It may need a firmware update first: boot into Safe Mode (hold Reset 5+ seconds) and update firmware, then re-image.
  • Team number "didn't take." On a 1.0, you must reboot with the Reset button after imaging for it to apply.
  • Random reboots / brownouts. Check the power connector first — loose leads at the roboRIO or an under-torqued connector mimic software crashes.
  • Bad or missing microSD (2.0). A corrupt image or an unseated card will fail to boot; re-flash the card and reseat it. This is exactly why a spare pre-imaged card is worth carrying.

Frequently asked questions

Can I image a roboRIO 2.0 with the roboRIO Imaging Tool like a 1.0?

No. Imaging the roboRIO 2.0 directly with the Imaging Tool is not supported. You flash the season image onto its microSD card using balenaEtcher or Raspberry Pi Imager in an SD reader, then set the team number afterward over USB with Edit Startup Settings.

Do I have to re-image the roboRIO every year?

Yes. The image contains the season's operating system and FRC software, and you update it each season on every roboRIO. Firmware is separate and usually only needs updating on a brand-new controller.

How do I set or change my team number on the roboRIO?

On a roboRIO 1.0, enter it during imaging (in the Team Number box before Format Target) and reboot. On a 2.0, or to change it later on either, use Edit Startup Settings in the Imaging Tool over USB. The number sets the controller's 10.TE.AM.2 address and mDNS name.

How many PWM and DIO ports does the roboRIO have?

Both generations have 10 PWM outputs (0–9) and 10 DIO channels (0–9), plus 4 analog inputs (0–3) and 4 relay ports (0–3). The port layout is identical on the 1.0 and 2.0.

How is the roboRIO powered?

From the 12 V battery through a dedicated protected connection: a fused connector on the CTRE PDP, or a 10 A fused channel (20–22) on the REV PDH. At the roboRIO, red lands on V and black on C in the power input connector — tighten it fully to avoid brownouts.

Why won't my Driver Station connect to the roboRIO?

Almost always a team-number problem. Confirm the roboRIO's team number (Edit Startup Settings) matches the Driver Station, and verify the physical link — USB when tethered, or the radio on the field network. A wrong or unset team number blocks communication regardless of your code.

Nail the imaging, team number, and power connection early and the roboRIO mostly disappears into the background — which is exactly what you want from a robot's brain. Keep a spare imaged microSD in the pit if you're on a 2.0, tug-test that power connector, and you've removed the setup gremlins that eat the most practice time.

Spot an error or something out of date?Create a free account to suggest an edit

Keep reading

More from the pit

Start learning FRC — free

Structured lessons and quizzes across every department. Create a free account to save your progress, track your team, and earn a certificate.

394lessons
11departments
100%free