FRDM-K64F
The FRDM-K64F with an MK64FN1M0VLL12 (Cortex-M4F, 120 MHz max):
1 MiB of program flash at 0x00000000, 64 KiB SRAM_L at 0x1FFF0000 plus
192 KiB SRAM_U at 0x20000000, an active-low RGB LED (red PTB22, green
PTE26, blue PTB21), two active-low user buttons (PTC6, PTA4) and the
OpenSDA Virtual COM Port on UART0 PTB16/PTB17 (ALT3).
This is the UART-only L1 slice. Boot, the UART0 console and the GPIO RGB
LED path (with PDOR read-back) are proven by a committed smoke fixture and an
io-smoke.yaml. Unmodified upstream Zephyr v3.7.0 also runs.
hello_world boots through Zephyr's own K6x bring-up (SYSMPU, PMC, OSC, MCG
PEE on PLL0). tests/drivers/uart/uart_basic_api, the suite Renode's
NXP-K64F.robot "Should Run Zephyr Tests for UART" runs, passes 7/7 with the
same typed input, and samples/synchronization runs its two-thread semaphore
hand-off on SysTick timeouts and PendSV context switches.
tests/net/tcp, the suite Renode's "Should Run Zephyr Tests for TCP" runs,
passes 19/19 (IPv4/IPv6 client and server state machine over the test's own
dummy L2) on the new RNGA model. That covers both Renode NXP-K64F.robot
cases. The Ethernet MAC and PHY are still not modelled.
Not claimed yet
SIM clock gating and PORT pad mux/pulls are not modelled. The MCG PLL0 reports lock immediately and its output frequency is not derived. The SYSMPU, PMC and OSC are register files: no MPU protection, LVD or oscillator is modelled. The Ethernet MAC + KSZ8081 PHY and FTFE are declared stubs. The RNGA refills instantly from a deterministic generator (not entropy) and does not raise its error interrupt. eDMA, PIT/FTM, I²C/SPI, ADC/DAC, USB, CAN and SDHC are not mapped: firmware that touches them faults with a memory violation. 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/mk64f12.yaml |
| Example system | configs/systems/frdm-k64f.yaml |
| Reference firmware | crates/firmware-frdm-k64f-smoke/ |
| Example | examples/frdm-k64f/ |
| Committed artifact | tests/fixtures/frdm-k64f-smoke.elf (FRDM-K64F SMOKE) |
| Build target | thumbv7em-none-eabi |
| Tier (snapshot) | L1 — smoke (CPU + memory + UART0 + GPIO); SIM-DERIVED |
Memory map and board wiring
| Region / signal | Base / pin | State |
|---|---|---|
| Flash | 0x0000_0000, 1 MiB |
modelled — the smoke links and runs here |
| SRAM_L / SRAM_U | 0x1FFF_0000 64 KiB / 0x2000_0000 192 KiB |
modelled — stack in SRAM_U |
| SIM | 0x4004_7000 |
type: stub — clock gates are not modelled |
| MCG | 0x4006_4000 |
modelled (nxp_mcg, profile: k6x) — FEI reset; PLL0 PLLST/LOCK0, PEE CLKST=11 (lock immediate) |
| OSC0 / PMC | 0x4006_5000 / 0x4007_D000 |
register files from the NXP SVD — Zephyr writes OSC_CR and PMC_REGSC.ACKISO |
| SYSMPU | 0x4000_D000 |
register file from the NXP SVD (CESR 0x0081_5101, 12 RGDs) — no protection enforced |
| UART0 (console) | 0x4006_A000 |
modelled — classic Kinetis 8-bit UART, IRQ 31; C2 TIE/TCIE/RIE interrupts |
| UART1–4 | 0x4006_B000… / 0x400E_A000 |
modelled — same layout, unexercised |
| GPIOA–E | 0x400F_F000 + 0x40×n |
modelled — PDOR/PSOR/PCOR/PDIR/PDDR |
| PORTA–E | 0x4004_9000 + 0x1000×n |
type: stub — pad mux/pulls not modelled |
| WDOG | 0x4005_2000 |
type: stub — no timeout/reset; the smoke disables it as silicon requires |
| RGB LED | red PTB22, green PTE26, blue PTB21 | modelled GPIO — active low |
| Buttons | SW2 PTC6, SW3 PTA4 | declared board_io — not read by the smoke |
| UART0 VCP | PTB16 / PTB17, ALT3 | simulator captures the UART0 stream; OpenSDA/USB not modelled |
| ENET + KSZ8081 PHY | 0x400C_0000 |
type: stub — no MAC/PHY model (tests/net/tcp uses a dummy L2) |
| RNGA | 0x4002_9000 |
modelled (kinetis_rnga) — GO/HA sticky, OREG_LVL, LRS/ORU/ERRI, CLRI; instant refill, deterministic samples, no error IRQ |
| FTFE / eDMA / PIT / FTM / I²C / SPI / ADC / DAC / USB / CAN / SDHC | see descriptor | not modelled |
Boot path
Fast boot. The engine loads the ELF and enters it at its entry point
(vector table at 0x0000_0000) with SP seeded at the top of SRAM_U
(0x2003_0000). The Kinetis ROM bootloader and the OpenSDA debug bridge are
not modelled.
Validation
# from the repository root
cargo build -p firmware-frdm-k64f-smoke --release --target thumbv7em-none-eabi
./target/release/labwired test --script examples/frdm-k64f/io-smoke.yaml --no-uart-stdout
# stock Zephyr (committed fixtures, rebuilt by crates/firmware-frdm-k64f-zephyr/build.sh)
./target/release/labwired test --script examples/frdm-k64f/zephyr-hello.yaml
./target/release/labwired test --script examples/frdm-k64f/zephyr-uart-basic-api.yaml
./target/release/labwired test --script examples/frdm-k64f/zephyr-sync.yaml
./target/release/labwired test --script examples/frdm-k64f/zephyr-net-tcp.yaml
See examples/frdm-k64f/VALIDATION.md
for the claims, runtime evidence and explicit non-claims.
Sources
The K64 Sub-Family Reference Manual (SIM/MCG/UART/GPIO/PORT/FTFE), the
MK64F12 datasheet (memory and pins), the NXP FRDM-K64F user manual and the
Zephyr frdm_k64f board dts for the LED/button/console wiring — detailed in
examples/frdm-k64f/REQUIRED_DOCS.md.