Hi everyone
I’d like to start a little brainstorming session on what MCU you would use if you were to design a brand-new OpenCyphal product. I do realise that this somewhat depends on the exact nature of the product-to-be-designed (i.e. if you need hardware support for a specific non-generally-available interface or a hardware accelerator).
However, I think it’s safe to assume that most products can be built with a generic MCU interacting with some sensor/actuator via one of the “classic” interfaces such as SPI, I2C, SDIO, Ethernet, USB (god forbid). I believe this to be the reason why we see such a prevalence of STM32F4 based designs (The reason for the prevalence of STM32-ARM-in-general being caused by them being one of the first semiconductor vendors with a decently usable HAL).
However, I feel that as needs for computing power are rising the STM32F4 is maybe getting a bit old. Consequently I’ve been looking into STM32F7 and STM32H7. The F7 series is featuring a Cortex-M7 over a Cortex-M4 (as the F4 series does). ARM provides a decent comparison table between the two architectures here. Looking through the chart I’d say the main advantage is higher “throughput” due to the availability of caches and general architectural improvements, possibility for further speed-up due to existence of tightly coupled instruction and data memory (TCM) and support for double-precision (DP) FPU on some F7 CPUs.
The H7 series seems to be a bit too big for a typical OpenCyphal enabled application (as I imagine it), unless you specifically need hardware support for TFT-LCDs, MIPI-DSI, JPEG-Codec, etc. Also some of the H7 series are a asymmetric combination of a Cortex-M4 and a Cortex-M7, such as the H747 used in Arduino’s Portenta H7 product. Personally I feel running two cores on a single package is a unnecessary complication as concurrency is already hard on desktop systems, much harder on embedded systems where there’s no support for std::thread
, std::mutex
, std::future
, etc. (I think you get the idea).
You may have noticed I’m focusing on the STM32 product line, but this is in no way set in stone, it merely reflects my own exposure to MCU types so far. The only “interface requirement” I have is that I have at least two CAN FD capable modules on-chip.
Dear reader: Which MCU family would you recommend and why?
Cheers, Alex