Technical articles written by the trainers who teach our courses. They cover the architecture decisions you actually meet on a project, without the shortcuts of a product page.
MCP and datasheets: giving an AI assistant your embedded project context
An assistant with no access to the reference manual invents. Model Context Protocol, datasheet ingestion, tool-using agents, reusable configuration, and the intellectual property question.
Letting an LLM write embedded code: what works and what breaks
A language model writes plausible C and invents registers. Where it genuinely saves time, where it produces dangerous code, and how supplying hardware context changes the outcome.
TrustZone on Cortex-M: isolation, TF-M and what PSA really guarantees
TrustZone-M is not TrustZone-A. Memory attribution through SAU and IDAU, NSC transitions, the real cost of secure calls, what TF-M adds, and the exact scope of PSA certification.
TLS on a microcontroller: footprint, handshake cost and certificate lifecycle
Fitting TLS 1.3 into 64 KB of flash without weakening security. Cipher suite selection, real handshake cost, hardware acceleration, chain validation and renewing certificates in the field.
Secure boot on microcontrollers: chain of trust, keys and anti-rollback
Secure boot is not just checking a signature. Immutable root of trust, key provisioning, anti-rollback protection, dual-bank updates, and the mistakes that make the whole chain pointless.
SBOM for embedded firmware: generating, checking and actually using it
A useful SBOM is not a package list exported once. SPDX and CycloneDX formats, generation from Yocto, Buildroot and Zephyr, CVE matching, and the traps that make a bill of materials worthless.
Cyber Resilience Act: what actually changes for an embedded product
The CRA imposes verifiable technical requirements on every connected product sold in the EU. Deadlines, risk classes, Annex I requirements, the 24-hour reporting duty, and what each means inside the firmware.
Zephyr devicetree: overlays, bindings and reading the build errors
Zephyr's devicetree is not Linux's. How overlays resolve, what bindings are for, the generated DT_ macros, and how to read the compile errors it produces.
FreeRTOS or Zephyr: choosing an RTOS for an embedded project
Two opposite philosophies: a minimal scheduler against a complete operating system. Real memory footprint, drivers, networking, security governance, and the criterion that actually decides.
RISC-V or ARM Cortex: the differences that actually matter on a project
Beyond the licensing debate: modular instruction set, optional extensions, toolchain maturity, implementation fragmentation, and what all of it means for a product with a ten-year life.
Writing an embedded Linux driver: from devicetree to sysfs, in the right layer
Choosing the right subsystem before writing a line, understanding probe and remove, managing resources with devm, and avoiding the context mistakes that panic the kernel.
Real-time latency on Linux: measuring, understanding and fixing it with PREEMPT_RT
Enabling PREEMPT_RT is never enough. What sets your worst-case latency is threaded IRQs, power management, SMIs and cache behaviour. A measurement method and concrete fixes.
Booting embedded Linux: from reset to the first process, stage by stage
What really happens between power-on and the shell: ROM code, TF-A, U-Boot, kernel decompression, devicetree, initramfs and PID 1. With the points where it breaks and how to diagnose each one.
Cache coherency and DMA on ARM: why your buffers get corrupted
A DMA buffer holding stale data or losing bytes almost always comes down to the cache. What really happens on Cortex-A and Cortex-M, and how to fix it with the right barriers and the right maintenance operations.
FPGA or microcontroller: how to decide on an embedded project
The FPGA versus microcontroller debate is rarely settled on raw performance. What actually decides it is determinism, real parallelism, unit cost, and the skills on your team.
Yocto or Buildroot: how to choose for your embedded Linux project
Yocto and Buildroot answer the same question in opposite ways. What really separates them is the build cycle, multi-year maintenance, and SoC vendor support.