New & Reviewed

Arduino Goes Pro

With the Portenta H7

DIYODE Magazine

Issue 37, August 2020

Arduino’s new development board with a dual core processor that can run tasks in parallel.

Many of us makers and hobbyists are very familiar with the Arduino platform, either directly by building projects or indirectly by following other people using the platform to build projects. Whilst the Arduino platform has indeed been used in industry to create real-world products, it’s main selling point has always been about the ease of use, appealing mostly to the hobbyist and maker communities.

That is all starting to change now with the release of the Arduino PRO™ series. This series, whilst designed to appeal to a more professional audience, will still benefit from the ease of use of the traditional Arduino platform but will simultaneously provide access to much more powerful hardware, capable of much more processing intensive tasks such as graphics processing and display.

We were fortunate enough for Arduino to send us a beta unit of their first pro series board, which is in full production in its final release as we write this review. The Arduino PRO Portenta H7 development board uses an STM32H747 dual core microcontroller sporting a 32bit Arm® M7 core running at up to 480MHz and a 32bit Arm® M4 core running at up to 240MHz. The board comes with Bluetooth Low Energy (BLE) and WiFi support, and is purported to handle both tasks simultaneously. The board has an impressive feature list with interfaces we are all likely acquainted with such as SPI, I²C, USB, etc.

It also supports Controller Area Network (CAN), which is very popular in automotive industries, Inter-IC sound (I²S) for audio device communication, and even Display Serial Interface (DSI) which is a standard of the mobile industry processor interface (MIPI®) for display handling.

This makes the development board of particular interest to individuals developing hardware for such industries, but likewise, is of interest to anyone wanting to branch out and learn some interesting communication protocols and interfaces.

The development board also boasts a massive 84 digital I/O pins with 10 capable of pulse width modulation (PWM) and 8 dedicated analog pins. 22 of these general-purpose input and output pins (GPIO) are broken out to through-holes on the PCB. The remaining pins are broken out to a very new style of header (for the Arduino platform) at the bottom of the board via 2 x 80-pin high density connectors.

High density 80 pin connector at the bottom of the development board.

These high-density connectors breakout much of the aforementioned interfaces such as the CAN bus and SAI interfaces. However, they also contain the same GPIO mentioned above, meaning the entire development board could hypothetically be connected to a project via these connectors, allowing for hardware swapping.

The Portenta H7 has 3 x 16-bit analog to digital converters which means you could measure / resolve voltages down to 50µV with a 3.3V AREF. This is many times greater than other Arduino boards like the Arduino Uno for example, which with an AREF of 3.3V, could only measure / resolve down to 3.2mV.

Likewise, the Portenta H7 has 2 x 12-bit digital to analog converters (DAC) built-in which allows for real analog output at frequencies up to 1MHz, allowing you to hypothetically create stereo sound projects.

For us, one of the most exciting features is, of course, the dual cores. This allows us to run two individual sketches on the same board which will both run simultaneously using the same peripherals.

For example, you could have the M7 core using TensorFlow Lite to provide computer vision, while the M4 core controls motors or other devices to react to the visual input received by the M7 core. This is incredibly powerful for use with industrial machines but could also be revolutionary for more hobbyist focused projects such as 3D printing and drones.

Hands On

While writing this review, we set up a simple “Hello World” task. This is, of course, blinking the onboard LED. We made it a little more interesting by utilising the Portenta H7s RGB LED and dual cores by making one core flash the LED red and the other core flashing blue. You can check out our findings and the code to do this yourself below, along with a video of the results.

Summary

Despite being aimed at a professional audience, we have no doubt whatsoever that the new Arduino Pro series will be immensely popular among the maker / hobbyist and enthusiast market. The combination of the new Arduino Pro IDE (Available in Beta version from GitHub: https://github.com/arduino/arduino-pro-ide/releases) and powerful hardware means the Arduino Pro series will be a game-changer for Arduino. A Carrier board will also be available soon to expand the capabilities of the Portenta family.

We also look forward to the Pro IDE. The debug features in the IDE and the Arduino ease of use could very rapidly make the Arduino platform the go-to platform for prototyping and developing Arm®-based devices.

SPECIFICATIONS

Connectivity: Bluetooth Low Energy & Classic, WiFi, Ethernet

SDRAM: 8MB

FLASH QSPI: 16MB

CLOCK: Up to 480MHz

MEMORY: 2MB flash – 1MB SRAM

INTERFACES: I²C, I²S, SPI, CAN, PDM, ETH, MIPI, DSI, USB, UART, SAI

VOLTAGES: 5V input – 3.3V operating

PINOUT: 84 Digital – 10 PWM – 8 Analogue

DIMENSIONS: 66 x 25mm

Shopping List

Portenta H7 available* from: www.arduino.cc

  • Arduino Pro Portenta H7 ABX00042 US$103.40

* At time or writing, Arduino are now delivering the pre-orders and, from the beginning of August, will be supplying to its distributor network as well.

Practical Example - Get Blinking

Naturally, as this is our first ever use of the board, we want to create the most basic of “Hello World” tasks for a microcontroller, which is, of course, blinking the onboard LED. However, we can make it a little more interesting by utilising the Portenta H7s RGB LED and dual cores by making one core flash the LED red and the other core flashing blue. This will demonstrate the dual cores of the Portenta and perhaps show the potential of such an impressive piece of hardware.

We first created a sketch which we called H7_blink_M7. This sketch will run on the M7 core and will toggle the LED RED.

We then went to boards manager and searched for the board Portenta.

With the board installed we selected it from the Boards selector and ensured that we had the M7 board selected as:

We then wrote the usual blink sketch substituting the pin LED_BUILTIN for LEDR. The LED on the Portenta H7 is an RGB LED in a common anode configuration and each LED is addressed as follows. Red = LEDR Green = LEDG Blue = LEDB

Since the LED is a common anode configuration, we need to pull the LED pin LOW for it to illuminate. Thus the code for the M7 core is as follows:

//M7
void setup() {
// put your setup code here, to run once:
LL_RCC_ForceCM4Boot();
pinMode(LEDR,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LEDR,HIGH);
delay(1000);
digitalWrite(LEDR,LOW);
delay(1000);
}

This code will be uploaded to the M7 core and will toggle the red LED on and off at a rate of one second starting off.

It took a little bit of Googling, but our initial attempts would not allow us to get the code on the M4 core to run. As it turns out, by default, the M4 core needs to be told to boot up and thus, the line:

LL_RCC_ForceCM4Boot();
Does this.

Once you upload this sketch to the Portenta H7, you will immediately see the LED blinking red in the usual way. You can now create the sketch for the M4 core.

Create a sketch called H7_blink_M4 and make sure you select the H4 board.

You then need to upload the following code.

void setup() {
// put your setup code here, to run once:
pinMode(LEDB, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LEDB, LOW);
delay(1000);
digitalWrite(LEDB, HIGH);
delay(1000);
}

This code will be uploaded to the M4 core and will toggle the blue LED on and off at a rate of one second, starting on. Together, the LED will alternate from blue to red.

This demonstrates two completely separate sketches running on the same microcontroller (MCU) using the same hardware but independently and simultaneously, and is pretty exciting.

Additional Images

Here's a few pics supplied from Arduino of the boards in production