I decided to take a look at the Portenta H7 to experiment with its vision and multicore capabilities.


What's in the box?

There's not a lot in the box, just the Portenta board, a warranty note and tucked underneath an antenna that plugs into the UFL Connector for the Wifi and Bluetooth.

Portenta in dayglow green box with user note Portenta Pinouts

However, that does not mean you are not getting a good deal, the Portenta board is crammed with features:


There is a dual-core microcontroller (STM32H747) with built-in graphics capability, Wifi, Bluetooth 5.1, 2MB Flash, 1MB Ram, a security chip (NXP SE0502), LiPO battery charger, USB-C, a temperature sensor and an RGB LED.

Naturally, there's all the usual microcontroller capabilities such as PWM, ADC and DAC, Digital I/O, a number of timers and configurable serial comms including SPI, I2C, Uart and CAN.

For me, one of the main features is the form-factor, same as the MKR boards and has mounting holes with space to fit bolts. Along with the MKR headers, there are 2 80 pin connectors, a battery connector (a 3-pin BM03B-ACHSS-GAN-TF), the USB-C connector and an ESLOV connector.



The documentation is based around a number of tutorials in both classic Arduino C and MicroPython using the OpenMV IDE. As well as the main tutorials there are some pro examples on Github. My initial impression is that the documentation was lacking but with one exception, I believe I've found everything I need.




There are also a number of linked datasheets and an STL model for you to import into your CAD tool.



Portenta STL modelMechanical design

Arduino IDE 2.0

The IDE is quite similar to the previous version but with an inbuilt debugger and the serial monitor is now an internal window.


In my initial experiments with this, I thought I had bricked the device but it was simply that the IDE had not detected the COM port after the programming was complete.

You have to program the 2 cores separately but it is possible to use the same code for both if you use preprocessor directives to detect the core used e.g. #ifdef CORE_CM7


When uploading to the device it is using dfu-util, so if you want to automate your processes you'll need to use that rather than something like AVRDude or BOSSA.


The IDE seemed to spend a lot of time "indexing", not sure what that is but it seems to happen when you change the board you are using.




There also seems to be an "Advanced debugger" available and you can also use GDB



The firmware is based on the MBed O/S and you can update that using a sketch or over the air. My bootloader was 21 and the current 22 so I've not updated that just yet.




Dual Core

As mentioned above there are 2 cores in the Portenta. These run at 2 different speeds but otherwise are quite similar. There is a claim that these can talk via RPC but I've not tracked down the documentation for that yet. Also If you look at the blink sketches and tutorials there is a bootM4() command and without that running on the M7 core, the M4 core does not start.

Parallel Cores


In the Github for the Arduino Pro Tutorials you can find a number of blink sketches including the following one which blinks via both cores.



I uploaded that onto the 2 cores and had blue and green random flashing.


What next

Next up, I hope to look at micropython and the vision module. Then I'll drop back to finding out how to make the 2 cores communicate. I can always 2 UART ports if I can't work out the "proper" way.