{
  "metadata": {
    "id": "ni-roborio-2",
    "name": "NI roboRIO 2.0",
    "type": "microcontroller",
    "description": "National Instruments roboRIO 2.0 Embedded Controller for FRC. Main robot controller with PWM, DIO, CAN, I2C, SPI, Ethernet, USB, and MXP expansion.",
    "manufacturer": "National Instruments",
    "part_number": "roboRIO 2.0",
    "datasheet_url": "https://www.ni.com/docs/en-US/bundle/roborio-20-umanual/page/pinouts.html",
    "tags": [
      "FRC",
      "roboRIO",
      "NI",
      "robot controller",
      "CAN",
      "PWM",
      "Ethernet"
    ],
    "schema_version": "1.4.0",
    "version": "0.1.0",
    "taxonomy": [
      "microcontroller",
      "robotics.frc"
    ]
  },
  "domains": [
    {
      "domain": "electrical",
      "power_domains": [
        {
          "id": "12v-in",
          "name": "12V Input",
          "nominal_voltage_V": 12,
          "voltage_range_V": [
            6,
            16
          ],
          "max_current_mA": 5000
        }
      ],
      "resources": [
        {
          "id": "vin-pos",
          "name": "VIN+ (12V)",
          "functions": [
            {
              "name": "VIN+",
              "direction": "sink",
              "signal_class": "power"
            }
          ],
          "power_domain_id": "12v-in"
        },
        {
          "id": "vin-neg",
          "name": "VIN- (GND)",
          "functions": [
            {
              "name": "VIN-",
              "direction": "sink",
              "signal_class": "ground"
            }
          ],
          "power_domain_id": "12v-in"
        },
        {
          "id": "can-h",
          "name": "CAN_H",
          "functions": [
            {
              "name": "CAN_H",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "can-l",
          "name": "CAN_L",
          "functions": [
            {
              "name": "CAN_L",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "eth0",
          "name": "ETH0 (RJ45)",
          "functions": [
            {
              "name": "ETH0",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "usb-host-0",
          "name": "USB_HOST[0]",
          "functions": [
            {
              "name": "USB_HOST_0",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "usb-device",
          "name": "USB_DEVICE",
          "functions": [
            {
              "name": "USB_DEVICE",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-0-sig",
          "name": "PWM[0]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-1-sig",
          "name": "PWM[1]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-2-sig",
          "name": "PWM[2]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-3-sig",
          "name": "PWM[3]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-4-sig",
          "name": "PWM[4]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-5-sig",
          "name": "PWM[5]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-6-sig",
          "name": "PWM[6]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-7-sig",
          "name": "PWM[7]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-8-sig",
          "name": "PWM[8]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-9-sig",
          "name": "PWM[9]_SIG",
          "functions": [
            {
              "name": "PWM_SIG",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "pwm-6v",
          "name": "PWM_6V",
          "functions": [
            {
              "name": "PWM_6V",
              "direction": "source",
              "signal_class": "power"
            }
          ]
        },
        {
          "id": "pwm-gnd",
          "name": "PWM_GND",
          "functions": [
            {
              "name": "PWM_GND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        },
        {
          "id": "dio-0",
          "name": "DIO[0]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-1",
          "name": "DIO[1]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-2",
          "name": "DIO[2]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-3",
          "name": "DIO[3]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-4",
          "name": "DIO[4]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-5",
          "name": "DIO[5]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-6",
          "name": "DIO[6]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-7",
          "name": "DIO[7]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-8",
          "name": "DIO[8]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-9",
          "name": "DIO[9]",
          "functions": [
            {
              "name": "DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "dio-5v",
          "name": "DIO_5V",
          "functions": [
            {
              "name": "DIO_5V",
              "direction": "source",
              "signal_class": "power"
            }
          ]
        },
        {
          "id": "dio-gnd",
          "name": "DIO_GND",
          "functions": [
            {
              "name": "DIO_GND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        },
        {
          "id": "ai-0",
          "name": "AI[0]",
          "functions": [
            {
              "name": "AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "ai-1",
          "name": "AI[1]",
          "functions": [
            {
              "name": "AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "ai-2",
          "name": "AI[2]",
          "functions": [
            {
              "name": "AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "ai-3",
          "name": "AI[3]",
          "functions": [
            {
              "name": "AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "ai-agnd",
          "name": "AI_AGND",
          "functions": [
            {
              "name": "AI_AGND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        },
        {
          "id": "i2c-scl",
          "name": "I2C_SCL",
          "functions": [
            {
              "name": "I2C_SCL",
              "direction": "bidirectional",
              "signal_class": "clock"
            }
          ]
        },
        {
          "id": "i2c-sda",
          "name": "I2C_SDA",
          "functions": [
            {
              "name": "I2C_SDA",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "i2c-5v",
          "name": "I2C_5V",
          "functions": [
            {
              "name": "I2C_5V",
              "direction": "source",
              "signal_class": "power"
            }
          ]
        },
        {
          "id": "i2c-gnd",
          "name": "I2C_GND",
          "functions": [
            {
              "name": "I2C_GND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        },
        {
          "id": "spi-sck",
          "name": "SPI_SCK",
          "functions": [
            {
              "name": "SPI_SCK",
              "direction": "source",
              "signal_class": "clock"
            }
          ]
        },
        {
          "id": "spi-mosi",
          "name": "SPI_MOSI",
          "functions": [
            {
              "name": "SPI_MOSI",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "spi-miso",
          "name": "SPI_MISO",
          "functions": [
            {
              "name": "SPI_MISO",
              "direction": "sink",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "spi-cs0",
          "name": "SPI_CS[0]",
          "functions": [
            {
              "name": "SPI_CS",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "spi-cs1",
          "name": "SPI_CS[1]",
          "functions": [
            {
              "name": "SPI_CS",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "spi-cs2",
          "name": "SPI_CS[2]",
          "functions": [
            {
              "name": "SPI_CS",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "spi-cs3",
          "name": "SPI_CS[3]",
          "functions": [
            {
              "name": "SPI_CS",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-dio-0",
          "name": "MXP_DIO[0]",
          "functions": [
            {
              "name": "MXP_DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-dio-1",
          "name": "MXP_DIO[1]",
          "functions": [
            {
              "name": "MXP_DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-dio-2",
          "name": "MXP_DIO[2]",
          "functions": [
            {
              "name": "MXP_DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-dio-3",
          "name": "MXP_DIO[3]",
          "functions": [
            {
              "name": "MXP_DIO",
              "direction": "bidirectional",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-ai-0",
          "name": "MXP_AI[0]",
          "functions": [
            {
              "name": "MXP_AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "mxp-ai-1",
          "name": "MXP_AI[1]",
          "functions": [
            {
              "name": "MXP_AI",
              "direction": "sink",
              "signal_class": "sense"
            }
          ]
        },
        {
          "id": "mxp-uart-rx",
          "name": "MXP_UART_RX",
          "functions": [
            {
              "name": "MXP_UART_RX",
              "direction": "sink",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-uart-tx",
          "name": "MXP_UART_TX",
          "functions": [
            {
              "name": "MXP_UART_TX",
              "direction": "source",
              "signal_class": "data"
            }
          ]
        },
        {
          "id": "mxp-5v",
          "name": "MXP_5V",
          "functions": [
            {
              "name": "MXP_5V",
              "direction": "source",
              "signal_class": "power"
            }
          ]
        },
        {
          "id": "mxp-3v3",
          "name": "MXP_3V3",
          "functions": [
            {
              "name": "MXP_3V3",
              "direction": "source",
              "signal_class": "power"
            }
          ]
        },
        {
          "id": "mxp-dgnd",
          "name": "MXP_DGND",
          "functions": [
            {
              "name": "MXP_DGND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        },
        {
          "id": "mxp-agnd",
          "name": "MXP_AGND",
          "functions": [
            {
              "name": "MXP_AGND",
              "direction": "source",
              "signal_class": "ground"
            }
          ]
        }
      ],
      "interfaces": [
        {
          "id": "power-in",
          "name": "Power Input",
          "protocol": {
            "type": "power",
            "role": "sink"
          },
          "requires": [
            {
              "function": "VIN+",
              "count": 1
            },
            {
              "function": "VIN-",
              "count": 1
            }
          ],
          "max_instances": 1
        },
        {
          "id": "can-bus",
          "name": "CAN Bus",
          "protocol": {
            "type": "can",
            "role": "master"
          },
          "requires": [
            {
              "function": "CAN_H",
              "count": 1
            },
            {
              "function": "CAN_L",
              "count": 1
            }
          ],
          "max_instances": 1
        },
        {
          "id": "ethernet-0",
          "name": "Ethernet 0",
          "protocol": {
            "type": "ethernet",
            "role": "peer"
          },
          "requires": [
            {
              "function": "ETH0",
              "count": 1
            }
          ],
          "max_instances": 1
        },
        {
          "id": "pwm-output",
          "name": "PWM Output",
          "protocol": {
            "type": "digital",
            "role": "output"
          },
          "requires": [
            {
              "function": "PWM_SIG",
              "count": 1
            },
            {
              "function": "PWM_6V",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "PWM_GND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            }
          ],
          "max_instances": 10
        },
        {
          "id": "dio",
          "name": "Digital I/O",
          "protocol": {
            "type": "digital",
            "role": [
              "input",
              "output"
            ]
          },
          "requires": [
            {
              "function": "DIO",
              "count": 1
            },
            {
              "function": "DIO_5V",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "DIO_GND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            }
          ],
          "max_instances": 10
        },
        {
          "id": "analog-in",
          "name": "Analog Input",
          "protocol": {
            "type": "analog",
            "role": "input"
          },
          "requires": [
            {
              "function": "AI",
              "count": 1
            },
            {
              "function": "AI_AGND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            }
          ],
          "max_instances": 4
        },
        {
          "id": "i2c-bus",
          "name": "I2C Bus",
          "protocol": {
            "type": "i2c",
            "role": "master"
          },
          "requires": [
            {
              "function": "I2C_SCL",
              "count": 1
            },
            {
              "function": "I2C_SDA",
              "count": 1
            },
            {
              "function": "I2C_5V",
              "count": 1
            },
            {
              "function": "I2C_GND",
              "count": 1
            }
          ],
          "max_instances": 1
        },
        {
          "id": "spi-bus",
          "name": "SPI Bus",
          "protocol": {
            "type": "spi",
            "role": "master"
          },
          "requires": [
            {
              "function": "SPI_SCK",
              "count": 1
            },
            {
              "function": "SPI_MOSI",
              "count": 1
            },
            {
              "function": "SPI_MISO",
              "count": 1
            },
            {
              "function": "SPI_CS",
              "count": 1
            }
          ],
          "max_instances": 4
        },
        {
          "id": "mxp-expansion",
          "name": "MXP Expansion",
          "protocol": {
            "type": "custom",
            "role": "peer"
          },
          "requires": [
            {
              "function": "MXP_DIO",
              "count": 1
            },
            {
              "function": "MXP_5V",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            },
            {
              "function": "MXP_DGND",
              "count": 1,
              "shareable_with": [
                "all"
              ]
            }
          ],
          "max_instances": 4
        }
      ]
    }
  ],
  "node_geometry": {
    "xScale": 1,
    "yScale": 2,
    "outline": {
      "preset": "rounded_rectangle"
    }
  }
}