{"id":133636,"date":"2026-10-08T09:12:55","date_gmt":"2026-10-08T09:12:55","guid":{"rendered":"https:\/\/www.seeedstudio.com\/blog\/?p=133636"},"modified":"2026-10-08T09:12:58","modified_gmt":"2026-10-08T09:12:58","slug":"seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/","title":{"rendered":"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"580\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1030x580.png\" alt=\"\" class=\"wp-image-133868\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1030x580.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-300x169.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-32x18.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-768x432.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1536x864.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1023x576.png 1023w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png 1672w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Building a functional test setup for one PCBA is relatively straightforward. The challenge is making it reusable across different products.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To reduce repeated hardware and software development, we built a modular testing architecture based on three parts:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Universal Test Box \u2192 Product-Specific<\/strong> <strong>Adapter<\/strong> <strong>Board \u2192 Configurable Test Software<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common test resources are integrated into the reusable Test Box, while each new product mainly requires an adapter board and its own test workflow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide explains the complete architecture and walks through a real reference project using the <strong>reSpeaker Flex XVF3800 Core Board with XIAO<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Table of Contents<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>How the Modular Test System Works<\/strong><\/li>\n\n\n\n<li><strong>Why Use a Modular Test Architecture?<\/strong><\/li>\n\n\n\n<li><strong>Universal Test Box Capabilities<\/strong><\/li>\n\n\n\n<li><strong>Software Test Framework<\/strong><\/li>\n\n\n\n<li><strong>How to Adapt the System to Your Own PCBA<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reference Project: reSpeaker Flex XVF3800 Core Board with XIAO<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test Plan<\/li>\n\n\n\n<li>Adapter Board Design<\/li>\n\n\n\n<li>Test Software Configuration<\/li>\n\n\n\n<li>Test Fixture &amp; Software Reference<\/li>\n<\/ul>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>Open-Source Resources<\/strong><\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<h1 class=\"wp-block-heading\"><\/h1>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">1. How the Modular Test System Works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The system separates <strong>reusable test resources<\/strong> from <strong>product-specific adaptation<\/strong>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Your PCBA \u2192<\/strong> <strong>Adapter<\/strong> <strong>Board \u2192 Universal Test Box \u2192 Test Software \u2192 PASS \/ FAIL<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1030\" height=\"311\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-1030x311.png\" alt=\"\" class=\"wp-image-133871\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-1030x311.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-300x91.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-768x232.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-32x10.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited-1024x310.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-54-edited.png 1280w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Adapter Board<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Adapter Board provides the product-specific connection between the PCBA and the standardized interfaces of the Test Box.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a new product, you mainly need to map the required signals to the appropriate Test Box resources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Universal Test Box<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Universal Test Box integrates common test resources \u2014 including <strong>UART, RS485,<\/strong> <strong>USB<\/strong><strong>,<\/strong> <strong>ADC<\/strong><strong>,<\/strong> <strong>GPIO<\/strong><strong>, I\u00b2C, power control, and programming interfaces<\/strong> \u2014 into one reusable platform.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These functions can be reused across different products instead of being redesigned for every new PCBA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Test Software<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The software controls the test sequence and calls reusable functions for <strong>communication, programming, measurement, and result validation<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each product can use its own test configuration, while the underlying software framework remains reusable.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<h1 class=\"wp-block-heading\"><\/h1>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">2. Why Use a Modular Test Architecture?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In a traditional product-specific approach, each new product often requires a dedicated companion test board designed around its specific test requirements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A modular architecture separates <strong>reusable testing resources<\/strong> from the <strong>product-specific interface<\/strong>, reducing repeated hardware development and making the test system easier to reuse across different products.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">Traditional Product-Specific Test Board<\/td><td class=\"has-text-align-center\" data-align=\"center\">Universal Test Box + Adapter Board<\/td><\/tr><tr><td>Development<\/td><td>A complete test board must be designed, manufactured, and debugged for each product<\/td><td>Only a relatively simple adapter board needs to be designed<\/td><\/tr><tr><td>Reusability<\/td><td>Test circuits are difficult to reuse across products<\/td><td>The same Test Box can support multiple products<\/td><\/tr><tr><td>Maintenance<\/td><td>Multiple boards and versions need to be maintained<\/td><td>Core test hardware is centralized and standardized<\/td><\/tr><tr><td>Consistency<\/td><td>Different products may use different circuits and layouts<\/td><td>Core test hardware remains consistent<\/td><\/tr><tr><td>Scalability<\/td><td>New test hardware must be developed for each product<\/td><td>The same platform can be reused as more products are added<\/td><\/tr><tr><td>Engineering Effort<\/td><td>Greater dependence on dedicated hardware development<\/td><td>Product adaptation focuses mainly on interface mapping<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The result is more than a different fixture design \u2014 it is a <strong>reusable platform for functional testing<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<h2 class=\"wp-block-heading\"><\/h2>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">3. Universal Test Box Capabilities<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Universal Test Box brings commonly used hardware resources into one reusable platform, allowing different PCBAs to share the same core test hardware.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1030\" height=\"579\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-1030x579.png\" alt=\"\" class=\"wp-image-133873\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-1030x579.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-300x169.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-768x432.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-32x18.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited-1024x576.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-55-edited.png 1280w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The Test Box exposes standardized <strong>Power &amp;<\/strong> <strong>ADC<\/strong><strong>, Signal, and Expansion interfaces<\/strong>, allowing product-specific adapter boards to connect only the resources required for each test.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"336\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-1030x336.png\" alt=\"\" class=\"wp-image-133874\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-1030x336.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-32x10.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-300x98.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-766x250.png 766w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56-1023x334.png 1023w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-56.png 1280w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"580\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-1030x580.png\" alt=\"\" class=\"wp-image-133875\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-1030x580.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-300x169.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-768x432.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-32x18.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-1536x864.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57-1023x576.png 1023w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-57.png 1672w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Available Hardware Resources<\/h3>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Category<\/td><td class=\"has-text-align-center\" data-align=\"center\">Test Resource<\/td><td class=\"has-text-align-center\" data-align=\"center\">Quantity<\/td><td class=\"has-text-align-center\" data-align=\"center\">Notes<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Measurement<\/td><td>ADC measurement channels<\/td><td class=\"has-text-align-center\" data-align=\"center\">18<\/td><td>2 channels without voltage division; external voltage division is required when the target voltage exceeds 3.3 V<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\" rowspan=\"6\">Power Control<\/td><td>Controllable power output<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>Output voltage equals the Test Box input voltage<\/td><\/tr><tr><td>Controllable DC 5 V output<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>Controllable DC 3.3 V output<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td>\u2014<\/td><\/tr><tr><td>Controllable DC 1.8 V output<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>PMOS switches<\/td><td class=\"has-text-align-center\" data-align=\"center\">4<\/td><td>\u2014<\/td><\/tr><tr><td>Adjustable simulated battery<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\" rowspan=\"6\">Communication<\/td><td>USB-to-UART<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td>\u2014<\/td><\/tr><tr><td>RS232<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>RS485<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>RS422<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>CAN<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td>\u2014<\/td><\/tr><tr><td>USB interfaces<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td>One USB port supports controllable power output<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Programming<\/td><td>J-Link<\/td><td class=\"has-text-align-center\" data-align=\"center\">4<\/td><td>\u2014<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Digital I\/O<\/td><td>GPIO<\/td><td class=\"has-text-align-center\" data-align=\"center\">12<\/td><td>\u2014<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These resources can be combined according to the test requirements of each product \u2014 for example, measuring power rails, verifying communication interfaces, programming firmware, checking GPIO, or testing USB functions.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<h2 class=\"wp-block-heading\"><\/h2>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">4. Software Test Framework<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Universal Test Box is paired with a reusable software framework, so each new product does not require a completely new test application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The framework provides common functions for <strong>workflow<\/strong> <strong>control, communication, firmware programming, result validation, and test logging<\/strong>. For each product, developers can define the required test sequence through configuration and reuse the existing functions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Key Software Capabilities<\/h3>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Category<\/td><td class=\"has-text-align-center\" data-align=\"center\">Capabilities<\/td><\/tr><tr><td>Workflow<\/td><td>Test sequence execution, step control, and PASS \/ FAIL validation<\/td><\/tr><tr><td>Communication<\/td><td>Serial, SSH, BLE, and other communication functions<\/td><\/tr><tr><td>Programming<\/td><td>J-Link, ESP, XMODEM \/ YMODEM, and other firmware flashing tools<\/td><\/tr><tr><td>Test Functions<\/td><td>GPIO, RF, audio, and product-specific functional tests<\/td><\/tr><tr><td>Production Support<\/td><td>Barcode handling, product configuration, test logs, and workstation information<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Software Architecture<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The framework separates the <strong>user interface<\/strong><strong>,<\/strong> <strong>workflow<\/strong> <strong>engine, reusable test modules, product configurations, firmware, and logs<\/strong>, allowing the same software foundation to be reused across different products.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>View Full Software Architecture<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-background\" style=\"background-color:#abb8c429\"><code>Seeed_Factory_Auto_Test_Tool\/\n\u251c\u2500\u2500 main.py\n\u251c\u2500\u2500 config.ini\n\u251c\u2500\u2500 function.json\n\u251c\u2500\u2500 product_list.txt\n\u251c\u2500\u2500 environment.yml\n\u251c\u2500\u2500 build.bat\n\u251c\u2500\u2500 scan_hidden_imports.py\n\u251c\u2500\u2500 zip_utf8.py\n\u251c\u2500\u2500 generate_manifest.py\n\u251c\u2500\u2500 app_icon.ico\n\u2502\n\u251c\u2500\u2500 window\/\n\u2502   \u251c\u2500\u2500 flash_window.py\n\u2502   \u251c\u2500\u2500 index_window.py\n\u2502   \u251c\u2500\u2500 operation_window.py\n\u2502   \u2514\u2500\u2500 view_interface\/\n\u2502       \u251c\u2500\u2500 home_interface.py\n\u2502       \u251c\u2500\u2500 tool_interface.py\n\u2502       \u251c\u2500\u2500 config_interface.py\n\u2502       \u251c\u2500\u2500 add_ini_interface.py\n\u2502       \u251c\u2500\u2500 add_product_interface.py\n\u2502       \u2514\u2500\u2500 edit_ini_interface.py\n\u2502\n\u251c\u2500\u2500 main_function_deal\/\n\u2502   \u2514\u2500\u2500 function_thread.py\n\u2502\n\u251c\u2500\u2500 custom_component\/\n\u2502   \u251c\u2500\u2500 sys_control\/\n\u2502   \u251c\u2500\u2500 serial_tool\/\n\u2502   \u251c\u2500\u2500 ssh_tool\/\n\u2502   \u251c\u2500\u2500 flash_firmware\/\n\u2502   \u251c\u2500\u2500 esp_tool\/\n\u2502   \u251c\u2500\u2500 other_tool\/\n\u2502   \u251c\u2500\u2500 product_special_func\/\n\u2502   \u2514\u2500\u2500 window_component\/\n\u2502\n\u251c\u2500\u2500 qfluentwidgets\/\n\u251c\u2500\u2500 product_function_ini\/\n\u251c\u2500\u2500 product_firmware\/\n\u251c\u2500\u2500 product_images\/\n\u251c\u2500\u2500 product_test_scripts\/\n\u251c\u2500\u2500 product_log\/\n\u251c\u2500\u2500 temp_log\/\n\u251c\u2500\u2500 jlink_tool\/\n\u251c\u2500\u2500 esp_tools\/\n\u251c\u2500\u2500 adafruit_tools\/\n\u251c\u2500\u2500 meshtastic_tools\/\n\u2514\u2500\u2500 wt328_wavefile\/<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5. How to Adapt the System to Your Own PCBA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To adapt the platform to a new PCBA, the process can be divided into four steps:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"339\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-1030x339.png\" alt=\"\" class=\"wp-image-133877\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-1030x339.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-300x99.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-768x253.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-32x11.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited-1024x337.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-58-edited.png 1280w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 \u2014 Define Your Test Requirements<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Start by identifying <strong>what needs to be tested, how it will be tested, and what counts as PASS<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical functional tests may cover power rails, voltage levels, GPIO, UART, I\u00b2C, USB, buttons, LEDs, sensors, firmware programming, audio, and other product-specific functions.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Test Item<\/td><td class=\"has-text-align-center\" data-align=\"center\">Method<\/td><td class=\"has-text-align-center\" data-align=\"center\">PASS Criteria<\/td><\/tr><tr><td>3.3 V rail<\/td><td>ADC measurement<\/td><td>3.3 V \u00b15%<\/td><\/tr><tr><td>GPIO<\/td><td>Output toggle \/ input detection<\/td><td>Expected HIGH \/ LOW detected<\/td><\/tr><tr><td>I\u00b2C<\/td><td>Scan bus<\/td><td>Expected device address detected<\/td><\/tr><tr><td>Firmware<\/td><td>Program device<\/td><td>Programming completes successfully<\/td><\/tr><tr><td>USB<\/td><td>Enumerate device<\/td><td>Device detected by PC<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The test plan becomes the basis for both the hardware connection and the software workflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2 \u2014 Map Test Requirements to Test Box Resources<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Next, match each test item to an available resource in the Universal Test Box.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Test Requirement<\/td><td class=\"has-text-align-center\" data-align=\"center\">Test Box Resource<\/td><\/tr><tr><td>Voltage measurement<\/td><td>ADC channel<\/td><\/tr><tr><td>GPIO verification<\/td><td>GPIO<\/td><\/tr><tr><td>Serial communication<\/td><td>USB-to-UART<\/td><\/tr><tr><td>Firmware programming<\/td><td>J-Link \/ supported programming tool<\/td><\/tr><tr><td>USB function<\/td><td>USB interface<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This mapping determines which signals need to be routed through the product-specific Adapter Board.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3 \u2014 Design the Adapter Board<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Adapter Board connects the PCBA under test to the standardized interfaces of the Universal Test Box.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because the common test resources are already integrated into the Test Box, the Adapter Board mainly needs to <strong>route the required product signals to the corresponding Test Box resources<\/strong>, rather than rebuilding the complete test circuitry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We\u2019ll show a complete Adapter Board example in the reference project below.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4 \u2014 Configure the Test Workflow<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the hardware connection is ready, define the test sequence in the software framework.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow can be configured through an <strong>INI<\/strong> <strong>file<\/strong>, using predefined functions and parameters for each test step. The newer software also supports <strong>graphical drag-and-drop configuration<\/strong> to simplify workflow setup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At its simplest, each step follows the same logic: <strong>Action \u2192 Expected Result \u2192 PASS \/ FAIL<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example: <strong>Enable 3.3 V power \u2192 Measure TP7 \u2192 3.3 V \u00b15% \u2192 PASS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The framework remains the same across products; only the test sequence and product-specific configuration need to be adapted.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<h2 class=\"wp-block-heading\"><\/h2>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Reference Project: reSpeaker Flex XVF3800 Core Board with XIAO<\/mark><\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To show how the platform works in a real project, we are sharing an <strong>open-source test reference based on a Seeed product \u2014 the reSpeaker Flex XVF3800 Core Board with XIAO<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reference covers the complete workflow from test planning and resource mapping to Adapter Board design and software configuration. With multiple power paths, USB, audio, GPIO, I\u00b2C, I\u00b2S, XIAO, and XMOS firmware, it provides a practical example for adapting the platform to a complex PCBA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Define the Test Items<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original project test plan covers the following areas.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Test Area<\/td><td class=\"has-text-align-center\" data-align=\"center\">Test Method<\/td><td class=\"has-text-align-center\" data-align=\"center\">PASS Criteria<\/td><\/tr><tr><td>LED<\/td><td>Visual inspection + software confirmation<\/td><td>Green LED turns on at power-up<\/td><\/tr><tr><td>Power inputs<\/td><td>Individually power through USB 5 V, Type-C 5 V, Pad 5 V, XIAO 5 V, and 12 V; ADC measurement at TP3<\/td><td>TP3: 5 V \u00b15%; PVCC1: 12 V \u00b15%<\/td><\/tr><tr><td>VDDIO<\/td><td>ADC at TP7<\/td><td>3.3 V \u00b15%<\/td><\/tr><tr><td>AUDIO_1V8<\/td><td>ADC at TP6<\/td><td>1.8 V \u00b15%<\/td><\/tr><tr><td>0V9<\/td><td>ADC at TP8<\/td><td>0.9 V \u00b15%<\/td><\/tr><tr><td>XMOS firmware &amp; SN<\/td><td>Flash USB test firmware through debug interface and write SN<\/td><td>Firmware flashing and SN writing succeed<\/td><\/tr><tr><td>USB Type-C<\/td><td>Test both connector orientations<\/td><td>XMOS is recognized in both orientations<\/td><\/tr><tr><td>PH connector USB<\/td><td>USB signal verification<\/td><td>PC recognizes XMOS in safe mode<\/td><\/tr><tr><td>XMOS + FPC<\/td><td>Recording with microphone array<\/td><td>Four-channel recording data is normal<\/td><\/tr><tr><td>Codec \/ Speaker<\/td><td>Audio playback<\/td><td>10 W \/ 4 \u03a9 speaker output is normal<\/td><\/tr><tr><td>Mute<\/td><td>Insert\/remove headphone during playback and test software mute<\/td><td>Playback switches correctly and software mute works<\/td><\/tr><tr><td>Pin Header GPIO<\/td><td>X0D00 \/ X0D11 \/ X0D39 GPIO toggle and input detection<\/td><td>GPIO operates normally<\/td><\/tr><tr><td>I\u00b2C<\/td><td>PC controls volume<\/td><td>Volume can be controlled normally<\/td><\/tr><tr><td>I\u00b2S<\/td><td>PC recording \/ playback<\/td><td>Audio data is normal<\/td><\/tr><tr><td>RST<\/td><td>Button test<\/td><td>Pressing Reset resets XMOS<\/td><\/tr><tr><td>Boot<\/td><td>Button + power-on<\/td><td>XMOS enters safe mode<\/td><\/tr><tr><td>XIAO firmware<\/td><td>Program XIAO test firmware \/ relevant product firmware<\/td><td>Programming completes<\/td><\/tr><tr><td>XIAO D0\u2013D3<\/td><td>GPIO verification<\/td><td>D1 can reset XMOS; D0\/D2\/D3 toggle normally<\/td><\/tr><tr><td>XIAO LED<\/td><td>Visual + software confirmation<\/td><td>Red and yellow LEDs turn on as expected<\/td><\/tr><tr><td>XIAO I\u00b2C<\/td><td>Scan I\u00b2C bus<\/td><td>Codec detected at address 0x18<\/td><\/tr><tr><td>XIAO I\u00b2S<\/td><td>Record through XIAO<\/td><td>Recording data is normal<\/td><\/tr><tr><td>Shipping firmware<\/td><td>Program XIAO shipping firmware<\/td><td>Programming completes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This test plan becomes the foundation for both the adapter-board design and the software workflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Adapter Board Design<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">After the test items and required signals are identified, the next step is to design the product-specific adapter board.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this reference project, the adapter board only needs to route the required product signals to the standardized Test Box interface rather than recreating all of the test hardware.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"515\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-1030x515.png\" alt=\"\" class=\"wp-image-133878\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-1030x515.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-300x150.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-768x384.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-32x16.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-1536x768.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59-1024x512.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-59.png 1774w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The same principle can be applied to another PCBA:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Identify required test signals.<\/li>\n\n\n\n<li>Select the corresponding Test Box resources.<\/li>\n\n\n\n<li>Map those signals to the standard connector.<\/li>\n\n\n\n<li>Build the product-specific adapter.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">3. Test Software Configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">After the hardware is connected, the same test framework can be reused for the new product.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this reference project, the test sequence is defined through an INI configuration. The workflow includes Test Box initialization, board identification, power control, XIAO firmware flashing, device verification, SN checking, and power-off handling.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc47Below is the full configuration example provided for the reference project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Full Configuration Example<\/h3>\n\n\n\n<pre class=\"wp-block-code has-background\" style=\"background-color:#abb8c429\"><code>&#91;configure]\nbarcoder_status=True\nupload_file_status=False\n\n&#91;steps]\n#begin\nstart_time=custom_component.product_special_func.operation_prompt_func.time_start\n\n#test box init\ntest_init_remind=custom_component.other_tool.print_tool.print_message@Step Remind:\u6d4b\u8bd5\u76d2\u521d\u59cb\u5316....\ntest_fixture_response=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@2E8A@000A@9600@AT\ncheck_test_fixture_recall=custom_component.other_tool.temp_return_deal.check_string_in_step@test_fixture_response@OK\n\ntest_init=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@2E8A@000A@9600@AT+PINOUT=15,17,18,11,12,13|0,0,1,0,0,0\ncheck_test_init=custom_component.other_tool.temp_return_deal.check_string_in_step@test_init@OK\n\ntest_gpio_init=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@2E8A@000A@9600@AT+TCA6424AIN=5,6,7,17,18,19,20\ncheck_test_gpio_init=custom_component.other_tool.temp_return_deal.check_string_in_step@test_gpio_init@OK\n\n#scan board qrcode\nscan_board_qrcode_remind=custom_component.other_tool.print_tool.print_message@Step Remind:Scan Board SN....\nscan_board_qrcode=self.get_barcoder_input\nget_product_sn=custom_component.other_tool.temp_return_deal.deal_return_by_length@scan_board_qrcode@18\nget_product_sku=custom_component.other_tool.temp_return_deal.deal_return_by_length@get_product_sn@9\ncheck_board_sku=custom_component.other_tool.temp_return_deal.check_string_in_step_multi@get_product_sku@100070894,100026178\n\n#power on product\npower_on_product=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@2E8A@000A@9600@AT+PINOUT=15,17,18,11,12,13|0,1,1,0,1,0\ncheck_power_on_product=custom_component.other_tool.temp_return_deal.check_string_in_step@power_on_product@OK\n\n#xiao firm flash and xvf3800 firm version check, then falsh xiao blank\nput_on_remind_confirm=custom_component.product_special_func.operation_prompt_func.show_image_selector@\u4ea7\u54c1\u653e\u4e0a\u6cbb\u5177\u538b\u5408\u540e, \u5c06\u6cbb\u5177\u76d2\u5b50\u7684\u4ea7\u54c1USB\u7ebf\u8fde\u63a5\u5230XIAO\u7684typeC\u53e3, \u786e\u8ba4\u4ea7\u54c1\u7eff\u706f\u4eae,XIAO\u53ea\u4eae\u7ea2\u706f\uff0c\u70b9\u51fbOK@product_images\/product_special_images\/202004622_respeaker_flex_core\/xiao_check.jpg\n\nflash_xiao_test_firm=custom_component.esp_tool.esptool_programer.program_esp_firmware_v49@303A@1001@--chip esp32s3 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x0 product_firmware\/respeaker_flex_xvf3800\/xiao\/respeaker_xiao.ino.bootloader.bin 0x8000 product_firmware\/respeaker_flex_xvf3800\/xiao\/respeaker_xiao.ino.partitions.bin 0xe000 product_firmware\/respeaker_flex_xvf3800\/xiao\/boot_app0.bin 0x10000 product_firmware\/respeaker_flex_xvf3800\/xiao\/respeaker_xiao.ino.bin\n\ncheck_flash_xiao_test_firm=custom_component.other_tool.temp_return_deal.check_string_in_step@flash_xiao_test_firm@True\n\nled_xiao_confirm=custom_component.product_special_func.operation_prompt_func.show_image_selector@\u786e\u8ba4XIAO\u7684\u9ec4\u706f\u4eae, \u70b9\u51fbOK@product_images\/product_special_images\/202004622_respeaker_flex_core\/xiao_led.jpg\n\nxiao=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@303A@1001@115200@XIAO\\r\\n\ncheck_xiao=custom_component.other_tool.temp_return_deal.check_string_in_step@xiao@OK\n\nxiao_info=custom_component.product_special_func.respeaker_flex_special_func.check_xiao_info@product_function_ini\\202004622_xiao_test.ini@get_product_sku\ncheck_xiao_info=custom_component.other_tool.temp_return_deal.check_string_in_step@xiao_info@True\n\nxiao_uart_close_1=custom_component.product_special_func.respeaker_flex_special_func.xiao_serial_close\n\nflash_xiao_blank_remind=custom_component.other_tool.print_tool.print_message@Step Remind: \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014  XIAO \u51fa\u8d27\u7a7a\u767d\u56fa\u4ef6\u70e7\u5f55 \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\n\nflash_xiao_blank=custom_component.esp_tool.esptool_programer.program_esp_firmware_v49@303A@1001@--chip esp32s3 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x0 product_firmware\/respeaker_flex_xvf3800\/xiao\/blank.ino.bootloader.bin 0x8000 product_firmware\/respeaker_flex_xvf3800\/xiao\/blank.ino.partitions.bin 0xe000 product_firmware\/respeaker_flex_xvf3800\/xiao\/boot_app0.bin 0x10000 product_firmware\/respeaker_flex_xvf3800\/xiao\/blank.ino.bin\n\ncheck_flash_xiao_blank=custom_component.other_tool.temp_return_deal.check_string_in_step@flash_xiao_blank@True\n\n#check product sn\nread_sn_remind=custom_component.other_tool.print_tool.print_message@Step Remind: \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014 SN\u68c0\u67e5 \u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nread_sn=custom_component.product_special_func.respeaker_flex_special_func.read_xmos@0x000003f8@--id 0\ntest_read_sn=custom_component.other_tool.temp_return_deal.step_two_return_equal@read_sn@get_product_sn\ncheck_test_read_sn=custom_component.other_tool.temp_return_deal.check_string_in_step@test_read_sn@True\n\n#power off\npower_off_sn=custom_component.serial_tool.serial_funcbox.serial_send_and_receive@2E8A@000A@9600@AT+PINOUT=15,17,18,11,12,13|0,0,1,0,0,0\ncheck_power_off_sn=custom_component.other_tool.temp_return_deal.check_string_in_step@power_off_sn@OK\npower_off_sn_delay=time.sleep@1\n\n#end step\nend_steps=custom_component.other_tool.print_tool.print_message@writeSN END!\nend_time=custom_component.product_special_func.operation_prompt_func.time_end<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The important point here is not that every project uses the same configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, the <strong>framework remains reusable while the configuration changes according to the product<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Test Fixture and Software Reference<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Test Fixture<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The reference project uses a physical fixture to position the PCBA and make repeatable connections to the required test points and interfaces.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"795\" height=\"1030\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60-795x1030.png\" alt=\"\" class=\"wp-image-133879\" style=\"aspect-ratio:0.7718512992664429;width:289px;height:auto\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60-795x1030.png 795w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60-231x300.png 231w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60-25x32.png 25w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60-768x995.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-60.png 912w\" sizes=\"(max-width: 795px) 100vw, 795px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/seeedstudio.feishu.cn\/space\/api\/box\/stream\/download\/asynccode\/?code=ZDVjNjc0NThjZGJhZGNlN2JhZTRhZjhmZWY1NzMyZThfRE1zZmJkWTFLb01xUHhneGJpbFMweTlDdFdVNlJ6T2JfVG9rZW46TUtyNmJrYlFGbzlqa1h4SXRSOGNyNHhTbnJnXzE3OTAyNDc2MDM6MTc5MDI1MTIwM19WNA&amp;add_watermark=true&amp;scene_type=CCM\" alt=\"\"\/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The mechanical fixture, product adapter, and Universal Test Box work together to turn the test plan into a repeatable manufacturing process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reference Test Software<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In our production environment, Seeed uses an internal test application to <strong>execute configured test sequences, display test progress, and determine PASS \/ FAIL results<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Together with the Test Box hardware, it demonstrates how a complete functional test system can be built around a reusable hardware and software architecture.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"708\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-1030x708.png\" alt=\"\" class=\"wp-image-133881\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-1030x708.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-32x22.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-300x206.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-767x527.png 767w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61-1023x703.png 1023w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-61.png 1132w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Developers can use the same architecture and interface concepts to build their own test system. If you are interested in building a similar test setup for your own product, contact <strong>Seeed Fusion<\/strong> to discuss a customized solution.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A typical test application may include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hardware resource control;<\/li>\n\n\n\n<li>test-sequence execution;<\/li>\n\n\n\n<li>data collection and validation;<\/li>\n\n\n\n<li>product-specific PASS \/ FAIL criteria;<\/li>\n\n\n\n<li>test-result display and logging.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ready to Build Your Own Test Workflow?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use the open-source reference to adapt the architecture to your own XIAO-based expansion board or custom PCBA.<\/p>\n\n\n\n<div class=\"wp-block-blockspare-blockspare-buttons blockspare-0c76f5eb-8803-4 blockspare-block-button-wrap\" blockspare-animation=\"\"><style>.blockspare-0c76f5eb-8803-4 .blockspare-block-button{text-align:left;margin-top:30px;margin-bottom:30px;margin-left:0px;margin-right:0px}.blockspare-0c76f5eb-8803-4 .blockspare-block-button span{color:#fff;border-width:2px;font-size:16px}.blockspare-0c76f5eb-8803-4 .blockspare-block-button .blockspare-button{background-color:var(--bgcolor)}.blockspare-0c76f5eb-8803-4 .blockspare-block-button .blockspare-button:visited{background-color:var(--bgcolor)}.blockspare-0c76f5eb-8803-4 .blockspare-block-button .blockspare-button:focus{background-color:var(--bgcolor)}.blockspare-0c76f5eb-8803-4 .blockspare-block-button i{font-size:16px}.blockspare-0c76f5eb-8803-4 .blockspare-block-button a{padding-top:12px;padding-bottom:12px;padding-right:22px;padding-left:22px}@media screen and (max-width:1025px){.blockspare-0c76f5eb-8803-4 .blockspare-block-button span{font-size:14px}.blockspare-0c76f5eb-8803-4 .blockspare-block-button i{font-size:14px}}@media screen and (max-width:768px){.blockspare-0c76f5eb-8803-4 .blockspare-block-button span{font-size:14px}.blockspare-0c76f5eb-8803-4 .blockspare-block-button i{font-size:14px}}<\/style><div class=\"blockspare-block-button\"><a class=\"blockspare-button blockspare-button-shape-rounded blockspare-button-size-small\"><span><strong>Explore the  Testing SolutionsProject \u2192<\/strong><\/span><\/a><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Have questions or need help with your test setup? Contact us at fusion@seeed.io<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building a functional test setup for one PCBA is relatively straightforward. The challenge is making<\/p>\n","protected":false},"author":3684,"featured_media":133868,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[1,4705],"tags":[],"class_list":["post-133636","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-seeed-studio-fusion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow\" \/>\n<meta property=\"og:description\" content=\"Building a functional test setup for one PCBA is relatively straightforward. The challenge is making\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-08T09:12:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T09:12:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ginny Zhang\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ginny Zhang\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/\",\"name\":\"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png\",\"datePublished\":\"2026-10-08T09:12:55+00:00\",\"dateModified\":\"2026-10-08T09:12:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1751c9fea8e64551e5b4edf14308caa0\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png\",\"width\":1672,\"height\":941},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1751c9fea8e64551e5b4edf14308caa0\",\"name\":\"Ginny Zhang\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5a1b9a107899afc170a68753a4176ce52ca54f758ffec57207d03eb4dfbfa80c?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5a1b9a107899afc170a68753a4176ce52ca54f758ffec57207d03eb4dfbfa80c?s=96&r=g\",\"caption\":\"Ginny Zhang\"},\"description\":\"Email: jianjin.zhang@seeed.cc\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/jianjin-zhangseeed-cc\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/","og_locale":"en_US","og_type":"article","og_title":"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow","og_description":"Building a functional test setup for one PCBA is relatively straightforward. The challenge is making","og_url":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2026-10-08T09:12:55+00:00","article_modified_time":"2026-10-08T09:12:58+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png","type":"image\/png"}],"author":"Ginny Zhang","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ginny Zhang","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/","url":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/","name":"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png","datePublished":"2026-10-08T09:12:55+00:00","dateModified":"2026-10-08T09:12:58+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1751c9fea8e64551e5b4edf14308caa0"},"breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png","width":1672,"height":941},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/10\/08\/seeed-fusion-open-source-modular-pcba-testing-a-complete-guide-from-hardware-to-test-workflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Open-Source Modular PCBA Testing: A Complete Guide from Hardware to Test Workflow"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1751c9fea8e64551e5b4edf14308caa0","name":"Ginny Zhang","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5a1b9a107899afc170a68753a4176ce52ca54f758ffec57207d03eb4dfbfa80c?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5a1b9a107899afc170a68753a4176ce52ca54f758ffec57207d03eb4dfbfa80c?s=96&r=g","caption":"Ginny Zhang"},"description":"Email: jianjin.zhang@seeed.cc","url":"https:\/\/www.seeedstudio.com\/blog\/author\/jianjin-zhangseeed-cc\/"}]}},"modified_by":"Ginny Zhang","views":8,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png",1672,941,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-80x80.png",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-300x169.png",300,169,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-768x432.png",640,360,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1030x580.png",640,360,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1536x864.png",1536,864,true],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53.png",1672,941,false],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-32x18.png",32,18,true],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1536x941.png",1536,941,true],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-936x897.png",936,897,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-1023x576.png",1023,576,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-720x380.png",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-53-675x450.png",675,450,true]},"author_info":{"display_name":"Ginny Zhang","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/jianjin-zhangseeed-cc\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a> <a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/seeed-studio-fusion\/\" rel=\"category tag\">Seeed Studio Fusion<\/a>","tag_info":"Seeed Studio Fusion","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/133636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3684"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=133636"}],"version-history":[{"count":10,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/133636\/revisions"}],"predecessor-version":[{"id":134192,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/133636\/revisions\/134192"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/133868"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=133636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=133636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=133636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}