Getting Started with Portenta Max Carrier and Portenta X8

Get started with your Portenta Max Carrier and Portenta X8


Using the Portenta X8 with the Portenta Max Carrier enables a large suite of peripherals and features. With the Portenta X8 it is possible to use Linux containers and Python® scripts, it is also possible to use the M4 core on the board to interface with the Portenta Max Carrier. In this tutorial we will focus on the peripherals and features that are available to us.


The goals of this project are:

  • Learn how to connect the Portenta X8 and Portenta Max Carrier
  • Learn about the Portenta Max Carrier's headers, peripherals and connectors

Required Hardware and Software

The Portenta Max Carrier

The Arduino® Portenta Max Carrier was designed to add capabilities to the Arduino® Portenta X8 board and provide easy access to its onboard peripherals. It is designed to enable research and development of industrial-grade advanced applications, from fast prototyping to deployable robust single-board computers.

To make use of the Portenta Max Carrier you will need to power it through either the barrel jack connector or with a 3.7V 18650 Li-Ion battery, connected to the Portenta Max Carriers battery clips.

FunctionSupported on the Portenta X8 M4 CoreSupported on Portenta X8's NXP® i.MX 8M Mini Processor
USB HostUSB 1.0USB 2.0
EthernetFast Ethernet1 Gbps
Mini PCIe (USB)USB 1.0USB 2.0
Mini PCIe (PCIe)NoPCIe 2.0
Battery ChargerYesYes
LoRa®Yes (additional software required)Yes (additional software required)
NBIoT/CatM1/2GYes (additional software required)Yes (additional software required)
CameraNoMIPI up to 4 lanes
on board JTAG debuggingYesNo
on board console to USBYesYes
on board bus sniffingLimitedLimited



The Portenta Max Carrier equips two different memory units onboard, a flash memory and a mini SD card slot. The Flash memory onboard the Portenta Max Carrier has 2 MB of storage via QSPI. The Mini SD card interface makes it possible to extend the storage size. It can be used to process log data, from sensors or programmed on-board computer registry.

If you have an SD card connected to the Max Carrier you can create a directory on the SD card by using the following command:

1mkdir -p /tmp/sdcard

Audio Interfaces

The Portenta Max Carrier features the CS42L52 from Cirrus Logic®, a stereo CODEC. The CS42L52 is a 24-bit, low-power stereo CODEC that can provide up to 1W per channel of Class D stereo/mono amplification to external speakers or enough power to drive 44mW per channel into stereo headphones. There are four analog audio interfaces on the Portenta Max Carrier, these are marked in the image below.

Audio connections on the Portenta Max Carrier

To use this feature with Linux, you could use something like the alsa-lib. You can run it with this command:

1apk update && apk add alsa-utils alsa-utils-doc alsa-lib alsaconf alsa-ucm-conf && speaker-test -t sine -f 440 -c 2 -r 48000 -D hw:0,0


GSM Modem

The Portenta Max Carrier carries a cellular modem SARA-R412M-02B to carry out tasks requiring general network connectivity. This cellular modem is capable of establishing 2G / Cat-M1 / NB-IoT connections globally. It is powered by a bidirectional logic level shifter SN74LVC1T45 and an internal regulator, implemented for the use of SIM cards and I/O. The cellular modem requires a SIM card and an antenna connected to the SMA connector.

LoRa® and GSM peripherals on the Max Carrier

If you want to use this feature with Python® scripts, have a look at the Modem Manager API.


One of the many features of the Portenta Max Carrier is the Murata CMWX1ZZABZ-078 which enables LoRaWAN® connectivity. LoRaWAN® is a Low Power Wide Area Network (LPWAN) designed to connect low-power devices to the Internet. It was developed to meet and fulfill Internet of Things (IoT) devices' requirements, such as low-power consumption and low data throughput.

The appropriate antenna and frequencies depend on the region. The common frequencies are 915 MHz for North America and Australia and 863 MHz for the European region. Frequencies are on a range, so for example in the Australia region it is possible to use a 928 MHz compatible antenna and configuration.

For more in-depth information about LoRa® and LoRaWAN®, please read The Arduino Guide to LoRa® and LoRaWAN®.


The Gigabit Ethernet physical interface is directly connected to the high-density connector to the Portenta X8 board. The connector includes an LED for indicating activity using the color orange, there is also a LED using the color green to indicate speed.

To access the 1 Gbps connection Ethernet peripheral on the Max Carrier you can use the following command:

1ETH_1G=`dmesg | grep "fec 30be0000.ethernet eth0: Link is Up - 1Gbps/Full"`



The Portenta Max Carrier and the Portenta X8 are connected with High Density connectors. The illustration below shows how to correctly connect the Portenta X8 and Portenta Max Carrier.

Connecting the Portenta X8 and Portenta Max Carrier

Setting up Portenta X8

