Firmware Overview

The firmware runs on the STM32H7 dual-core with Cortex-M7 as the main core and Cortex-M4 as auxiliary.


Core Split

Both cores synchronize via Hardware Semaphores (HSEM) to prevent shared memory corruption.

graph TD
    M7[Cortex-M7 @ 480 MHz]
    M4[Cortex-M4 @ 240 MHz]
    HSEM[Hardware Semaphores]
    
    M7 <--> HSEM
    M4 <--> HSEM
    M7 --- Shared[Shared RAM] --- M4

    style M7 fill:#1f3a5f,stroke:#388bfd,color:#fff
    style M4 fill:#1a3a2a,stroke:#2ea44f,color:#fff
    style HSEM fill:#2d2a1a,stroke:#d29922,color:#fff
Core Clock Role
Cortex-M7 480 MHz FreeRTOS + LwIP + micro-ROS XRCE-DDS
Cortex-M4 240 MHz Auxiliary / future expansion

Memory Map

The STM32H755 memory is partitioned to support dual-core operation and Ethernet DMA.

graph LR
    subgraph D1["Domain D1 (High Speed)"]
        M7_Code[AXI SRAM: CM7 Program]
    end
    subgraph D2["Domain D2 (Communication)"]
        ETH_DMA[SRAM2: Ethernet DMA]
        M4_Code[SRAM1: CM4 Program]
    end
    subgraph D3["Domain D3 (Always On)"]
        Shared[SRAM4: Shared Data]
    end

    style D1 fill:#0d1117,stroke:#388bfd
    style D2 fill:#0d1117,stroke:#2ea44f
    style D3 fill:#0d1117,stroke:#d29922

Software Stack (CM7)

The CM7 core handles all communication using the LwIP UDP stack.

flowchart TB
  subgraph CM7["Cortex-M7 Stack"]
    FreeRTOS[FreeRTOS Task] --> XRCE["XRCE-DDS Transport"]
    XRCE --> LwIP["LwIP UDP Stack"]
    LwIP --> EMAC["Ethernet MAC"]
  end
  subgraph Net["Network"]
    Agent["micro-ROS Agent"]
  end
  EMAC -->|"UDP :8888"| Agent

  style CM7 fill:#0d1117,stroke:#388bfd
  style Net fill:#0d1117,stroke:#2ea44f

Build Output

File Purpose
MicroRosEth_CM7.elf CM7 debug + symbol file
MicroRosEth_CM7.bin CM7 raw binary
MicroRosEth_CM4.elf CM4 debug + symbol file

This site uses Just the Docs, a documentation theme for Jekyll.