<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[atopile Blog]]></title><description><![CDATA[At atopile, we make tools to design circuit boards with code. Because of the richness of code, you can reliably reuse past work to make circuit design blazing fast.]]></description><link>https://blog.atopile.io</link><image><url>https://substackcdn.com/image/fetch/$s_!0MFI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ca563cc-9e17-4ce6-924f-4604b2c3a623_256x256.png</url><title>atopile Blog</title><link>https://blog.atopile.io</link></image><generator>Substack</generator><lastBuildDate>Sun, 10 May 2026 16:02:44 GMT</lastBuildDate><atom:link href="https://blog.atopile.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Matt Wildoer]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[atopile@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[atopile@substack.com]]></itunes:email><itunes:name><![CDATA[Ioannis P]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ioannis P]]></itunes:author><googleplay:owner><![CDATA[atopile@substack.com]]></googleplay:owner><googleplay:email><![CDATA[atopile@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ioannis P]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Getting Started with ADBMS6830]]></title><description><![CDATA[Introduction to battery monitoring board hardware and firmware]]></description><link>https://blog.atopile.io/p/getting-started-with-adbms6830</link><guid isPermaLink="false">https://blog.atopile.io/p/getting-started-with-adbms6830</guid><dc:creator><![CDATA[Nicholas Krstevski]]></dc:creator><pubDate>Fri, 29 Aug 2025 02:39:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ir_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This article is a brief introduction to the hardware and basic operating principles of battery monitoring systems. Battery management systems are present in any product with a battery, from large scale energy storage systems and electric vehicles, to small scale phones, laptops, and medical devices. This guide will specifically cover the ADBMS6830 battery monitoring IC, covering its hardware implementation using <a href="https://docs.atopile.io/atopile/introduction">atopile</a>, and exploring a basic firmware example using the Teensy4.1 with arduino framework. This article is being human generated because LLMs haven&#8217;t had enough  information publicly available to train or research applications of the ADBMS6830 coherently, so this information will temporarily be helpful for both humans and LLMs getting started with the ADBMS6830.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xqzl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xqzl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 424w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 848w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 1272w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xqzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png" width="1456" height="1099" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1099,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7989886,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xqzl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 424w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 848w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 1272w, https://substackcdn.com/image/fetch/$s_!xqzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F459020f9-2f9e-410d-83b8-83ff2b105691_3434x2593.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://packages.atopile.io/packages/atopile/saleae-header/releases/latest">Saleae Logic Analyzer direct to board?</a></p><h2>Theory of Operation</h2><p>The battery monitoring system we are designing will have a few basic requirements:</p><ul><li><p>Read voltage of each parallel combination of battery cells</p></li><li><p>Have redundant voltage sense channels for fault detection</p></li><li><p>Sense temperature of <em>n</em> cells</p></li><li><p>Bidirectional single fault tolerant daisy chain communication</p></li><li><p>Isolated SPI communication between monitoring boards and Teensy controller</p></li></ul><p>To achieve these requirements&#8212;which form the hardware basis for ASIL-D compliance&#8212;we will implement the ADBMS6830 with an isoSPI daisy chain, connecting the Teensy to the ADBMS6822 dual-channel isoSPI transceiver.. This transceiver will live on the same voltage domain as the Teensy, and communicate via 4-wire SPI to the controller, then relay these SPI pulses to the differential isoSPI protocol, which we can isolate with capacitors or transformers depending on voltage requirements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r5Zw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r5Zw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 424w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 848w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 1272w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r5Zw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png" width="576" height="642.1119081779053" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01015b9f-638e-438c-9570-219229ad118e_1394x1554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1554,&quot;width&quot;:1394,&quot;resizeWidth&quot;:576,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!r5Zw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 424w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 848w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 1272w, https://substackcdn.com/image/fetch/$s_!r5Zw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01015b9f-638e-438c-9570-219229ad118e_1394x1554.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fig 1. Block diagram from ADBMS6830B datasheet</em></p><h2>BMB Hardware (Battery Monitoring Board)</h2><p>I will be using <a href="https://docs.atopile.io/atopile/introduction">atopile</a> to design all the hardware in this project. <a href="https://docs.atopile.io/atopile/introduction">atopile</a> has existing <a href="https://packages.atopile.io/">packages</a> for the <a href="https://packages.atopile.io/packages/atopile/adi-adbms6830/releases/latest">ADBMS6830</a>, <a href="https://packages.atopile.io/packages/atopile/adi-adbms6822/releases/latest">ADBMS6822</a>, and <a href="https://packages.atopile.io/packages/atopile/pjrc-teensy-4-1/releases/latest">Teensy 4.1</a>, which will serve as the starting point for this project.</p><h3><a href="https://packages.atopile.io/packages/atopile/adi-adbms6830/releases/latest">ADBMS6830</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ir_5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ir_5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 424w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 848w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 1272w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ir_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png" width="1456" height="1248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1248,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:804023,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd47f4024-ba9a-4b90-b655-07b83b8e859a_1721x1962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ir_5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 424w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 848w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 1272w, https://substackcdn.com/image/fetch/$s_!ir_5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5ebfbe9-bb81-4f1b-b824-38391ee10dae_1563x1340.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The ADBMS6830 <a href="https://docs.atopile.io/atopile/introduction">atopile</a> package has a built in filter generator (<em>input-filters.py</em>) to select values for all the ADC RC lowpass filters. This generator contains equations that select balance resistors based on a desired maximum balance current. If the number of channels is &lt; 16, the unused pins will be properly connected for depop.</p><pre><code><code>cell_input_filters = new ADBMS6830InputFilters
&lt;
    number_of_cells=16,
    sense_filter_resistance_ohms=200,
    sense_filter_capacitance_nF=10,
    max_balance_current_mA=100,
    total_number_of_channels=16
