Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Embedded diagnostics work best when they are designed into a product, not added after a failure. Their job is to help production staff and repair technicians identify faults quickly—but a diagnostic that depends on the CPU, memory, or bus being tested may fail before it can report anything. The practical goal is to test likely failure modes while relying on as few unverified components as possible.

Why diagnostics belong in the product design

Development testing and product testing solve different problems. Development tests can be a milestone in the software process; production tests run repeatedly, unit after unit. The people running them may be technicians rather than software engineers, so a useful diagnostic needs to produce clear, actionable results—not merely a cryptic code or a silent halt.

Firmware choices affect how quickly a board can be tested and repaired. A simple go/no-go signal from a display or status lamp can help, but the most valuable result is one that narrows the fault enough to guide the next action. As Jack Ganssle put it, “As software engineers, it is our responsibility to give technicians the tools they need to ship the product.”

Separate kernel tests from I/O tests

Organize the test plan into two groups. Kernel tests cover the hardware and software prerequisites for running the program—such as CPU operation, RAM, ROM, and address decoding. Beyond-kernel tests cover functions the program can exercise once it is running, including selected inputs and outputs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
ESP32-S3 N16R8 Development Board, 16MB Flash 8MB PSRAM, WiFi BT
  • ✅【High-Performance ESP32-S3 Processor】Powered by the ESP32-S3 dual-core Xtensa LX7 processor with up to 240MHz clock speed, this development board features 16MB Flash and 8MB PSRAM. It provides powerful performance for IoT devices, embedded systems, AI applications and advanced DIY projects.
  • ✅【Pre-Soldered GPIO Headers for Easy Use】The board comes with pre-soldered GPIO headers, eliminating the need for manual soldering. It can be directly connected to breadboards, sensors and expansion modules, making project setup faster and more convenient for makers and developers.
  • ✅【WiFi & Bluetooth 5.0 Wireless Connectivity】Built-in 2.4GHz WiFi and Bluetooth 5.0 enable stable wireless communication for smart home, automation and IoT applications. The reserved IPEX antenna connector allows optional external antenna installation for different project requirements.
  • ✅【Large Memory & Flexible Development】With 16MB Flash and 8MB PSRAM, this ESP32-S3 board provides more storage and memory resources for complex firmware, graphical interfaces, OTA updates and data-intensive applications.
  • ✅【Arduino IDE, ESP-IDF & MicroPython Support】Compatible with Arduino IDE, ESP-IDF and MicroPython development environments. With dual USB-C interfaces and rich expansion options, it is suitable for robotics, sensors, automation and embedded system development.

This distinction matters because internal diagnostics have a structural blind spot: they need a functioning processor, boot path, memory, and bus to execute. A fault in those prerequisites may prevent the test from starting or reporting its result. Ganssle warned that a single address, data, or control-line short can prevent a program from running at all. He also described address- or data-line shorts as likely to crash a diagnostic; that is a rule of thumb, not an independently measured failure rate.

Build tests around plausible failures

  1. List the failure modes. Consider how each component and signal can fail on the actual board, including shorts, open connections, corrupted memory, and failed I/O.
  2. Rank them by likelihood and consequence. Spend effort on faults that are plausible and costly to diagnose; do not assume every theoretically possible test is worth its implementation and execution cost.
  3. Minimize dependencies. Design each test to use as few unproven components as possible. A RAM test that relies on the RAM under test to hold its code or critical state, for example, may be unable to distinguish a memory fault from a test failure.
  4. Make outcomes observable. Provide a result a technician can interpret and act on, such as a clear status indication or a diagnostic code with a defined meaning.
  5. Check whether the test can survive the fault. Ask what happens if the tested CPU, memory, bus, or control path is broken. If the test cannot execute or report, plan an independent test path where the product’s requirements justify one.

CPU instruction tests deserve particular scrutiny on highly integrated processors. Ganssle argues that partial instruction failures are uncommon in that context and that a failed test may simply halt the machine. A test that cannot produce a useful result may add little diagnostic value.

Test RAM and ROM without overclaiming

RAM patterns and complements

A basic RAM check writes a pattern, reads it back, and compares the result; repeating the check with the complement can expose some additional faults. This is an example, not a guarantee of coverage. A generic pattern routine may miss failures specific to the board’s memory devices, wiring, or address arrangement. Choose patterns and access sequences to match the hardware’s plausible failure modes, and account for the RAM the test itself needs to run.

ROM checksums or CRCs

A checksum or CRC can detect some ROM corruption by comparing a computed value with a known reference stored in ROM. This approach adds work: the reference must be generated and kept in sync with the intended image, and the implementation must calculate and compare it correctly. It also depends on enough of the processor and memory-read path functioning to perform the check. Treat a match as evidence that the checked data agrees with the reference, not proof that every part of the system works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Waveshare Luckfox Lyra Zero W Micro Linux Development Board Based On RK3506B Chip, Integrated with Triple-core Arm Cortex-A7 and Arm Cortex-M0 Processors
  • Powerful Processor for Embedded Systems: The Luckfox Lyra Zero W is powered by the Rockchip RK3506B SoC, featuring a 1.2GHz ARM Cortex-A7 processor, delivering smooth performance for running Linux-based applications and making it suitable for embedded and IoT projects.
  • High-Quality Display Interface: The board supports MIPI DSI 2-lane, allowing easy connection to high-resolution displays, ideal for applications like digital signage, HMI systems, and embedded interfaces.
  • Extensive Connectivity Options: With USB 2.0 OTG, USB Host 2.0, and GPIO pins, the Lyra Zero W allows connectivity to various peripherals, making it versatile for sensors, devices, and other embedded systems.
  • Onboard Wireless Capabilities: Equipped with Wi-Fi 6 and Bluetooth 5.2, the board supports seamless wireless communication, perfect for IoT, networking, and remote control applications.
  • Cost-Effective Solution for Development: Offering a budget-friendly price, the Lyra Zero W provides a feature-rich platform for developers to prototype and create advanced embedded systems without exceeding their budget.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

When the system cannot boot

An internal self-test cannot diagnose faults that prevent its own code from running. In that case, use a test method that does not depend on the failed boot path—for example, external diagnostic equipment or a production-test fixture suited to the board. The appropriate method depends on the hardware and the fault being investigated; the 1990 article does not specify a current equipment model or a universal procedure.

For any proposed diagnostic approach, evaluate five practical dimensions: whether it can run when kernel hardware is faulty, which CPU, memory, bus, and I/O failures it can detect, whether its output tells a technician what to do next, its execution time and implementation cost, and the effort required to maintain reference data such as ROM checksums.

Rank #4
2Pcs Type-C USB CH32V003 Development Board Minimum System core Board for Nano RISC-V
  • CH32V003 Development Minimum System Board for Nano RISC-V CH32V003F4U6 Chip TYPE-C USB 22Pin
  • on-board 24MHz Crystal oscillator
  • Power by TYPE-C USB

What remains useful in Ganssle’s 1990 article

Jack Ganssle’s “The Zen of Diagnostics,” archived as a June 1990 article in Embedded Systems Programming, addresses the enduring design problem: diagnostics should be planned around real failure modes and should not rely unnecessarily on the hardware they are meant to test. Its examples belong to their era—8088 assembly, ROM boot layouts, and simpler displays are not instructions for a modern microcontroller or SoC. Apply the principle to current bootloaders, integrated systems, and manufacturing-test setups rather than transplanting period-specific implementation details.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.