Notes from the field

· Jun 15, 2026

Updating firmware in the field: bootloaders & OTA

How to replace firmware on a deployed device without bricking it and without letting anyone flash their own code — bootloader basics, the flash memory map, single-slot vs A/B dual-slot, the OTA update cycle with rollback, and secure boot with signed images and anti-rollback.

bootloader 5 min read
· Jun 15, 2026

DMA: free the CPU from moving bytes

Direct Memory Access explained for embedded engineers — how a DMA controller moves data between peripherals and memory without the CPU, why it buys throughput, determinism and power at once, the transfer modes (circular, ping-pong, mem-to-mem), and the cache and mapping gotchas that bite.

DMA 6 min read
· Jun 15, 2026

Which embedded compiler: GCC, IAR or Keil?

A field guide to embedded toolchains — what actually turns your C into flashable bytes, how GCC, LLVM/Clang, IAR EWARM and Keil MDK differ on cost, code density and certification, and why an IDE like STM32CubeIDE is not the same thing as a compiler.

GCC 6 min read
· Jun 15, 2026

FPGA or MCU? Choosing by parallelism, timing and cost

When to reach for an FPGA versus a microcontroller — the real difference between a CPU running instructions sequentially and an FPGA computing in parallel across its fabric, and how that drives the trade-offs in throughput, latency and determinism, power, development effort and unit cost. Plus where SoC FPGAs let you have both.

FPGA 4 min read
· Jun 15, 2026

Linker scripts and the memory map: why firmware won't boot

A practical tour of the embedded memory map and the linker script that builds it — what .text, .rodata, .data and .bss are, where each lives in FLASH and RAM, the startup copy/zero that runs before main(), VMA vs LMA, and the MEMORY/SECTIONS blocks. The bugs behind a firmware that links fine but never reaches main().

embedded 6 min read
· Jun 15, 2026

Low-power firmware: sleep modes, wake sources and measuring µA

How to actually make a battery device last — the MCU low-power modes (Sleep, Stop, Standby, Shutdown) and what each keeps alive, choosing wake sources (RTC, EXTI, wake pins), why average current and not peak sets battery life, and how to measure µA when a plain multimeter can't span six decades of current.

embedded 6 min read
· Jun 15, 2026

Metastability and clock domain crossing, explained

Why a signal crossing between unrelated clocks eventually violates setup/hold and goes metastable, how the two-flop synchronizer contains it, and why you must never run a multi-bit bus through per-bit synchronizers — use an async FIFO with Gray-coded pointers or a handshake instead. The CDC bugs that pass simulation and fail in the field.

FPGA 5 min read
· Jun 15, 2026

The microcontrollers that won — and why

There are thousands of MCUs but in practice you meet the same dozen. A field guide to why STM32, ESP32, AVR, Nordic nRF and RP2040 became defaults — and why adoption is decided by ecosystem, availability and longevity, not raw specs.

STM32 6 min read
· Jun 15, 2026

SPI vs I2C: speed or pins

When to reach for SPI and when I2C is the better board-level serial bus — the wire-count, addressing, duplex, drive and per-byte-overhead trade-offs, with a one-line rule for picking.

SPI 5 min read
· Jun 15, 2026

volatile, memory barriers and reordering traps

Why volatile exists, what it actually guarantees (and what it doesn't), how the compiler and CPU reorder your memory accesses, and when you really need a compiler barrier, a hardware memory barrier (DMB/DSB) or a true atomic — the bugs that only show up with optimisation on, interrupts, DMA or a second core.

embedded 6 min read
· Jun 15, 2026

Wireless: range, data rate, power — pick two

A short field guide to the wireless links used in embedded and IoT — BLE, Wi-Fi (802.11), Zigbee/Thread (802.15.4), LoRaWAN and cellular IoT — what each is for, where it wins and where it doesn't, framed by the one trade-off you can't escape.

wireless 5 min read
· Jun 15, 2026

MQTT explained: pub/sub, brokers and Mosquitto

A detailed, practical guide to MQTT — the publish/subscribe model that decouples devices, what the broker actually does, topics and + / # wildcards, QoS 0/1/2 delivery guarantees, retained messages, Last Will, keep-alive and sessions, MQTT 3.1.1 vs 5.0, TLS security, the broker landscape (Mosquitto, EMQX, HiveMQ, AWS IoT Core) and hands-on Mosquitto with mosquitto_pub / mosquitto_sub and bridges.

MQTT 10 min read
· Jun 14, 2026

Do you need an RTOS?

When a real-time operating system earns its place over a bare-metal super-loop — what an RTOS actually is, how the major kernels differ (FreeRTOS vs NuttX vs Zephyr, POSIX compliance and all), which industries run which, and where the field moved in the last few years.

RTOS 17 min read
· Jun 12, 2026

Why the car chose CAN

A tour of automotive protocols — LIN, CAN, FlexRay, automotive Ethernet — and the engineering reasons CAN bus became the backbone of every vehicle: lossless bitwise arbitration, built-in priority, and brutal error handling.

CAN 6 min read
· Jun 12, 2026

Before the EMC lab: pre-compliance testing at your own bench

Pre-compliance checks you can run on your own bench before taking an industrial device to an accredited EMC lab — and the three failures that catch most designs.

EMC 5 min read
· Jun 12, 2026

RS-232 vs RS-485: the electrical story

What actually differs between RS-232 and RS-485 at the electrical level — voltage levels, differential signaling, common-mode range, termination and biasing — and which one wins for which job.

RS-485 5 min read
· Jun 12, 2026

Modbus from the wire up: ASCII vs RTU vs TCP

How Modbus actually works on the wire — ASCII, RTU and TCP framing compared byte by byte, RTU silence timing explained, and which physical layers (UART, RS-232, RS-485, Ethernet) can carry it.

Modbus 7 min read
· Jun 12, 2026

SAE J1939: the language of trucks

How J1939 turns raw CAN into a plug-and-play network for trucks and heavy machinery — the 29-bit ID anatomy, PGN/SPN signal dictionary, transport protocol for big payloads, address claiming and DM1 diagnostics.

J1939 4 min read