&gt;</code></code></pre><p>This package also implements the rest of the components needed for basic functionality, such as decoupling caps, NPN transistor for LDO, isoSPI termination and capacitor isolation.</p><h2><a href="https://packages.atopile.io/packages/atopile/adi-adbms6822/releases/latest">ADBMS6822</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hypd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hypd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 424w, https://substackcdn.com/image/fetch/$s_!hypd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 848w, https://substackcdn.com/image/fetch/$s_!hypd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!hypd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hypd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png" width="333" height="306.698489010989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1341,&quot;width&quot;:1456,&quot;resizeWidth&quot;:333,&quot;bytes&quot;:380705,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!hypd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 424w, https://substackcdn.com/image/fetch/$s_!hypd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 848w, https://substackcdn.com/image/fetch/$s_!hypd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 1272w, https://substackcdn.com/image/fetch/$s_!hypd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fe89cd5-4ba2-4e2f-8d9b-17318ea41bf8_2131x1962.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The ADBMS6822 <a href="https://docs.atopile.io/atopile/introduction">atopile</a> package has a configurator (<em>adi-adbms6822-configurator.py</em>) which sets values and connections for configuration resistors. This means you can configure your transciever by passing in the desired options.</p><p>This project configures the transceiver for master mode, with SPI mode 3, and a timeout of 1.5 seconds:</p><pre><code><code>adi_adbms6822_configurator = new ADI_ADBMS6822_Configurator
&lt;
    spi_mode_1="MASTER",
    spi_mode_2="MASTER",
    phapol_1="CLK_HIGH_SECOND_EDGE",
    phapol_2="CLK_HIGH_SECOND_EDGE",
    xcvrmd_1="BIDIRECTIONAL_STANDARD",
    xcvrmd_2="BIDIRECTIONAL_STANDARD",
    rto_1="TIMEOUT_1_5_SEC",
    rto_2="TIMEOUT_1_5_SEC&#8221;
