Skip to main content

mproc-mailbox

Cortex-M55-HP ↔ Cortex-M55-HE mailbox round-trip on AEN. HP-side stages a payload in shared SRAM, signals the peer via the hardware mailbox, waits for a reply, reads the result back. Both peer images ship in the SDK.

Source: examples/mproc-mailbox/.

What it shows

  • Opening a shared-memory region (alp_shmem_open) and a hardware mailbox (alp_mbox_open) by portable instance IDs.
  • Staging payload bytes via alp_shmem_write_at — the backend handles cache coherency on the way out.
  • Signalling the peer with alp_mbox_send carrying a small (offset, length) tuple pointing at the staged bytes.
  • Blocking on alp_mbox_recv for the peer's reply.

board.yaml (HP side)

schema_version: 2

som:
sku: E1M-AEN701

carrier:
name: E1M-EVK

cores:
m55_hp:
os: zephyr
app: ./src
peripherals: [mproc]
m55_he:
os: zephyr
app: ./peer
peripherals: [mproc]

diagnostics:
log_level: info

Build

# native_sim (HP-side only; no peer core)
west alp-build -b native_sim/native/64 alp-sdk/examples/mproc-mailbox
west build -d build -t run

# Real silicon (AEN dual-core, Zephyr v4.4 upstream board)
west alp-build -b ensemble_e8_dk/ae402fa0e5597le0/rtss_hp alp-sdk/examples/mproc-mailbox
west build -b ensemble_e8_dk/ae402fa0e5597le0/rtss_he alp-sdk/examples/mproc-mailbox/peer
west flash

Flash the HP image into the RTSS-HP slot and the HE peer image into the RTSS-HE slot. Once both are running:

[mproc] init mbox + shmem
[mproc] sending payload "hello-from-HP" (13 bytes)
[mproc-peer] request offset=0 len=13
[mproc-peer] payload "hello-from-HP"
[mproc-peer] replied "echo: hello-from-HP" (19 bytes)
[mproc] HE woke up, payload visible in shmem
[mproc] HP read reply OK
[mproc] done

Sysbuild dual-image flow lands in v0.4 — until then, build both halves with separate west invocations as shown.

See also

Questions about this page? Discuss in Community Forum