Apollo4 Plus EVB
The Ambiq Apollo4 Plus EVB (ordering code AMAP4PEVB) with an
AMAP42KP-KBR Apollo4 Plus SoC (Cortex-M4F, up to 192 MHz): 2 MiB of MRAM
at 0x0 (the secure bootloader owns 0x0–0x17FFF, applications start at
0x0001_8000), 384 KiB TCM plus 2.375 MiB of extended/shared SRAM contiguous
from 0x1000_0000, three active-low user LEDs (GPIO30, GPIO90,
GPIO97), two active-low buttons (GPIO18, GPIO19) and the console on
UART0 GPIO60/GPIO47 through the on-board J-Link VCOM.
This is the UART+LED L1 slice, the first Ambiq part. Boot from the
post-bootloader vector table, the PWRCTRL power-domain handshake, the UART0
console and the GPIO LED path (single-bit WTC/WTS strobes with RD
read-back) are proven by a committed smoke fixture and an io-smoke.yaml.
Unmodified upstream Zephyr v3.7.0 samples/hello_world boots through
the AmbiqSuite HAL (zephyr-hello.yaml): its low-power init, the CPU
block's DAXI flush and the boot ROM's delay helper, which LabWired supplies
as a clean-room table at 0x0800_0000 (crates/core/roms/apollo4, not an
Ambiq dump).
Not claimed yet
The secure bootloader is not modelled (the engine fast-boots the
application vector table), and the boot ROM only as the HAL's helper
table: its MRAM helpers return an error, and br_util_delay_cycles
runs at 2 cycles per iteration instead of 3. Cache/DAXI buffering is
not modelled. Power domains have no effect on
their peripherals. The PL011 UART model does not store CR, so the
Ambiq CLKEN/CLKSEL UART clock selection is written but not checked.
Non-GPIO pad functions (FNCSEL ≠ 3) are not routed, and GPIO interrupts
are not raised. CLKGEN, MCUCTRL, RSTGEN, IOM0–7, MSPI0–2, ADC, timers,
STIMER, RTC, WDT, security, crypto, GPU/display, SDIO, USB and audio are
declared stubs. There is no silicon capture: SIM-DERIVED.
Live status
The tables below are a maintained snapshot. Authoritative automation:
- Chip conformance scoreboard — level · modelled peripherals · register-match
Status at a glance
| Aspect | Status |
|---|---|
| Chip descriptor | configs/chips/amap42kp.yaml |
| Example system | configs/systems/apollo4p-evb.yaml |
| Reference firmware | crates/firmware-apollo4p-evb-smoke/ |
| Example | examples/apollo4p-evb/ |
| Committed artifact | tests/fixtures/apollo4p-evb-smoke.elf (APOLLO4P EVB SMOKE) |
| Build target | thumbv7em-none-eabi |
| Tier (snapshot) | L1 — smoke (CPU + memory + PWRCTRL + UART0 + GPIO) plus a stock Zephyr boot (boot-ROM helper table, CPU/DAXI block); SIM-DERIVED |
Memory map and board wiring
| Region / signal | Base / pin | State |
|---|---|---|
| MRAM (boot ROM handover / SBL) | 0x0000_0000–0x0001_7FFF |
not modelled — no SBL image; the engine enters the application vector table |
| MRAM (application) | 0x0001_8000, to 2 MiB |
modelled — the smoke links and runs here (reset_vector_offset: 0x18000) |
| RAM | 0x1000_0000, 2816 KiB (TCM 384 KiB first) |
modelled — the smoke's stack is at the top of the TCM (0x1006_0000) |
| PWRCTRL | 0x4002_1000 |
modelled (apollo4_pwrctrl) — MCUPERFREQ ack, DEVPWREN → DEVPWRSTATUS |
| GPIO | 0x4001_0000 |
modelled (apollo4_gpio) — PADKEY, PINCFG, RD/WT/WTS/WTC/EN banks |
| UART0 (console) | 0x4001_C000 |
modelled — PL011 layout, IRQ 15 |
| UART1–3 | 0x4001_D000–0x4001_F000 |
modelled — same layout, unexercised |
| LEDs | LED0 GPIO30, LED1 GPIO90, LED2 GPIO97 | modelled GPIO — active low, push-pull |
| Buttons | BTN0 GPIO18, BTN1 GPIO19 | modelled GPIO input — active low, PULLCFG pull-up |
| UART0 VCOM | GPIO60 (TX) / GPIO47 (RX), FNCSEL 4 | simulator captures the UART0 stream; the J-Link bridge is not modelled |
| CLKGEN / MCUCTRL / RSTGEN / IOM / MSPI / ADC / timers / RTC / WDT / security / crypto / GPU / display / SDIO / USB / audio | see descriptor | type: stub |
Boot path
Fast boot past the bootloader. On silicon the boot ROM runs the secure
bootloader from MRAM 0x0, which validates and starts the application at
0x0001_8000. The engine loads the ELF (whose lowest load address is
0x0001_8000), finds no valid vector table at the flash base, and enters the
one at flash_base + reset_vector_offset — SP 0x1006_0000, PC 0x18400
from the firmware's own table. The SBL is not modelled; the boot ROM is only the clean-room HAL helper table.
Validation
# from the repository root
cargo build -p firmware-apollo4p-evb-smoke --release --target thumbv7em-none-eabi
./target/release/labwired test --script examples/apollo4p-evb/io-smoke.yaml --no-uart-stdout
./target/release/labwired test --script examples/apollo4p-evb/zephyr-hello.yaml --no-uart-stdout
See examples/apollo4p-evb/VALIDATION.md
for the claims, runtime evidence and explicit non-claims.
Sources
Ambiq's CMSIS device header apollo4p.h and am_reg_base_addresses.h
(register maps, bit fields, memory map), the Zephyr ambiq_apollo4p.dtsi
SoC tree (application flash offset, IRQs) and the Zephyr apollo4p_evb
board port (LED/button/console wiring) — detailed in
examples/apollo4p-evb/REQUIRED_DOCS.md.