The Metro M4 Express AirLift is chock-full of microcontroller goodness. There's also a lot of pins and ports. We'll take you a tour of them now!

Power Connections

There's a lot of ways to power the Metro M4 Express AirLift, and a lot of ways to get power out as well.

There are two primary ways to power the Metro:

  • Through the Micro USB port up at the top left
  • Through the DC jack at the bottom left

The MicroUSB jack provides 5V at 500mA or so, there is a fuse that will shut off temporarily when more than 1000mA is drawn, this is to protect a computer USB port. You can plug this into any computer or USB charger with a USB cable. You can draw  up to 500mA between the Vin, 5V and 3.3V supplies (combined).

The DC Jack is a 5.5mm/2.1mm center-positive DC connector, which is the most common available. Provide about 6V-12V here to power the Metro. There is no fuse on this connection so you can draw more current, up to 800mA between the 5V and 3.3V supplies, and 2A from Vin.

Onboard regulators take the USB or DC power and linearly convert it to 3.3V and 5V:

  • 3V - this is the output from the 3.3V regulator, it can supply 500mA peak
  • 5V - this is the output from the 5V regulator (when DC jack is used), or from USB. It can supply ~500mA peak from USB and ~800mA peak from DC
  • GND - this is the common ground for all power and logic
  • Vin - this is the higher of the DC jack or USB voltage. So if the DC jack is plugged in and 9V, Vin is 9V. If only USB connected, this will be 5V.

There is also an on/off switch. This switch is only for the DC jack and does not affect powering via USB

ESP32 WiFi Co-Processor

The WiFi capability uses an Espressif ESP32 Wi-Fi coprocessor with TLS/SSL support built-in.

The ESP32 uses the main SPI port for data, and also uses a CS pin (board.ESP_CS or Arduino SPIWIFI_SS or 36), Ready/Busy pin (board.ESP_BUSY or Arduino SPIWIFI_ACK or 37), and reset pin (board.ESP_RESET or Arduino SPIWIFI_RESET or 38)

  • For advanced use or reprogramming, we also connect the main RX/TX UART to the ESP32 - on Arduino that's Serial2 and in CircuitPython use board.ESP_RX and board.ESP_TX.  This is a unique/unshared Serial port that is not the same as the RX/TX pins on the Metro breakout pins.
  • You can also connect to the ESP32 RTS pin (used in some serial contexts) on board.ESP_RTS or Arduino 34.
  • The ESP32 GPIO0 pin for bootloader enable is connected to board.ESP_GPIO0 or Arduino ESP32_GPIO0 or 35

Logic pins

This is the general purpose I/O pin set for the microcontroller.
All logic is 3.3V
All of the pins except SCL can do PWM output (A0 has true analog output instead)
All pins can be interrupt inputs

Top Row

  • #0 / RX - GPIO #0, also receive (input) pin for Serial1 (hardware UART)
  • #1 / TX - GPIO #1, also transmit (output) pin for Serial1
  • #2 through #12 - These are general purpose GPIO
  • #13 - GPIO #13 and is connected to the red LED marked L next to the USB jack.
  • SDA - the I2C (Wire) data pin. There's a 10K pull up on this pin to 3V already installed
  • SCL - the I2C (Wire) clock pin. There's a 10K pull up on this pin to 3V already installed

Bottom Row

  • A0 - This pin is analog input  A0 but is also an analog output due to having a DAC (digital-to-analog converter). This is the first DAC, and is 'independent' of A1. You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output
  • A1 - This pin is analog input  A1 but is also an analog output due to having a DAC (digital-to-analog converter). This is the second DAC, and is 'independent' of A0. You can set the raw voltage to anything from 0 to 3.3V, unlike PWM outputs this is a true analog output
  • A2 thru A5 - These are each analog input as well as digital I/O pins.

Please note, A3 functions as expected but happens to be a different microcontroller pin than the one on the Metro M4 non-WiFi version. This shouldn't affect you but if you're doing something special with that pin, like a timer or SERCOM config, check the schematic for the underlying hardware pin name

Right side

  • SCK/MOSI/MISO - These are the hardware SPI pins, are are connected to the 2x3 header on the right hand side. These are also used by the ESP32 so they should not be used for anything but SPI connectivity - not for GPIO.

Additional analog inputs

In addition to the A0-A5 pins, there are extra analog inputs available. There's not a ton because we ended up going with prioritizing the PCC camera peripheral pins rather than try to stuff as many analog inputs as possible

  • SDA is also A6
  • SCL is also A7

These pins are available in CircuitPython under the board module. Names that start with # are prefixed with D and other names are as is. So #0 / RX above is available as board.D0 and board.RX for example.