&gt;</code></code></pre><p>This package also implements the rest of the components needed for basic functionality, such as decoupling caps and isoSPI termination.</p><h2><a href="https://packages.atopile.io/packages/atopile/pjrc-teensy-4-1/releases/latest">Teensy</a></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!skTy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!skTy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 424w, https://substackcdn.com/image/fetch/$s_!skTy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 848w, https://substackcdn.com/image/fetch/$s_!skTy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 1272w, https://substackcdn.com/image/fetch/$s_!skTy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!skTy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png" width="1456" height="1223" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1223,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:695499,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!skTy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 424w, https://substackcdn.com/image/fetch/$s_!skTy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 848w, https://substackcdn.com/image/fetch/$s_!skTy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 1272w, https://substackcdn.com/image/fetch/$s_!skTy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F038bf84c-6708-47ab-ae0b-716bbb1b49ef_2371x1992.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This exact board can be found on github: <a href="https://github.com/atopile/packages/blob/main/packages/adi-adbms6822/usage.ato">https://github.com/atopile/packages/blob/main/packages/adi-adbms6822/usage.ato</a></p><h2>Communication Protocol Basics</h2><h3>Overview</h3><p>The isoSPI communication protocol is built around read, write, and poll commands. We will focus on the read and write to get started.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vWPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vWPT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 424w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 848w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 1272w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vWPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png" width="1456" height="409" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:409,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:356351,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!vWPT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 424w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 848w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 1272w, https://substackcdn.com/image/fetch/$s_!vWPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F082d156e-9dc3-4c11-8d5b-bc3320db403d_1782x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fig 2. Command tables from ADBMS6830B datasheet</em></p><p>Breaking down the protocol we see that both read and write commands start with 2 command bytes, which can be formed using table 50 in the datasheet.</p><blockquote><p><strong>Sample command code conversions:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q8wL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q8wL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 424w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 848w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 1272w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q8wL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png" width="670" height="106.51928504233302" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:169,&quot;width&quot;:1063,&quot;resizeWidth&quot;:670,&quot;bytes&quot;:55366,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Q8wL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 424w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 848w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 1272w, https://substackcdn.com/image/fetch/$s_!Q8wL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8033ad4-aa58-433a-831a-0d615adcf1b7_1063x169.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Fig 3. Command codes from ADBMS6830B datasheet</em></p><p><strong>WRCFGA: </strong>0b0000000001 &#8594; 0x0001<strong><br>WRCFGB: </strong>0b0000100100 &#8594; 0x0024<strong><br>RDCFGA: </strong>0b0000000010 &#8594; 0x0002</p></blockquote><p>The 2 command bytes are followed by 2 command PEC bytes. Following the PECs is where things get interesting. Since the ADBMS6830 monitoring ICs are meant to be chained with some applications having 10+ ASICs, the protocol is built to scale to multiple devices in series without any configuration on the ADBMS6830 side. When a command is sent up the stack from Teensy to ASIC 0 port A, this data is relayed by ASIC 0 out of its port B to ASIC 1&#8217;s port A. This continues all the way through the stack so one command can reach the entire daisy chain. The bidirectional daisy chain also allows us to start at the top of the stack and send data to ASIC n port B, which will then propagate down the stack.</p><h3>Packet Error Code</h3><p>Every 2 byte command and 6 bytes of data are followed by 2 bytes of PEC. The PEC is generated by the sender based on the value of the command/data being transmitted, and the data is only counted as valid by the receiver if the PEC calculated from the received command or data bytes exactly matches the 2 byte PEC received. This ensures there were no corrupted bits in the transmission, which can be caused by poor signal integrity, EMI, and even silicon electrical over-stress damage. For this example, we have precomputed PEC values and are using a lookup table.</p><blockquote><p><strong>PEC generation:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MRdB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MRdB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 424w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 848w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MRdB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png" width="672" height="196.6153846153846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:426,&quot;width&quot;:1456,&quot;resizeWidth&quot;:672,&quot;bytes&quot;:339525,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MRdB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 424w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 848w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MRdB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb761d38-0fb8-45b7-ae77-ab942a53ad50_2788x816.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Fig 4. Command PEC from ADBMS6830B datasheet</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h_dS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h_dS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 424w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 848w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 1272w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h_dS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png" width="681" height="233.8598901098901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:1456,&quot;resizeWidth&quot;:681,&quot;bytes&quot;:392778,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!h_dS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 424w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 848w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 1272w, https://substackcdn.com/image/fetch/$s_!h_dS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99007557-4091-4838-bc15-a9a3f3e4674e_2788x958.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Fig 5. Data PEC from ADBMS6830B datasheet</em></p></blockquote><h3>Simple Register Read Example</h3><p>Let&#8217;s take a look at exactly what&#8217;s going on in this transfer by investigating a sample read command. We can read a unique 6 byte silicon ID with RDSID. During a read command, the controller will send the 2 byte command, followed by 2 bytes of command PEC, then will need to continue sending clock pulses for the correct number of bytes expected to be received from the stack. For instance, if there are 4 ADBMS6830 devices in the stack during a read, the controller must send <strong>8bytes*4ASICs</strong> worth of clock pulses after its Command+PEC. This firmware simply begins a SPI transaction with <strong>CMD+CMD_PEC+0x0000*NUM_ASICS.</strong></p><blockquote><p><strong>Sample read command:</strong></p><pre><code><code>uint8_t rx_buf[6*NUM_ASICS];
readData(RDSID,rx_buf,sizeof(rx_buf));
for (int i = 0; i &lt; sizeof(rx_buf); i++) Serial.print(rx_buf[i], HEX);
Serial.print(' ');</code></code></pre><p>Returns: &#8220;B3 6 CF 40 F6 3A 3 2C B3 6 CD 40 D2 76 2 5 B3 6 CF 40 89 1A 3 1&#8221;</p></blockquote><h3>Logic Analyzer</h3><p>Let&#8217;s pull out the Saleae logic analyzer to visualize some SPI transfers. The <strong>ADBMS6830 high level SPI analyzer</strong> I am using is available in the extensions panel and on <a href="https://github.com/atopile/adbms6830-saleae-analyzer">github</a>. To get parsed data back from raw Saleae analyzer traffic, add a SPI analyzer, configure the settings to match your pinout, and set the protocol configs to <strong>MSB, 8bits, CPOL=1, CPHA=1, EN active low</strong>. Once the standard SPI analyzer is recognizing bytes, you can add the ADBMS6830 high level analyzer on top. This analyzer will display information such as the command name, the PEC validity and value, the data, and even the parsed data for select registers like voltage reads.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7oO3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7oO3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 424w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 848w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 1272w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7oO3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png" width="1456" height="288" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79023,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!7oO3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 424w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 848w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 1272w, https://substackcdn.com/image/fetch/$s_!7oO3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65a4bd09-db2b-4071-bfb3-54004b8405ff_2585x511.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Fig 6. Read silicon ids Saleae logic analyzer capture</em></p><h3>Reading Voltages</h3><p>To read cell voltages, we can send the ADCV/ADSV command to get the ADBMS6830 to start measurement and conversion. After waiting for ADC conversion, we can request the results by reading one register at a time. The RDCVA command reads the C ADC voltages of channels 1, 2, and 3. When this read command is sent, each ASIC in the chain responds with its data for the RDCVA command, as shown in the capture below.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k47D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k47D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 424w, https://substackcdn.com/image/fetch/$s_!k47D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 848w, https://substackcdn.com/image/fetch/$s_!k47D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 1272w, https://substackcdn.com/image/fetch/$s_!k47D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k47D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png" width="1456" height="288" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106577,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!k47D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 424w, https://substackcdn.com/image/fetch/$s_!k47D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 848w, https://substackcdn.com/image/fetch/$s_!k47D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 1272w, https://substackcdn.com/image/fetch/$s_!k47D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5df9534b-314a-4e2f-94cb-95a6c882f989_2585x511.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em>Fig 7. Read cell voltages Saleae logic analyzer capture</em></p><p>We can then take these data bytes, and apply the conversion from the datasheet to get out our desired data.</p><h3>Cell Balancing</h3><p>There are several competing ways to enable cell balancing. There is a priority ranking over whether the discharge FETs will be closed or not, from the datasheet:</p><ol><li><p><strong>Thermal shutdown</strong>: This takes top priority and will shut down bleeding if maximum die temp is exceeded.</p></li><li><p><strong>Mute</strong>: The mute command disables all discharge switches, typically used to pause bleeding to take measurements.</p></li><li><p><strong>DCC bits</strong>: There are 16 DCC bits in config register B that enable bleeding for their respective cell when turned on.</p></li><li><p><strong>ADC measurement</strong>: ADCV or ADSV commands will pause PWM bleeding momentarily. Note: DCC is higher priority, so if you enable bleeding with DCC bits you can check that cells are bleeding by reading back the S ADC.</p></li><li><p><strong>PWM</strong>: Each switch gets 4 PWM bits describing the duty cycle for ~1s period bleed cycles. This will not show up when you read the secondary ADCs. PWM bleeding proceeds until the discharge timer (DCT) runs out.</p></li></ol><h3>Physical Layer</h3><p>The logic analyzer is useful for viewing the 4w SPI traffic, but once the ADBMS6822 converts this SPI to isoSPI, the bits are carried over a single differential pair. The ADBMS6822 drives a 25mA current pulse through the termination resistors to generate differential voltage pulses. The command bits are first sent &#8220;up&#8221; the stack, and forwarded by each ASIC up the chain. After the command is sent, the data starts being shifted back down the chain. The controller continues to send clock pulses up the chain, and the ASICs respond one bit at a time, as shown in the following scope captures.</p><p>Importantly, the daisy chain forms a loop, but the data is not sent in a full loop. When communicating in direction A, we send the commands &#8220;up&#8221; the stack from port A, starting with ASIC 1 and ending at ASIC n. Data is then shifted back &#8221;down&#8221; the stack one ASIC at a time. The data from ASIC 1 will be returned to port A first, followed by the data from ASIC 2, all the way until data from ASIC n reaches port A. We didn&#8217;t need port B of the microcontroller at all for this communication, which allows the daisy chain to be single fault tolerant. If the connection between ASIC 2 and ASIC 3 is broken, the microcontroller can still gather all the data by going &#8220;up&#8221; the stack with port A and fetching data from ASIC 1 and ASIC 2, then proceeding to go &#8220;down&#8221; the stack using port B and collect data for ASIC 4 and ASIC 3.</p><p>Yellow probe is isoSPI+, blue probe is isoSPI-.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aR3s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aR3s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 424w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 848w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 1272w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aR3s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png" width="1456" height="525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38951bc5-347e-4a17-b719-ad478233293e_1571x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144690,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!aR3s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 424w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 848w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 1272w, https://substackcdn.com/image/fetch/$s_!aR3s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38951bc5-347e-4a17-b719-ad478233293e_1571x566.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fig 8. Oscilloscope isoSPI capture showing chip select and command</em></p><p>The first longer pulse is the chip select pulse, followed by the command bits from controller to BMBs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kwLw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kwLw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 424w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 848w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 1272w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kwLw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png" width="1456" height="435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:435,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:287043,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kwLw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 424w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 848w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 1272w, https://substackcdn.com/image/fetch/$s_!kwLw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62855576-1dbd-4f66-82a3-7ba02f1efa83_2271x679.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We can verify the directionality of these pulses by placing 2 probes on the same isoSPI bus, one near the 6822, and the other near the 6830. Here is the same frame but this time yellow is at the 6822 and red is the exact same net but probed near the 6830.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pQKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pQKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 424w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 848w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 1272w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pQKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png" width="1456" height="379" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:379,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247553,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pQKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 424w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 848w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 1272w, https://substackcdn.com/image/fetch/$s_!pQKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b643a-c7cd-4c1e-9a4e-03b4092bb787_2568x668.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fig 9. Oscilloscope isoSPI capture showing read command with data return</em></p><p>Enhance:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hgJb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hgJb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 424w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 848w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 1272w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hgJb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png" width="1456" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:254475,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nkrstevski.substack.com/i/172111470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!hgJb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 424w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 848w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 1272w, https://substackcdn.com/image/fetch/$s_!hgJb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2bca46d-9303-45fd-95e2-2615c63cc5ee_2533x691.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Fig 10. Oscilloscope isoSPI capture showing propagation delay through PCB traces/connectors</em></p><p>If you look closely, you will see that the waveform of the sender leads the waveform of the receiver due to propagation delay. This confirms the direction of the observed pulses. This delay gets longer when there are long twisted pair cables and can become a problem if the distance traveled by the signal is greater than roughly 5 meters in one direction between any 2 nodes in the daisy chain. In this case, the data bit being returned down the stack may clash with the clock pulse heading up the stack for the next bit of data.</p><h2>References</h2><p><strong>atopile</strong>: <a href="https://docs.atopile.io/atopile/introduction">https://docs.atopile.io/atopile/introduction</a></p><p><strong>Teensy Firmware</strong>: <a href="https://github.com/atopile/packages/tree/main/packages/adi-adbms6822/firmware">https://github.com/atopile/packages/tree/main/packages/adi-adbms6822/firmware</a></p><p><strong>ADBMS6830B Datasheet</strong> with register maps: <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/adbms6830b.pdf">https://www.analog.com/media/en/technical-documentation/data-sheets/adbms6830b.pdf</a></p><p><strong>ADBMS6822 Datasheet</strong>: <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/adbms6821-adbms6822.pdf">https://www.analog.com/media/en/technical-documentation/data-sheets/adbms6821-adbms6822.pdf</a></p><p><strong>ADBMS6830 Saleae high level analyzer extension</strong>: <a href="https://github.com/atopile/adbms6830-saleae-analyzer">https://github.com/atopile/adbms6830-saleae-analyzer</a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.atopile.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading atopile Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to win at hardware; testing]]></title><description><![CDATA[If you&#8217;ve ever worked developing any hardware, chances are you&#8217;ve seen testing that resembles a better structured version of &#8220;I ran it and it seemed to work&#8221;.]]></description><link>https://blog.atopile.io/p/how-to-win-at-hardware-testing</link><guid isPermaLink="false">https://blog.atopile.io/p/how-to-win-at-hardware-testing</guid><dc:creator><![CDATA[Ioannis P]]></dc:creator><pubDate>Thu, 03 Apr 2025 18:40:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!44ze!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve ever worked developing any hardware, chances are you&#8217;ve seen testing that resembles a better structured version of &#8220;I ran it and it seemed to work&#8221;.</p><p>Unlike software, there&#8217;s no <code>pytest</code>, <code>jest</code> or <code>#[cfg(test)]</code> to take-over once pace and complexity make &#8220;I ran it&#8221; testing the major burden. More often than not there&#8217;s just blood, sweat, an oscilloscope and a PDF.</p><p>Heck, this is why you hear &#8220;we can&#8217;t change anything, it&#8217;s certified&#8221; from aerospace &#9992;&#65039; . It&#8217;s not as much that you can&#8217;t and more that you&#8217;d need to re-test (read, re-assess) everything along with it and boy is certification one heck of a test suite.</p><h2>So, where&#8217;s hardware testing lacking?</h2><ul><li><p>It&#8217;s too <strong>expensive</strong> to be ubiquitous. &#129297; Manufacturing lines justify the investment in reasonably thorough automated testing, and these setups frequently run into the $100s of thousands of dollars to build.</p></li><li><p>It&#8217;s often <strong>too fragile</strong> to be orchestrated. &#9939;&#65039;&#8205;&#128165; For CI to be useful, it needs to be reliable. Typical HiL setups (hardware-in-the-loop) often look like a circuit board and NUC connected via some loose cables on Joe&#8217;s desk. If Joe accidentally unplugs something or, god forbid, he stands up too fast and shakes the desk results get iffy.</p></li><li><p>Its <strong>setup is too difficult</strong> to be the norm. &#128555; As mentioned, software has capable frameworks and a strong culture of testing. When you mention hardware testing, most people&#8217;s minds go to either a lab bench. The lab is manual, and requires serious tactile real-world skill to operate properly.</p></li></ul><h2>Let&#8217;s think about HW testing in a similar way to SW &#129504;</h2><p>Okay, so how do we think about testing (in general) then?</p><p>Well, is it:</p><ul><li><p>one-shot vs. automate runs</p></li><li><p>orchestrate vs. setup ad-hoc</p></li><li><p>log results vs. read them out</p></li><li><p>have shared setups to log into vs. dedicated per-user or per-test setups</p></li><li><p>capture statistical vs. pass-fail results</p></li><li><p>spot-check values vs. sweep for coverage</p></li><li><p>test all-up vs. mock out parts of the system</p></li></ul><p>I won&#8217;t illustrate all these points, but for one example; one-shot testing is the &#8220;I ran it&#8221; and for automated testing, think CI blocking you merging your PR. In many of these cases there&#8217;s a place for both, but a SWE will most likely be opinionated as to which they trust in production.</p><p>As your project progresses, your test requirements resolve and confidence in the design increases. Testing expectations <strong>should</strong> increase alongside it, Here&#8217;s one mental model we use to discuss testing:</p><ul><li><p><strong>Phase</strong> of the project lifecycle. Early prototyping, engineering, new-product-introduction and manufacturing ramp - in rough sequence</p></li><li><p><strong>Fidelity</strong> of the test is a measure of how closely the test matches the real world. One of the biggest factors here is how much of the system is connected together and how much you're emulating or mocking</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!44ze!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!44ze!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 424w, https://substackcdn.com/image/fetch/$s_!44ze!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 848w, https://substackcdn.com/image/fetch/$s_!44ze!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 1272w, https://substackcdn.com/image/fetch/$s_!44ze!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!44ze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png" width="687" height="666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:666,&quot;width&quot;:687,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20886,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://atopile.substack.com/i/160522794?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!44ze!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 424w, https://substackcdn.com/image/fetch/$s_!44ze!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 848w, https://substackcdn.com/image/fetch/$s_!44ze!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 1272w, https://substackcdn.com/image/fetch/$s_!44ze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6395d871-db10-4d03-b8d0-d574f40b583d_687x666.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>In Lab bench (or &#8220;Bench&#8221;) testing you typically just power up a little bit of the circuit, perhaps you stick a power supply on some rail, and you might check the output of a regulator is at a reasonable voltage. You&#8217;re only testing a tiny part of the circuit under highly synthetic conditions, so we&#8217;d think of it as low fidelity and you start this typically at early phases</p></li><li><p>In integration testing you&#8217;re bringing sub-systems together, so they&#8217;re each partially interacting with a true counterpart</p></li><li><p>In functional testing you&#8217;re typically testing on complete and final hardware, measuring off a few points on it to examine its behavior.</p></li></ul><h2>How to win.</h2><ul><li><p>Make custom test equipment</p></li><li><p>Don&#8217;t share between jobs</p></li><li><p>Automate</p></li></ul><p>Creating custom test equipment is, counter intuitively, usually <strong>significantly cheaper</strong> than purchasing an off-the-shelf product - frequently by <strong>an order of magnitude</strong> even as a one-off. The reason for this is because off-the-shelf equipment is typically made extremely generic to sell to a wide audience, meaning that it&#8217;s vastly over-spec&#8217;d and feature rich than you need. In larger volumes this trends to two orders of magnitude lower cost.</p><p>One thing here is to avoid falling into the same trap that the off-the-shelf stuff does; don&#8217;t share. Design something someone loves, don&#8217;t try fill the needs of the whole company. So instead of designing universal tools, here&#8217;s a split that&#8217;s worked well for us:</p><ul><li><p>Lab and Bring-up equipment are owned by someone, and frequently run one-shot (multimeter, oscilloscope)</p></li><li><p>CI/HiL, Integration and Rel. equipment are multi-user and larger (think server rack)</p></li><li><p>Functional testers have to live in the factory and cycle fast (bed-of-nails, pogo jigs)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FUWF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FUWF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 424w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 848w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 1272w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FUWF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png" width="681" height="666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:666,&quot;width&quot;:681,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://atopile.substack.com/i/160522794?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FUWF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 424w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 848w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 1272w, https://substackcdn.com/image/fetch/$s_!FUWF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4889efe3-9afe-401a-ac37-dec53d4ca451_681x666.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Finally, <strong>automate</strong>. Automation shouldn&#8217;t need a plug, but honestly still needs to be said. Make a good scripting interface, perhaps above all else. Make CI include end-to-end tests on hardware. For shaking down a new design, throw a board in the same thermal chamber and abuse it over a wide temperature range all culminated in an automatically generated report after it runs overnight. Automation also takes the drudgery out, and keeps the best engineers doing their most productive work.</p><h2>A plug for atopile</h2><p>If you or someone you know develop in-house electronics, hit us up &#128071;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://form.typeform.com/to/DLMYKqCu&quot;,&quot;text&quot;:&quot;Make me a world-class test setup&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://form.typeform.com/to/DLMYKqCu"><span>Make me a world-class test setup</span></a></p><p>We&#8217;ll design, bring-up and send you world-class custom test equipment for an order of magnitude lower cost than off-the-shelf general equipment. They come with drivers, a framework and orchestration system to make hardware testing as easy as <code>pytest</code> (because it&#8217;s based atop it &#128522;).</p><p>Sounds magic, but we can manage this because at atopile we make tools to design circuit boards blazing fast. By using code, rather than schematics, atopile has a far higher fidelity snapshot of your design requirements. Alongside our compiler, we&#8217;ve built a suite of circuit modules, matching drivers and a framework.</p><p>Check out our test equipment repo here: <a href="https://github.com/atopile/hil">https://github.com/atopile/hil</a></p><p>Get started with the atopile compiler yourself here: <a href="https://docs.atopile.io/latest/">https://docs.atopile.io/latest/</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.atopile.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading atopile Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[This is atopile Blog.]]></description><link>https://blog.atopile.io/p/coming-soon</link><guid isPermaLink="false">https://blog.atopile.io/p/coming-soon</guid><dc:creator><![CDATA[Ioannis P]]></dc:creator><pubDate>Thu, 03 Apr 2025 17:19:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0MFI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ca563cc-9e17-4ce6-924f-4604b2c3a623_256x256.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is atopile Blog.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.atopile.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.atopile.io/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>