chipKIT® Development Platform

Inspired by Arduino™

Last edit: 2021-03-21 22:34 by Majenko


Majenko Technologies UltraNano
Controller PIC32MX250F128B-50
Flash 128KB
Speed 48MHz
Designer Majenko Technologies
Product Page Github
User Guide TBD
Schematic Github
Board Files Github
Bootloader HEX Github
Purchase From TBD

The Majenko Technologies UltraNano is probably the smallest, and yet one of the most handy, PIC32 development boards available, especially if you are doing anything that requires a USB interface to a PC. Flexible IO options, and built-in USB connector and incredibly small size make this ideal for developing small USB dongles and interfaces.

  1. The Board Design

    1. Useful Board Pins

      1. LEDs

      2. Pin Layout

      3. Analog Inputs

      4. Serial Objects

      5. I2C

      6. SPI

      7. Bootloader Button

  2. Bootloading

The Board Design

  • PIC32MX250F128B-50I/ML microcontroller, which includes 128KB Flash and 32K RAM
  • Supported as development target from within MPIDE and UECIDE
  • 13 I/O pins (plus 2 on-board functions)
  • CPU runs at 48MHz
  • Built-in USB A "Tongue" connector
  • Two buttons: RESET for resetting the board, and PROG for getting into bootloader mode and user application use
  • USB bootloader pre-programmed at the factory – no other hardware needed to program board

Useful Board Pins


PIN_LED1 is on its own distinct IO pin so it doesn't conflict with any of the normal IO pins.

Pin Layout

The pins are numbered throughout the main header starting from 0 and arranged in a zig-zag pattern. VIN is a separate pin by itself. Functions in bold are the recommended primary use for the pin (excepting GPIO and analog).

Extra Functions Ana Pin Ana Functions
VIN style="text-align: right;" GNDThis pin is not a controllable IO pin but is still included in the pin numbering 0 1
rowspan="9" style="text-align: right;" RB0, PWM, UART2 TX style="text-align: center;" A0
style="background-color: #88ee88; text-align: right;" RB14, SPI SCK 4 5 style="text-align: center;"
style="background-color: #88ee88; text-align: right;" RB1, SPI SDI (MISO) style="text-align: center;" A3 6 7
style="text-align: right;" RB15, SPI2 SCK style="text-align: center;" A4 8 9
style="text-align: right;" RESET 10 11
style="background-color: #ee8888; text-align: right;" RB8, I2C SCL, SPI2 SDO 12 13
style="text-align: right;" RA1, UART2 RX, PWM style="text-align: center;" A5 14 15
colspan="6" style="background-color: #888888;"
style="text-align: right;" RB13, LED, PWMThis pin has no external connection on the board 16 17

Analog Inputs

Analog Input Digital Pin
A0 2
A1 3
A2 5
A3 6
A4 8
A5 14
A6 15

Serial Objects

Serial Object UART TX Pin RX Pin
Serial style="text-align: center;" USB colspan="2" style="text-align: center;"
Serial0 style="text-align: center;" UART1 style="text-align: center;"
Serial1 style="text-align: center;" UART2 style="text-align: center;"


Channel SCL (Clock) SDA (Data)
DTWI0 / Wire 12 13
DTWI1 3 5


Channel SCK (Clock) SDO (MOSI) SDI (MISO)
DSPI0 / SPI 4 5 6
DSPI1 8 12 11

Bootloader Button

Bootloader Button (PROG) is on its own separate IO pin, and you can use the constant PIN_BTN1 in your sketch to read this button. Note that there is no pullup or pulldown resistor on this button, so the use of pinMode(PIN_BTN1, INPUT_PULLUP); is required.


When you want to upload a new sketch to the UltraNano board, you need to put it into bootloader mode. This is done by holding down the PROG button while pressing and releasing the RESET button, then releasing the PROG button. This will reset the UltraNano, and engage the bootloader, which will create a virtual serial port over USB, and wait for MPIDE/UECIDE/Arduino to upload a new sketch. You can also trigger the bootloader from within your sketch.