I2S Peripheral

For quality audio input and output, there is an I2S peripheral available on select pins. Those pins cannot be changed! These use I2S device 0 and clock generator 3

  • Pin 8 - SDO (data out)
  • Pin 1 - SDI (data in)
  • Pin 3 - Bit Clock
  • Pin 9 - Word Select
  • Pin 2 - Master Clock (not used by our libraries but it is available)

Parallel Capture Peripheral

There's a 'camera' input peripheral you can use with some camera chips to capture video with 10-bit data width. We thought this was neat so we made sure all those pins were available. Here are the PCC pins (left) and the Metro M4 Express AirLift pins it's mapped to. Unlike other peripherals, you cannot mux these signals to other pins!

  • DEN1: MOSI
  • DEN2: SCK
  • D0: D13
  • D1: D12
  • D2: D10
  • D3: D11
  • D4: D9
  • D5: D8
  • D6: D1
  • D7: D0
  • D8: D5
  • D9: D6

QSPI Flash and NeoPixel

As part of the 'Express' series of boards, the Metro M4 Express AirLift is designed for use with CircuitPython. To make that easy, we have added two extra parts to this Metro AirLift: a mini NeoPixel (RGB LED) and a 2 MB QSPI (Quad SPI) Flash chip

The NeoPixel is connected to pin #40 in Arduino, so just use our NeoPixel library and set it up as a single-LED strand on pin 40. In CircuitPython, the NeoPixel is board.NEOPIXEL and the library for it is here and in the bundle. The NeoPixel is powered by the 3.3V power supply but that hasn't shown to make a big difference in brightness or color. The NeoPixel is also used by the bootloader to let you know if the device has enumerated correctly (green) or USB failure (red). In CircuitPython, the LED is used to indicate the runtime status.

The QSPI Flash is connected to 6 pins that are not brought out on the GPIO pads. This way you don't have to worry about the SPI flash colliding with other devices on the main SPI connection.

QSPI is neat because it allows you to have 4 data in/out lines instead of just SPI's single line in and single line out. This means that QSPI is at least 4 times faster. But in reality is at least 10x faster because you can clock the QSPI peripheral much faster than a plain SPI peripheral

However, the QSPI port is not also on an SERCOM. So, you have to either use the QSPI peripheral or bitbang SPI if you want to talk to the chip. We have an Arduino library here which provides QSPI interfacing for Arduino. In CircuitPython, the QSPI flash is used natively by the interpretter and is read-only to user code, instead the Flash just shows up as the writeable disk drive!

Other Pins!

  • RST - this is the Reset pin, tie to ground to manually reset the ATSAMD51, as well as launch the bootloader manually
  • ARef - the analog reference pin. Normally the reference voltage is the same as the chip logic voltage (3.3V) but if you need an alternative analog reference, connect it to this pin and select the external AREF in your firmware. Can't go higher than 3.3V!
On the Metro M4 Express AirLift, at least for now, AREF is tied to 3.3V due to a silicon v0 bug that does not allow the DACs to work unless AREF is connected to 3.3V. You cut the top jumper next to the balloons logo if you need a different AREF voltage but note that this may change DAC range!

Debug Interface

If you'd like to do more advanced development, trace-debugging, or not use the bootloader, we have the SWD interface exposed.


You can use any 2x5 0.05" pitch SWD interface to connect. We suggest a J-Link, its supported by every IDE/software that can program the ATSAMD51.

SEGGER J-Link JTAG/SWD Debugger brick and JTAG cable
The SEGGER J-Link BASE is identical to the cheaper J-Link EDU model except for the terms of...
SEGGER J-Link Mini, compact JTAG/SWD Debugger
Doing some serious development on any ARM-based platform, and tired of 'printf' plus an LED to debug? A proper JTAG/SWD HW debugger can make debugging more of a pleasure and...

You'll need an adapter and cable to convert the 2x10 JTAG cable to SWD

10-pin 2x5 Socket-Socket 1.27mm IDC Cable
These little cables are handy when programming or debugging a tiny board that uses 10-pin 1.27mm (0.05") pitch SWD programming connectors. We see these connectors often on ARM...
JTAG (2x10 2.54mm) to SWD (2x5 1.27mm) Cable Adapter Board
This adapter board is designed for adapting a 'classic' 2x10 (0.1"/2.54mm pitch) JTAG cable to a slimmer 2x5 (0.05"/1.27mm pitch) SWD Cable.  It's helpful...

This guide was first published on May 12, 2019. It was last updated on Jul 17, 2024.

This page (Pinouts) was last updated on Mar 08, 2024.

Text editor powered by tinymce.