EmbeddedRelated.com

Introducing The VolksEEG Project

Steve BranamSteve Branam October 31, 2021

VolksEEG is an open-source effort to build an FDA-cleared clinical EEG and publish every design so others can manufacture it. The volunteer-driven project centers on the TI ADS1299 8-channel, 24-bit biopotential ADC and combines medical and electrical engineering expertise to confront regulatory, safety, and usability challenges. This blog series will document technical decisions, isolation and safety concerns, and ways engineers can contribute.


Learning From Engineering Failures

Steve BranamSteve Branam July 29, 2021

Engineering failures are the best teachers when you study them with curiosity and rigor. This post gathers the author's approach and curated resources for learning from incidents, with an emphasis on treating human error as a symptom of layered systemic problems rather than the root cause. Read on for practical guidance, longtime sources like Risks Digest, and a mindset: trust nothing, and verify.


Watchdog Timer Anti-patterns

Alexandru LazarAlexandru Lazar June 8, 2019

A watchdog timer can be useless or even harmful when misused. This post catalogs the most common watchdog anti-patterns, including feeding the watchdog unconditionally from a timer ISR, suspending it during long operations, sprinkling resets across code, timeout auctions, incomplete reset trees, and treating process supervision as a substitute for hardware. It finishes with practical rules to design watchdogs that genuinely improve embedded system reliability.


Linear Feedback Shift Registers for the Uninitiated, Part XVIII: Primitive Polynomial Generation

Jason SachsJason Sachs August 6, 20182 comments

Jason Sachs walks through how to find primitive polynomials for GF(2) LFSRs, moving from naive exhaustive checks to smarter synthetic constructions. The article compares sieve and constructive methods, shows practical optimizations like parity checks and companion-matrix updates, and demonstrates decimation plus Berlekamp-Massey to generate all primitives from one seed; it also teases a novel Falling Coyote Algorithm for additional speedups.


Linear Feedback Shift Registers for the Uninitiated, Part XVII: Reverse-Engineering the CRC

Jason SachsJason Sachs July 7, 20181 comment

Jason Sachs shows how to pry CRC parameters out of a black-box oracle and reimplement the checksum yourself. By canceling the affine offsets, probing single-bit basis messages, and treating per-bit outputs as LFSR sequences, you can recover the generator polynomial, bit and byte order, and init/final XOR values. The post includes working Python code, a 4-message shortcut, and real-world tests such as zlib CRC32.


Linear Feedback Shift Registers for the Uninitiated, Part XVI: Reed-Solomon Error Correction

Jason SachsJason Sachs June 19, 2018

Jason Sachs demystifies Reed-Solomon codes with hands-on examples and pragmatic tips for embedded engineers. The article shows why RS encoding is just polynomial division in GF(2^m), why decoding is mathematically heavier, and how to implement encoders in Python and in C-friendly form using LFSRs and table-driven methods. Read this for working code, generator-polynomial examples, and an embedded-minded view of RS practicalities.


Linear Feedback Shift Registers for the Uninitiated, Part XV: Error Detection and Correction

Jason SachsJason Sachs June 12, 2018

CRCs and Hamming codes look a lot less magical when you view them as redundancy with a purpose. Jason Sachs walks from parity bits and checksums into finite-field polynomial arithmetic, then shows how CRCs map cleanly onto LFSRs and how Hamming codes use syndromes to locate single-bit errors. It is a practical tour of error detection and correction, with enough worked examples to make the theory feel usable.


Linear Feedback Shift Registers for the Uninitiated, Part V: Difficult Discrete Logarithms and Pollard's Kangaroo Method

Jason SachsJason Sachs October 1, 2017

Most discrete-log problems are hopeless by brute force, but clever algorithms cut that cost to feasible levels. This installment walks through baby-step giant-step, Pollard’s rho and kangaroo methods, and how Silver-Pohlig-Hellman and index calculus leverage group structure to speed attacks on GF(2^n) fields. Jason Sachs includes Python examples, heuristics, and complexity nuggets so you can see when each method is practical.


Linear Feedback Shift Registers for the Uninitiated, Part IV: Easy Discrete Logarithms and the Silver-Pohlig-Hellman Algorithm

Jason SachsJason Sachs September 16, 20174 comments

