RT/non-RT split for STM32MP1

Hello everyone,
I have a bit of an ambitious project in my queue, just wanted to share some thoughts. I want to build a cheap FC board, but for communications reasons I need a Linux. I also want to evade RPi availability pains so a Pi0 is out. I was eyeing an STM32MP1xxx, specifically 15x ones with an M4 RT core so that:

  1. Communications, camera and higher level stack runs on Linux
  2. ArduPilot runs on M4 core
  3. MavLink goes through a virtual UART based on remoteproc/OpenAMP
  4. Storage is also proxied via remoteproc

It sounded very cool on paper, until I realized that the cores don’t share the main DDR memory and instead there’s an internal 700 kb block of which only about 450 kb are available for the firmware including the data area.

I’m not sure I can squeeze ardupilot out this much even if I disable every single driver that I’m not going to use. So the question is the following: is there any merit for a special build that splits RT-critical threads from the rest of the code (in a way reminding of how IOMCU works if I get it correctly)? Or would I be better off just going for 13x chips without a dedicaded M4 core and run fully on Linux forgoing any RT stuff. My target is plane so the scheduling is only 50 Hz and STM32MP1 natively has a lot of peripherals so no need for OBALs etc, but I’m not sure if running fully in Linux is a good idea compared to still having some dedicated MCU piece of code.

2 Likes

Is mandatory to use STM ?
Have you looked at PocketBeagle + DYI Cape or Cape

I have 2 running with a customized cape for pocketbeagle.