Uploading Sketches to the M4 Core on Arduino Portenta X8

This tutorial explains how to upload Arduino sketches to the M4 core.


In this tutorial we will go through the process of uploading sketches to the M4 core on the STM32H747XI MCU. For the user the process is the same as usual but it differs quite a bit in regards to what happens behind the scenes compared to other Arduino boards.


  • Learn how to use the Arduino IDE to compile and upload a sketch.
  • Learn how to compile the sketch binaries with the Arduino IDE and upload it manually via ADB.

Required Hardware and Software

  • Portenta X8
  • USB C cable (either USB A to USB C or USB C to USB C)
  • Arduino IDE 1.8.10+ or Arduino-cli
  • Latest "Arduino Mbed OS Portenta Boards" Core > 3.0.1


Standard Arduino IDE Upload

Open the Arduino IDE, make sure you have selected the Portenta X8 in the boards selector.

IDE board selector
IDE board selector

Create a custom sketch or open one of the example sketches e.g. the blink sketch:

1void setup(){
5void loop(){
6 digitalWrite(LED_BUILTIN , HIGH);
7 delay(1000);
8 digitalWrite(LED_BUILTIN , LOW);
9 delay(1000);
  • Select the port of your device in the port selector menu.
  • Press the Compile and Upload button.

Behind the curtains, the sketch gets compiled into a binary. That binary file is then uploaded to the Linux side of the Portenta X8 via an

SSH connection. The flashing itself is done on the board itself by a service running on Linux. When the sketch has bee uploaded successfully, check if the onboard LED is blinking at an interval of one second.

Upload Manually Using ADB

To upload a firmware manually, you first need to compile the sketch. In the Arduino IDE select "Export compiled binary" from the Sketch menu. It will compile the sketch and save the binary file in the sketch folder. Alternatively you can use the Arduino CLI to create an elf file.

To upload the firmware you can use the ADB tool that has been installed as part of the Portenta X8 core. It can be found at


From that directory you can use the

tool. To upload your compiled sketch you just need to type:

1adb push <sketchBinaryPath> /tmp/arduino/m4-user-sketch.elf

ADB upload with a terminal
ADB upload with a terminal

How It Works?

The Portenta X8 has a service that waits for a sketch to be uploaded to a folder. If it detects changes the device will flash the M4 with the uploaded firmware.

This work thanks to the following services:

  • monitor-m4-elf-file.service: this service monitors the directory
    and each time it detects a new file it will proceed to flash the M4 using
    with the sketch that has been pushed.


In this tutorial you have learned how to upload a sketch to the M4 core. Now for example you are able to connect an I2C sensor and interact with it.


  • If you cannot use the
    tool and the folder
    is empty Remove the Mbed Portenta Core and install it again.