If you wish to use the Portenta X8 and Max Carrier with the Arduino IDE, please follow our Uploading sketches to Arduino Portenta X8 tutorial. Also, make sure that you have the latest version of the Portenta Core installed. Go to Tools > Boards > board manager... and search for Arduino Mbed OS Portenta boards. When this is installed and your Portenta X8 board is connected to the computer, the board should be assigned a port in the Arduino IDE.

If you want to use the Portenta X8 and Max Carrier with a FoundriesFactory, Python® scripts and Linux containers, Please take a look at our Portenta X8 User Manual. You may also find our tutorial on how to manage dockers on the Portenta X8 useful.

Quick Reference Tables for the Portenta Max Carrier

Peripheral Table

LoRa® Header
1+3V3Power+3V3 Power Rail
2LoRa_SWDIODigitalLoRa® SWD Data Line
3, 5, 9GNDPowerGround
6 ~ 8NCNCNot Connected
4LoRa_SWCLKDigitalLoRa® SWD Clock Line
10LORA_RSTDigitalLoRa® module reset pin
Debug Header
13V3_DBGPower+3V3 Power Rail
2DBG_SWDIODigitalSWD Data Line
3, 5, 9GNDPowerGround
4DBG_SWCLKDigitalSWD Clock Line
6 ~ 8NCNCNot Connected
10RSTDigitalReset Pin
JTAG Header
13V3Power+3V3 Power Rail
2JTAG_SWDDigitalJTAG SWD Data Line
3, 5GNDPowerGround
4JTAG_SCKDigitalJTAG Clock Line
6JTAG_SWODigitalJTAG Trace Data Line
7NCNCNot Connected
8JTAG_TDIDigitalJTAG Test Data In Line
9JTAG_TRSTDigitalJTAG Test Reset Line
10JTAG_RSTDigitalJTAG Reset Line
Header Connector
13V3Power+3V3 Power Rail
2, 13, 14GNDPowerGround
3VREF_PAnalogPositive Analog Voltage Reference
4VREF_NAnalogNegative Analog Voltage Reference
5 ~ 12A0 ~ A7AnalogAnalog input 0 ~ 7
15SAI_CKDigitalSAI Clock Line
16CSDigitalSPI1 Clock Select
17SAI_FSDigitalSAI Frame Synchronization
18CKDigitalSPI1 Clock Line
19SAI_D0DigitalSAI Data Line 0
20MISODigitalSPI Main In Secondary Out
21SAI_D1DigitalSAI Data Line 1
22MOSIDigitalSPI1 Main Out Secondary In
23SPDIF_TXDigitalSPDIF Transmission
24TXDigitalSerial3 Transmission
25SPDIF_RXDigitalSPDIF Receive
26RXDigitalSerial3 Receive
27SDADigitalI2C1 Data Line
28RTSDigitalSerial3 Ready to Send
29SCLDigitalI2C1 Clock Line
30CTSDigitalSerial3 Clear to Send
313V8Power+3V8 Power Rail
32SDADigitalI2C2 Data Line
33PWM0DigitalPWM Output 0
34SCLDigitalI2C2 Clock Line
35PWM1DigitalPWM Output 1
365VPower+5V Power Rail
37PWM2DigitalPWM Output 2
38CAN1_TXDigitalCAN Transmission Line
39PWM3DigitalPWM Output 3
40CAN1_RXDigitalCAN Receive Line
4P4C CAN Connector
15VPower+5V (Fused)
2CANLDiff.CAN Differential Signal Low
3CANHDiff.CAN Differential Signal High
6P6C Serial Conn.
2ZDigitalSP335 Out 1
3YDigitalSP335 Out 2
4ADigitalSP335 In 2
5BDigitalSP335 In 1
PCIe Connector
1, 3, 5, 6, 8, 10, 12, 14, 16, 17, 19, 20, 24, 28, 37, 42 ~ 49, 51NCNCNot Connected
2, 39, 41, 523V3_PCIEPower+3V3 Power Rail
3, 9, 15, 18, 21, 26, 27, 29, 34, 35, 40, 50GNDPowerGround
7PCIE_CLKREQDigitalPCIE Clock Request Signal
11mPCIe_CK_NDiff.PCIe Clock Differential Negative
13mPCIe_CK_PDiff.PCIe Clock Differential Positive
22mPCIe_RSTDigitalPCIe Reset Signal
23mPCIe_RX_NDiff.PCIe Receive Differential Negative
25mPCIe_RX_NDiff.PCIe Receive Differential Positive
30SCLDigitalI2C Clock Line
31mPCIe_TX_NDiff.PCIe Transmission Differential Negative
32SDADigitalI2C Data Line
33mPCIe_TX_PDiff.PCIe Transmission Differential Positive
36USB_DNDiff.USB Data Differential Negative
38USB_DNDiff.USB Differential Positive

Contribute to Arduino

Join the community and suggest improvements to this article via GitHub. Make sure to read out contribution policy before making your pull request.

Missing something?

Check out our store and get what you need to follow this tutorial.

Suggest Changes

The content on is facilitated through a public GitHub repository. You can read more on how to contribute in the contribution policy.