Discrete logarithms can be either trivial or infeasible depending on how group elements are represented, and Jason Sachs shows a practical route when they are intentionally easy. This article walks through using LFSRs as fast counters, why a smooth group order matters, and how the Silver-Pohlig-Hellman algorithm plus the Chinese Remainder Theorem recovers exponents in GF(2) with small prime factors.


Favorite Tools: C++11 std::array

Matthew EshlemanMatthew Eshleman February 26, 20172 comments

Firmware teams that avoid malloc or new need safer alternatives, and this post makes a strong case for C++11 std::array as that alternative. It highlights zero-overhead, type-safe, compile-time buffers and points to an ESP32 LED-strip demo where NUM_PIXELS_ fixes RAM usage at build time. Read it to see std::array used with std::rotate, passed to C libraries via data(), and as a low-risk path to std::vector later.


How to Design Reliable Reset Circuits for Embedded Microcontrollers

Lance HarvieLance Harvie April 21, 2025

In the world of embedded systems, the reset circuit is a critical component that ensures the microcontroller starts up correctly and recovers gracefully from unexpected events like power fluctuations or software crashes. A poorly designed reset circuit can lead to erratic behavior, system lockups, or even permanent damage to the microcontroller. For embedded engineers, designing a reliable reset circuit is essential for ensuring the stability and robustness of the system.


Hidden Gems from the Embedded Online Conference Archives - Part 3

Tim GuiteTim Guite April 4, 20252 comments

Jack Ganssle shows us what we can learn by studying previous failures - and why this is essential for anyone working in embedded systems.


Elliptic Curve Cryptography - Extension Fields

Mike RosingMike Rosing October 29, 2023

An introduction to the pairing of points on elliptic curves. Point pairing normally requires curves over an extension field because the structure of an elliptic curve has two independent sets of points if it is large enough. The rules of pairings are described in a general way to show they can be useful for verification purposes.


Open-Source Licenses Made Easy with Buildroot and Yocto for Embedded Linux

George EmadGeorge Emad October 2, 2023

In this article I will try to explain what are the copyrights/copyleft, what are the popular opensource software licenses, and how to make sure that your Embedded Linux system complies with them using popular build systems ; Buildroot or YOCTO projec


The three laws of safe embedded systems

Michael J. PontMichael J. Pont November 12, 20151 comment

This short article is part of an ongoing series in which I aim to explore some techniques that may be useful for developers and organisations that are beginning their first safety-related embedded project.


Learning From Engineering Failures

Steve BranamSteve Branam July 29, 2021

Engineering failures are the best teachers when you study them with curiosity and rigor. This post gathers the author's approach and curated resources for learning from incidents, with an emphasis on treating human error as a symptom of layered systemic problems rather than the root cause. Read on for practical guidance, longtime sources like Risks Digest, and a mindset: trust nothing, and verify.


Hidden Gems from the Embedded Online Conference Archives - Part 2

Tim GuiteTim Guite March 20, 20252 comments

A look back at a deep dive into the Mars Perseverance flight software from one of the technical leads at JPL.


Introducing The VolksEEG Project

Steve BranamSteve Branam October 31, 2021

VolksEEG is an open-source effort to build an FDA-cleared clinical EEG and publish every design so others can manufacture it. The volunteer-driven project centers on the TI ADS1299 8-channel, 24-bit biopotential ADC and combines medical and electrical engineering expertise to confront regulatory, safety, and usability challenges. This blog series will document technical decisions, isolation and safety concerns, and ways engineers can contribute.


Elliptic Curve Cryptography - Multiple Signatures

Mike RosingMike Rosing November 19, 2023

Point pairings let you compress many independent elliptic-curve signatures into a single verification, reducing n checks to one. This post explains how each signer derives a coefficient from the ordered list of public keys, aggregates signatures on the base group and public keys on the extension group, and verifies everything with one pairing computation. It also flags practical cautions like key validation and agreed ordering.


“Smarter” cars, unintended acceleration – and unintended consequences

Michael J. PontMichael J. Pont October 20, 2015

Smarter cars are arriving fast, but the software tricks behind them may be creating new safety and compliance risks. This post connects Tesla’s autopilot, the VW emissions scandal, and a reported Porsche throttle-delay case to ask whether automotive standards and regulations are keeping pace with increasingly intelligent vehicle control systems.