Notes from the field
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.
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.
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.
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.
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().
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.