<?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[Wilfried Voss]]></title><description><![CDATA[Engineer, author, and founder of Copperhill Technologies. Writing about CAN Bus, SAE J1939, embedded systems, Raspberry Pi, and practical electronics development.]]></description><link>https://www.wilfriedvoss.com</link><image><url>https://substackcdn.com/image/fetch/$s_!8pRk!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61501137-4b52-47db-990c-6af8108c16e6_650x650.png</url><title>Wilfried Voss</title><link>https://www.wilfriedvoss.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 06 Nov 2026 12:30:29 GMT</lastBuildDate><atom:link href="https://www.wilfriedvoss.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Wilfried Voss]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[wilfriedvoss@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[wilfriedvoss@substack.com]]></itunes:email><itunes:name><![CDATA[Wilfried Voss]]></itunes:name></itunes:owner><itunes:author><![CDATA[Wilfried Voss]]></itunes:author><googleplay:owner><![CDATA[wilfriedvoss@substack.com]]></googleplay:owner><googleplay:email><![CDATA[wilfriedvoss@substack.com]]></googleplay:email><googleplay:author><![CDATA[Wilfried Voss]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Newsletter November 4, 2026]]></title><description><![CDATA[From the Workbench: CAN Bus, SAE J1939, NMEA 2000, and OBD-II]]></description><link>https://www.wilfriedvoss.com/p/newsletter-november-4-2026</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/newsletter-november-4-2026</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 04 Nov 2026 16:12:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!I592!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I592!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I592!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!I592!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!I592!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!I592!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I592!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/026defee-419b-48a3-9052-a0c126bc6064_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!I592!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!I592!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!I592!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!I592!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F026defee-419b-48a3-9052-a0c126bc6064_1672x941.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Welcome to the first issue of my newsletter. I&#8217;ve spent the past few months adding articles to my website and building out my online book, <em>CAN Bus Embedded Development</em>. I wanted to give you a few things to read before sending the first issue. Now there&#8217;s enough on the site to start sharing what&#8217;s new and what I&#8217;m working on.</p><p>As new posts go up, please fe&#8230;</p>
      <p>
          <a href="https://www.wilfriedvoss.com/p/newsletter-november-4-2026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[JCOM1939 Monitor Update Adds CAN Bus Diagnostics and Silent Mode]]></title><description><![CDATA[New firmware and Windows software are now available]]></description><link>https://www.wilfriedvoss.com/p/jcom1939-monitor-update-adds-can</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/jcom1939-monitor-update-adds-can</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 04 Nov 2026 15:32:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GGnH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GGnH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GGnH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 424w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 848w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 1272w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GGnH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png" width="1000" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;JCOM1939 Monitor Update Adds CAN Bus Diagnostics and Silent Monitoring Mode&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="JCOM1939 Monitor Update Adds CAN Bus Diagnostics and Silent Monitoring Mode" title="JCOM1939 Monitor Update Adds CAN Bus Diagnostics and Silent Monitoring Mode" srcset="https://substackcdn.com/image/fetch/$s_!GGnH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 424w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 848w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.png 1272w, https://substackcdn.com/image/fetch/$s_!GGnH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70e5e290-71ed-47d5-b265-63e6e5b96e3f_1000x549.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>I have finished the latest update to the JCOM1939 Monitor for Windows. The release adds two features I&#8217;ve wanted to have on the bench: a live view of the CAN Bus network condition, including receive/transmit error counters and a Silent Mode for recording traffic without transmitting. The diagnostics grew out of a customer question about J1939 frames that appeared to go missing during a test.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>CAN bus status at a glance</h2><p>The customer was transmitting identical PGNs from two nodes. I couldn&#8217;t reproduce the missing frames on my bench, but the test raised a practical question. If an expected frame never appears in the monitor, did the CAN controller encounter an error, or do I need to look more closely at what the ECU sent and how the Windows application handled it?</p><p><strong>Note:</strong> <em>Two or more J1939 nodes can technically broadcast the same PGN as long as they use different source addresses. Doing so, however, goes against an unwritten convention that a given broadcast PGN should originate from a single dedicated node. A receiving node should never have to rely on the source address to determine which broadcast message to use. When communication needs to take place between specific nodes, that&#8217;s what peer-to-peer messages are for.</em></p><p>The update puts a CAN bus condition indicator at the top of the main window. It shows green for normal communication, orange for communication issues or degraded communication, and red when communication is lost. </p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a6Lx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 424w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 848w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 1272w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a6Lx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png" width="972" height="178" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:178,&quot;width&quot;:972,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CAN Bus Condition&quot;,&quot;title&quot;:null,&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="CAN Bus Condition" title="CAN Bus Condition" srcset="https://substackcdn.com/image/fetch/$s_!a6Lx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 424w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 848w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 1272w, https://substackcdn.com/image/fetch/$s_!a6Lx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80942507-7893-4e34-8eab-fd069bd0ba6d_972x178.png 1456w" sizes="100vw"></picture><div></div></div></div></figure></div><p>A dedicated CAN Bus tab shows the receive and transmit error counters, the controller&#8217;s error and operating status, and the current bus load.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HHkl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HHkl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 424w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 848w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 1272w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!HHkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png" width="1456" height="428" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:428,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CAN Bus Condition&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CAN Bus Condition" title="CAN Bus Condition" srcset="https://substackcdn.com/image/fetch/$s_!HHkl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 424w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 848w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 1272w, https://substackcdn.com/image/fetch/$s_!HHkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c747582-f403-4adf-bf53-a7a91856fec3_1866x548.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 receive (Rx) and transmit (Tx) error counters can be difficult to interpret. They are part of the CAN controller&#8217;s internal error management system, and the CAN protocol defines when and by how much each counter changes. To make sense of the readings, it helps to understand how the controller handles errors during transmission and reception.</p><p>I&#8217;ll cover these rules in more detail in an update to the JCOM1939 Monitor User Manual. In upcoming articles on this site, I&#8217;ll show how the counters change under different network conditions and how you can use those changes to troubleshoot communication problems.</p><h2>Silent Mode for passive monitoring</h2><p>Silent Mode, also known as listen-only mode, lets the monitor receive and record traffic on a running J1939 network. In this mode, the monitor leaves arbitration and frame acknowledgments to the other nodes on the bus.</p><p>To enable it, select Silent Mode in ECU Setup before starting the CAN interface. When you need to send a request, claim an address, or simulate an ECU, start the interface in normal mode.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XcIb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 424w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 848w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 1272w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XcIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png" width="792" height="126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:126,&quot;width&quot;:792,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Silent Mode&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Silent Mode" title="Silent Mode" srcset="https://substackcdn.com/image/fetch/$s_!XcIb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 424w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 848w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 1272w, https://substackcdn.com/image/fetch/$s_!XcIb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70551381-f649-4e0f-83d8-f3b7dde93016_792x126.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>There&#8217;s one detail worth keeping in mind on the bench. If your setup consists of a single transmitting ECU and a monitor in Silent Mode, there&#8217;s no active receiver to acknowledge the ECU&#8217;s frames. The ECU can report acknowledgment errors and retry its transmissions. Adding another active CAN node gives the ECU a receiver while the monitor stays passive.</p><h2>Release availability</h2><p>Both features are included in the next release of the JCOM1939 Monitor. I have also updated the user manual to cover the status indicators, explain what the error counters show, and document how to enable Silent Mode.</p><p>Please be aware that the updated Windows software also requries an updated gateway firmware.</p><ol><li><p><a href="https://jcom1939.com/jcom1939-monitor-download-documentation-and-other-resources/jcom1939-monitor-download-and-program-versions/">Download and install JCOM1939 Monitor V 4.10.00</a>.</p></li><li><p><a href="https://jcom1939.com/jcom1939-monitor-download-documentation-and-other-resources/jcom1939-monitor-pro-usb-bt-gateway-firmware-update/">Download and install gateway firmware V 1.40.00</a>.</p></li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[C++ for Embedded Systems]]></title><description><![CDATA[From language fundamentals to practical firmware development]]></description><link>https://www.wilfriedvoss.com/p/c-for-embedded-systems</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/c-for-embedded-systems</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 03 Nov 2026 23:07:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bKFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bKFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bKFN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 424w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 848w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 1272w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bKFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png" width="962" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:962,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:641750,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/223400871?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.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_!bKFN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 424w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 848w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.png 1272w, https://substackcdn.com/image/fetch/$s_!bKFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04793e5d-1b75-408b-abe9-4562c4475fdd_962x600.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Knowing C++ is one thing. Using it to develop firmware that interacts reliably with hardware is another. Embedded applications introduce constraints that desktop programmers may rarely encounter: limited memory, precise timing requirements, direct access to peripheral registers, and power consumption that can determine whether a device runs for months or only days.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0j1Pgy0U" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lfkf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 424w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 848w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 1272w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lfkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png" width="400" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:315642,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://link.amazon/B0j1Pgy0U&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/223400871?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.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_!Lfkf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 424w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 848w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.png 1272w, https://substackcdn.com/image/fetch/$s_!Lfkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99ba9c17-a831-489c-b44f-11e714d0b67e_400x517.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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://link.amazon/B0fhEe3vH">C++ for Embedded Systems: With Exercises and Code Samples for Intermediate Developers</a> by Gareth Thomas addresses that transition. Based on its description, the book targets developers who already have a working knowledge of C++ and want to apply it to microcontrollers and connected devices. It is positioned as a practical guide rather than an introduction to the language.</p><h3>Connecting Software to Hardware</h3><p>The advertised coverage includes GPIO, UART, I2C, SPI, and direct memory access (DMA), alongside register-level programming. These subjects form much of the foundation of embedded development. Before an application can process sensor readings, control an actuator, or exchange messages with another device, its firmware must configure and operate the underlying hardware.</p><p>For readers working with CAN Bus applications, that foundation is particularly relevant. Although the supplied description does not mention CAN specifically, a CAN-based device still depends on sound peripheral configuration, reliable data handling, and a clear division between hardware access and application logic. Those skills carry across communication interfaces and processor families.</p><h3>Working Within Embedded Constraints</h3><p>The book also lists real-time performance, real-time operating systems (RTOS), and low-power design among its topics. These areas bring a different set of questions into software development. How quickly must an event be handled? Which tasks can run concurrently? When can the processor sleep, and what must remain active to wake it?</p><p>Efficient firmware requires more than reducing execution time. Developers must also consider memory use, predictable behavior, and how different parts of a system share resources. C++ provides useful tools for organizing that complexity, but their suitability depends on the target hardware and the application&#8217;s requirements.</p><h3>Learning Through Code and Exercises</h3><p>According to the description, each subsection combines an explanation with a complete code sample and several exercises. That structure should appeal to readers who prefer to work through a concept rather than stop at a theoretical explanation.</p><p>In embedded development, however, code always has a hardware context. Peripheral registers, pin assignments, clock settings, and software libraries vary between microcontrollers. Readers should check which platforms and development environments the examples use before purchasing, particularly if they intend to follow along on a specific board.</p><h3>Modern C++ and Connected Devices</h3><p>The advertised scope extends to modern C++ features, secure IoT development, and cloud connectivity. That broadens the focus from operating individual peripherals to building devices that must communicate and remain dependable as part of a larger system.</p><p>For intermediate developers, the central challenge is learning where language features help produce clear, maintainable firmware and how their costs fit within an embedded platform&#8217;s limits. Abstraction can make a system easier to understand, but developers still need to know what the resulting code asks of the processor and memory.</p><p>Gareth Thomas&#8217;s <em>C++ for Embedded Systems</em> appears aimed at readers ready to move beyond language exercises and into practical firmware development. Its combination of hardware interfaces, system-level concerns, and exercises makes it a potentially useful title to investigate. This overview is based on the supplied book description rather than a hands-on assessment of its contents. <a href="https://link.amazon/B0fhEe3vH">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[Testing NMEA 2000 Without a Boat]]></title><description><![CDATA[A practical approach to bringing marine data onto the workbench]]></description><link>https://www.wilfriedvoss.com/p/testing-nmea-2000-without-a-boat</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/testing-nmea-2000-without-a-boat</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 03 Nov 2026 21:35:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PFx6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PFx6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PFx6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PFx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1062642,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/223391010?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.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_!PFx6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!PFx6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa6bf-e587-4a9f-bea1-954e3036c99b_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>One of the awkward things about developing marine electronics is that the equipment you need for testing may be sitting in a marina. You can power up a display on your workbench, inspect its menus, and admire its screen. But without incoming data, you have only answered the easiest question: Does it switch on?</p><p>The more useful questions come afterward. Does the engine speed indication follow changing RPM? Does the application interpret wind data correctly? Is an unexpected reading caused by the receiving software or by the data source?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Z12!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Z12!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 424w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 848w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 1272w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Z12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png" width="500" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/223391010?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.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_!1Z12!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 424w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 848w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.png 1272w, https://substackcdn.com/image/fetch/$s_!1Z12!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1488ca25-e4ce-4f64-9a49-904943035a2f_500x374.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>My preferred approach is to make the input something I can control. That is where a device such as the <a href="https://copperhilltech.com/teensy-4-0-nmea-2000-simulator/">Teensy 4.0 NMEA 2000 Simulator from Copperhill Technologies</a>, becomes useful.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h3>Give the display something to display</h3><p>The simulator comes with a Teensy 4.0 installed and programmed. Its hardware includes six rotary potentiometers, two push-buttons, and a Micro-C connection for the NMEA 2000 network. Turning a knob provides a convenient way to change simulated values while watching the receiving equipment respond. The product documentation lists messages for environmental parameters, wind data, engine speed, and course and speed over ground.</p><p>Consider a simple development task: You are writing an application that displays engine RPM. A stationary value proves that your application can receive and display something. Changing that value lets you investigate much more.</p><p>Does the indication update smoothly? Does the application apply the correct scaling? Does switching between display units affect anything it should not? If you have implemented an alarm threshold, does the alarm appear and clear at the intended values?</p><p>For these checks, a knob on the workbench is a remarkably convenient substitute for asking someone to operate an engine.</p><h3>Turn troubleshooting into a controlled experiment</h3><p>Suppose a marine display powers up but shows no engine speed. On an installed system, several explanations might be possible. The expected data may be absent, the display may be configured incorrectly, or there may be a communication problem.</p><p>I would begin by reducing the number of unknowns. Build a small test network, connect the simulator and the receiving device, and select a message that the receiver supports. Then change one value and observe the result.</p><p>If the display responds, you have evidence that it can receive and interpret that message under those conditions. If it does not, you have a smaller system to investigate.</p><p>That distinction matters. Troubleshooting becomes much easier when every test answers a specific question. Changing settings at random can keep you occupied for an entire afternoon without making you any better informed.</p><h3>Start with one useful test</h3><p>I would resist the temptation to simulate everything at once. Start with a single quantity, such as engine RPM, and define what a successful result should look like.</p><p>Check several values across the range relevant to your application. Record the expected and displayed readings. Repeat the same checks after changing your software. Once that works, move on to another supported quantity.</p><p>The test network still needs the appropriate power, cabling, and termination. I would also verify the exact PGN and data fields expected by the receiving device before spending time investigating an apparent failure. A simulator and a display must agree on what information they are exchanging.</p><h3>Adapt the source to the project</h3><p>The firmware is open source, and the manufacturer provides an Arduino-style demonstration sketch. This gives developers a starting point for adapting the transmitted data to a particular application.</p><p>For example, I might want a value to follow a programmed sequence rather than depend on a manually adjusted knob. A repeatable sequence would let me compare application behavior before and after a software change.</p><p>That requires firmware work, including checking message definitions and transmission timing. Still, having access to the source code makes the simulator more useful as development progresses beyond the supplied demonstration.</p><h2>Simulation and PGN Control</h2><p>The simulator generates a set of <strong>predefined Parameter Group Numbers (PGNs)</strong> &#8212; the unique identifiers used in NMEA 2000 messaging. These PGNs are essential for transmitting different types of data over the CAN-based NMEA 2000 network.</p><p>This unit enables <strong>interactive control over eight PGNs</strong>, offering both real-time variability and fixed value toggling:</p><ul><li><p><strong>Six PGNs</strong> are linked to rotary potentiometers, allowing analog adjustment of their data fields. For example, as the user rotates the knob, the simulated value for wind speed or engine RPM changes accordingly.</p></li><li><p><strong>Two PGNs</strong> are controlled by onboard push-buttons, suitable for toggling digital states such as engine status or heading lock.</p></li></ul><p>The currently supported PGNs include:</p><ul><li><p><strong>PGN 130310 &#8211; Environmental Parameters (e.g., Water Temperature):</strong> Simulates real-time changes in seawater temperature, allowing you to test temperature-sensitive systems such as chillers or alarms.</p></li><li><p><strong>PGN 130306 &#8211; Wind Data:</strong> Adjusts wind speed and direction to evaluate performance of instruments like wind gauges or sailing computers.</p></li><li><p><strong>PGN 127488 &#8211; Engine Parameters, Rapid Update:</strong> Sends live engine RPM values, useful for validating engine monitoring displays and alarms.</p></li><li><p><strong>PGN 129026 &#8211; COG &amp; SOG, Rapid Update:</strong> Simulates course over ground and speed over ground to test navigation and autopilot systems.</p></li></ul><p>The firmware is <strong>open-source</strong>, giving developers the flexibility to <strong>customize or expand</strong> the set of PGNs. Additional data types&#8212;such as fuel flow, heading, or AIS targets&#8212;can be added with minor code modifications. This openness makes the device suitable for both basic functionality checks and complex system development.</p><h3>Know what the result tells you</h3><p>A successful bench test establishes something valuable, but specific: Your equipment handled the simulated messages under the conditions you tested.</p><p>It does not establish that an entire installation will behave correctly aboard a vessel. Installation wiring, power conditions, other network participants, and the behavior of real sensors introduce additional variables.</p><p>I see the simulator as a way to resolve the basic questions early. Get the data reception working. Verify the interpretation. Exercise the display behavior. Then approach installation testing with fewer unanswered questions.</p><p>A boat is an excellent place to use marine electronics. For debugging the first version of your software, I would rather have a workbench, a controlled data source, and a cup of coffee that stays where I put it.</p>]]></content:encoded></item><item><title><![CDATA[Monitoring NMEA 2000 with JCOM1939]]></title><description><![CDATA[Using an existing USB or Bluetooth gateway to inspect marine network traffic]]></description><link>https://www.wilfriedvoss.com/p/monitoring-nmea-2000-with-jcom1939</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/monitoring-nmea-2000-with-jcom1939</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 03 Nov 2026 21:23:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SiKM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SiKM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SiKM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SiKM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a379a16-b36f-415b-acca-037eeb684474_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!SiKM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!SiKM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a379a16-b36f-415b-acca-037eeb684474_1672x941.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Looking back, I somewhat regret not taking a closer look at NMEA 2000 when I started developing JCOM1939. Our <a href="https://jcom1939.com/">JCOM1939 Monitor software for Windows</a> has grown considerably over the years, becoming a capable, affordable alternative to much more expensive tools on the market. Building something similar for NMEA 2000 would have been a rewarding opportunity.</p><p>The main obstacle at the time was the cost of entry. NMEA&#8217;s pricing policy, including membership and the substantial cost of obtaining the NMEA 2000 standard, put that initial investment beyond my development budget. For a small operation, those expenses matter&#8212;especially before writing the first line of application-specific code.</p><p>Still, some of the work already invested in JCOM1939 can be useful on an NMEA 2000 network. Our USB and Bluetooth gateways, together with JCOM1939 Monitor, provide a starting point for observing network traffic. Understanding where that approach helps, and where its limitations begin, is the subject of this post.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><p>When a marine instrument stops displaying information, the first question is often straightforward: Is the data still arriving on the network? Before investigating the meaning of individual parameters, it helps to establish whether the equipment is transmitting at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://jcom1939.com/jcom1939-gateways/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!opIa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 424w, https://substackcdn.com/image/fetch/$s_!opIa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 848w, https://substackcdn.com/image/fetch/$s_!opIa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 1272w, https://substackcdn.com/image/fetch/$s_!opIa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!opIa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png" width="364" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:364,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;JCOM1939 Monitor Software&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://jcom1939.com/jcom1939-gateways/&quot;,&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="JCOM1939 Monitor Software" title="JCOM1939 Monitor Software" srcset="https://substackcdn.com/image/fetch/$s_!opIa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 424w, https://substackcdn.com/image/fetch/$s_!opIa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 848w, https://substackcdn.com/image/fetch/$s_!opIa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.png 1272w, https://substackcdn.com/image/fetch/$s_!opIa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac5610b9-15aa-4a93-b1f0-42c8514b2aa0_364x242.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 is where our <a href="https://jcom1939.com/jcom1939-gateways/">JCOM1939 gateways, available with USB or Bluetooth connectivity</a>, can provide a useful starting point. Together with the JCOM1939 Monitor software for Windows, they offer a way to inspect network traffic at the PGN and data-byte level.</p><p>In my previous post, I discussed <a href="https://www.wilfriedvoss.com/p/sae-j1939-vs-nmea-2000-how-vehicle">the differences between SAE J1939 and NMEA 2000</a>. Here, I want to focus on a practical application of their shared foundation: using a J1939 monitoring tool to observe NMEA 2000 communication, while recognizing the limits of that approach.</p><h3>What monitoring can tell you</h3><p>You do not always need a fully decoded display to learn something useful about a network. Seeing which PGNs arrive, which source addresses transmit them, and whether their data changes can help narrow down a problem.</p><p>Consider an instrument that no longer shows a sensor reading. Monitoring can help establish whether the expected PGN is present. If it is missing, the investigation can turn toward the transmitting device, its configuration, power supply, or network connection. If the PGN is present, the next step is to examine its contents and determine why the receiving instrument does not use or display it.</p><p>Neither result provides an automatic diagnosis. However, both give you a more useful direction than simply knowing that the display is blank.</p><p>Filtering is particularly helpful on a busy network. Once you know the PGN associated with the information you are investigating, you can concentrate on that traffic instead of watching an uninterrupted stream of unrelated messages. JCOM1939 Monitor provides PGN filtering as part of its existing monitoring functions.</p><h3>USB or Bluetooth?</h3><p>The choice between USB and Bluetooth primarily concerns the connection between the gateway and the Windows computer. The purpose of the monitoring remains the same.</p><p>USB provides a direct connection for work near the network access point. Bluetooth offers more freedom to position the laptop without running a USB cable between it and the gateway. The gateway itself still requires a physical connection to the CAN network and the appropriate power supply.</p><p>Bluetooth should not be confused with automatic compatibility with marine apps. In this application, the gateway works with JCOM1939 Monitor on Windows. Connecting a phone or tablet requires software that specifically supports the gateway&#8217;s communication interface.</p><h3>Use monitoring mode</h3><p>For this application, the objective is to observe existing traffic. Keep the gateway in its listen-only monitoring mode rather than enabling ECU simulation or other transmitting functions.</p><p>The JCOM1939 gateway protocol provides a listen-only operating mode that does not require a source address or perform an address claim. It also uses receive filters to determine which traffic is forwarded to the host computer, so those filters must be configured appropriately. An empty display does not necessarily mean an empty network.</p><p>Functions intended for active J1939 communication should not be assumed to work as NMEA 2000 functions. In particular, monitoring existing messages is a different task from requesting information, configuring marine devices, or participating as a fully implemented NMEA 2000 node.</p><h3>Raw data requires interpretation</h3><p>The main consideration is that receiving a message does not mean understanding its contents.</p><p>A PGN and its hexadecimal data bytes can confirm that traffic exists. Turning those bytes into heading, temperature, tank level, or another engineering value requires the correct NMEA 2000 parameter definitions. The interpretation must account for field positions, scaling, units, and special values indicating unavailable or invalid data.</p><p>JCOM1939 Monitor&#8217;s J1939 functionality does not automatically supply those marine definitions. Likewise, a familiar-looking PGN or data pattern is not sufficient reason to interpret the payload using a J1939 parameter description.</p><p>Manufacturer-specific messages introduce another limitation. Their presence may be visible, but understanding their contents can require documentation from the equipment manufacturer.</p><h3>Longer messages need additional handling</h3><p>Some NMEA 2000 information spans several CAN frames using Fast Packet transport. Without NMEA 2000-specific reassembly, those frames remain separate pieces of a longer message.</p><p>They can still show that communication is taking place, but the complete payload must be reconstructed before its fields can be interpreted reliably. Existing J1939 transport-protocol support should not be mistaken for NMEA 2000 Fast Packet support.</p><p>This distinction matters when deciding what you expect from the monitor. Observing traffic is useful in its own right; displaying complete, decoded marine messages requires additional software capabilities.</p><h3>Check the connection and configuration</h3><p>The physical connection deserves as much attention as the software. A J1939 connector is not interchangeable with an NMEA 2000 connector merely because both networks use CAN.</p><p>Use a correctly wired adapter or cable, verify the gateway&#8217;s power requirements, and preserve the existing backbone and termination arrangement. Adding a monitoring connection should not introduce an unnecessary terminating resistor.</p><p>NMEA 2000 operates at 250 kbit/s. The gateway must operate at that rate, and the gateway firmware and monitor must preserve the complete PGN, including its data-page information. Compatibility should be checked with the particular hardware, firmware, and software versions being used.</p><p>It is also worth distinguishing message monitoring from electrical troubleshooting. A message display cannot show signal quality, reflections, or voltage problems in the way an oscilloscope can. Receiving traffic does not prove that every aspect of the physical network is healthy.</p><h3>A practical additional use</h3><p>I see this as an additional application for our existing JCOM1939 USB and Bluetooth gateways. For someone who already uses these tools, inspecting marine network traffic can be a useful extension of familiar equipment.</p><p>The value lies in answering practical questions: Is a device transmitting? Is the expected PGN present? Does the data change when the measured condition changes? Where should the investigation go next?</p><p>A raw monitor will not answer every NMEA 2000 question. But establishing what is actually being transmitted is often a productive first step toward finding the answer.</p>]]></content:encoded></item><item><title><![CDATA[SAE J1939 vs. NMEA 2000: How Vehicle and Marine CAN Networks Differ]]></title><description><![CDATA[Shared CAN technology, different applications&#8212;and why the distinction matters]]></description><link>https://www.wilfriedvoss.com/p/sae-j1939-vs-nmea-2000-how-vehicle</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/sae-j1939-vs-nmea-2000-how-vehicle</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 03 Nov 2026 21:08:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mGEl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mGEl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mGEl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mGEl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!mGEl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!mGEl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98a7c3e9-53ea-4336-b0a1-d6cbf458bb46_1672x941.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>If you are familiar with SAE J1939, your first encounter with NMEA 2000 may look surprisingly familiar. There are CAN messages, 29-bit identifiers, source addresses, and Parameter Group Numbers. Much of the underlying structure seems to be the same.</p><p>That resemblance is no coincidence. NMEA 2000 belongs to the same protocol family, drawing on the J1939-based communication framework used in ISO 11783. However, calling it &#8220;J1939 for boats&#8221; leaves out several differences that matter when connecting equipment, developing software, or interpreting recorded data.</p><p>For me, the most useful way to understand the relationship is to separate three questions: How does the data travel? What does it mean? And what must a device do to participate in the network?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h3>CAN provides the foundation</h3><p>CAN Bus provides the underlying communication technology. It handles tasks such as transmitting frames, resolving competition for bus access, and detecting transmission errors. It does not, by itself, explain whether a particular data byte represents engine speed, water depth, or battery voltage.</p><p>That interpretation belongs to the higher-layer protocol.</p><p>SAE J1939 and NMEA 2000 both use extended CAN identifiers containing 29 bits. Their related identifier structures carry information such as message priority, source address, and the information used to determine the Parameter Group Number, usually abbreviated PGN. This common structure is one reason J1939 experience transfers well to NMEA 2000 development.</p><p>The important distinction is that recognizing the structure of a message does not necessarily mean understanding its contents.</p><h3>Different equipment, different information</h3><p>SAE J1939 is widely used for communication and diagnostics in diesel engine systems, including those found in trucks, buses, agricultural and construction machinery, trains, ships, and stationary generators. It allows engines, transmissions, and other electronic control units to exchange operating data, commands, and diagnostic information. Although its scope extends beyond diesel engines, this association helps explain why J1939 also appears aboard vessels: the distinction between J1939 and NMEA 2000 concerns their roles and message definitions, rather than simply trucks versus boats.</p><p>NMEA 2000 focuses on integrating marine equipment. Its scope includes navigation instruments, GNSS receivers, wind sensors, propulsion systems, batteries, lighting, and other vessel systems. A chartplotter, for example, may receive information from several independent devices through the same network.</p><p>This difference in purpose shapes the information each standard defines. A vehicle controller and a marine navigation display may both need engine information, but the navigation display also needs information that has little relevance to a truck.</p><h3>A PGN identifies a message&#8212;not a universal data format</h3><p>Both protocols organize information into parameter groups identified by PGNs. However, their application message definitions are different.</p><p>To interpret a message correctly, software must know the applicable PGN definition, the location of each field, its resolution, its units, and any special values indicating unavailable or invalid information.</p><p>This is where a common misconception arises: a program that extracts a PGN from an NMEA 2000 CAN identifier has not automatically decoded the marine data. It has identified the message category. Understanding the payload requires the appropriate NMEA 2000 definitions.</p><p>For example, NMEA 2000 defines PGN 127488 as &#8220;Engine Parameters, Rapid Update.&#8221; A marine display expecting this message will not automatically obtain the same information from an unrelated J1939 engine message merely because both travel over CAN. Garmin&#8217;s J1939 bridging documentation explicitly lists the NMEA 2000 engine and other PGNs it can make available through bridging.</p><h3>Messages longer than eight bytes</h3><p>A Classical CAN frame carries no more than eight data bytes. Both protocols therefore need a way to transmit information that will not fit into one frame.</p><p>Traditional SAE J1939 uses the transport protocol (TP) defined in J1939/21. It divides longer messages into multiple frames and uses transport management messages to coordinate their transmission. Depending on the transfer method, communication can involve a broadcast announcement or an exchange between a sender and a receiver.</p><p>NMEA 2000 adds a mechanism called Fast Packet. It carries a longer parameter group across several CAN frames while retaining the original PGN in their identifiers. Fast Packet supports messages containing up to 223 bytes.</p><p>This matters when selecting monitoring software. A tool may capture every CAN frame correctly while leaving a Fast Packet message scattered across several display lines. Capturing the frames and reconstructing the complete message are separate capabilities.</p><h3>Protocol differences beyond Fast Packet</h3><p>Fast Packet is the most visible addition to the message transport mechanisms, but the differences extend further. Although SAE J1939 and NMEA 2000 share the basic 29-bit identifier structure, PGN addressing, and address-claiming foundation, NMEA 2000 adds or specializes several aspects:</p><ul><li><p>Message definitions: Marine PGNs specify their own data fields, units, resolutions, and special values indicating unavailable or invalid information.</p></li><li><p>Network services: NMEA 2000 defines services for identifying products, reporting supported transmit and receive PGNs, and configuring devices.</p></li><li><p>Group functions: These provide standardized mechanisms for requesting information, commanding supported parameter changes, and acknowledging requests. Depending on device capabilities, they can also configure message transmission intervals.</p></li><li><p>Device identity: NMEA 2000 uses marine-specific device classes, functions, and instance conventions within the shared identification framework.</p></li><li><p>Required device behavior: NMEA 2000 specifies its own requirements for startup, responses to requests, and the transmission of mandatory information.</p></li></ul><p>Consequently, adding Fast Packet support to a J1939 implementation addresses only part of the work. A complete NMEA 2000 implementation must also handle the applicable marine messages, network services, and device behavior.</p><h3>Network speed and installation</h3><p>NMEA 2000 operates at 250 kbit/s. Classical J1939 networks commonly operate at either 250 or 500 kbit/s, depending on the applicable physical-layer specification. Matching the bit rate is therefore an essential first step when attempting to monitor either network.</p><p>NMEA 2000 also provides a standardized installation approach built around a backbone, drop cables, connectors, and network power. Devices connect along the backbone, with termination at its two ends. These installation requirements are part of creating a predictable marine network, rather than leaving every equipment manufacturer to invent its own wiring arrangement.</p><p>An electrically suitable CAN interface may therefore be useful for development, but connecting it requires more thought than finding CAN High and CAN Low. Connector pin assignments, power connections, termination, and the interface&#8217;s electrical design all deserve attention.</p><h3>Address claiming is shared territory</h3><p>NMEA 2000 is designed to support a self-configuring network containing equipment from different manufacturers. Device identification and address management contribute to that behavior.</p><p>However, it would be misleading to say that NMEA 2000 supports address claiming while SAE J1939 does not. J1939/81 explicitly defines address selection and address claiming. The actual addressing behavior depends on the device and its implementation.</p><p>For developers, the lesson is straightforward: understanding J1939 network management provides a useful foundation, but an NMEA 2000 device must still satisfy the marine standard&#8217;s specific requirements.</p><h3>Can a J1939 monitor read NMEA 2000?</h3><p>At the raw CAN level, a suitable interface can capture NMEA 2000 traffic if it supports extended identifiers, operates at 250 kbit/s, and is connected correctly. A J1939-oriented monitor may also be able to display useful information such as source addresses, priorities, PGNs, and data bytes because of the related message structure.</p><p>That can be valuable for checking whether traffic is present, identifying transmitting devices, or recording messages for later examination.</p><p>Displaying meaningful marine measurements requires additional support: NMEA 2000 message definitions, the appropriate decoding logic, and Fast Packet reassembly where applicable. This follows directly from the distinction between the shared CAN structure and the additional NMEA 2000 protocol features.</p><p>I would therefore distinguish between monitoring NMEA 2000 traffic and providing a complete NMEA 2000 analyzer. Both can be useful, but they answer different questions.</p><h3>Connecting the two networks</h3><p>A marine engine may provide J1939 data while the vessel&#8217;s instruments communicate through NMEA 2000. A gateway can connect these systems by translating supported engine information into the messages expected by the marine equipment.</p><p>The gateway must understand the data on both sides. Simply changing the connector does not perform that translation. Furthermore, a gateway may support only selected parameters; proprietary engine information may remain unavailable to the NMEA 2000 display.</p><h3>Product development goes beyond receiving messages</h3><p>For a commercial product, NMEA 2000 development also involves licensing and certification requirements. NMEA specifies certification for products that read or transmit NMEA 2000 information, with testing intended to support interoperability.</p><p>SAE J1939 has its own network compliance document, J1939/82. Nevertheless, implementing a J1939 protocol stack does not, by itself, establish NMEA 2000 compliance.</p><p>The shared foundation makes NMEA 2000 approachable for someone with J1939 experience. Familiar concepts remain useful, and some CAN hardware and software components can be reused. The remaining work lies in understanding the marine messages, handling their transfer methods, and meeting the requirements of the network they serve.</p>]]></content:encoded></item><item><title><![CDATA[Installing a J1939 Protocol Stack on the ESP32]]></title><description><![CDATA[Using ARD1939 and the Arduino IDE to build an embedded J1939 application]]></description><link>https://www.wilfriedvoss.com/p/installing-a-j1939-protocol-stack</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/installing-a-j1939-protocol-stack</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 01 Nov 2026 17:34:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eN5x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.wilfriedvoss.com/p/ard1939-sae-j1939-protocol-stack" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eN5x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eN5x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:643839,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.wilfriedvoss.com/p/ard1939-sae-j1939-protocol-stack&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/220430544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.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_!eN5x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!eN5x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b55cba-5041-4c9c-9b19-b281c27d1e18_1000x500.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 ESP32 provides a practical platform for developing SAE J1939 applications, including network interfaces, data loggers, gateways, and simulated electronic control units. Its processing power and wireless capabilities leave considerable room for application development beyond basic CAN communication.</p><p>However, CAN hardware alone does not turn an ESP32 into a J1939 device. The processor needs software that implements the protocol&#8217;s communication rules. For this project, I use <a href="https://www.wilfriedvoss.com/p/ard1939-sae-j1939-protocol-stack">ARD1939</a>, my SAE J1939 protocol stack, together with an ESP32 CAN driver and the Arduino IDE.</p><p>The installation involves three software components: ESP32 board support for the Arduino IDE, the CAN driver, and the ARD1939 project. Understanding how these components work together makes the setup easier to follow.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h3>CAN Hardware and J1939 Software</h3><p>The original ESP32 used in this project includes a Classical CAN controller, referred to as TWAI in Espressif&#8217;s documentation. It supports the extended 29-bit CAN identifiers required for conventional SAE J1939 communication. However, it requires an external CAN transceiver to connect to the physical network. The processor&#8217;s TX and RX pins carry 3.3 V logic signals; they cannot connect directly to CAN_H and CAN_L.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://copperhilltech.com/esp32-wifi-bluetooth-classic-ble-can-bus-module/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dcfY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dcfY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg" width="500" height="346" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:346,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;ESP32 CAN-Bus board&quot;,&quot;title&quot;:&quot;ESP32 CAN-Bus board&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://copperhilltech.com/esp32-wifi-bluetooth-classic-ble-can-bus-module/&quot;,&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="ESP32 CAN-Bus board" title="ESP32 CAN-Bus board" srcset="https://substackcdn.com/image/fetch/$s_!dcfY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dcfY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ef60a54-e572-47b4-a708-fe24c132b9ef_500x346.jpeg 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>For this project, I used the <a href="https://copperhilltech.com/esp32-wifi-bluetooth-classic-ble-can-bus-module/">ESP32 WiFi, Bluetooth Classic, BLE, CAN Bus Module from Copperhill Technologies</a>, which includes an onboard CAN transceiver.. A separate ESP32 development board and a suitable transceiver can serve the same purpose, provided the electrical connections and software pin assignments agree.</p><p>On the software side, the CAN driver handles communication with the controller. ARD1939 operates above that driver and supplies the J1939 protocol functionality. Your application then uses the stack to exchange J1939 messages.</p><p>This division matters when troubleshooting. A program that compiles successfully may still have an incorrect CAN pin assignment, while a working CAN interface does not by itself confirm that the J1939 application is configured correctly.</p><h3>Preparing the Arduino IDE</h3><p>Begin by installing the Arduino IDE and adding Espressif&#8217;s ESP32 board support through Boards Manager. If the ESP32 package is not available in the list, add Espressif&#8217;s board package address in the IDE&#8217;s Additional Boards Manager URLs setting, following the official installation instructions.</p><p>In Boards Manager, locate the &#8220;esp32 by Espressif Systems&#8221; package and install the version appropriate for the project. Then select the board configuration matching your hardware and choose its USB serial port. Before introducing the J1939 software, upload a simple sketch to confirm that compilation and programming work.</p><p>There is an important compatibility consideration here: the original ARD1939 ESP32 project uses an older CAN driver and a precompiled protocol component. Compatibility with every subsequent ESP32 board package should not be assumed. Espressif documents breaking changes between Arduino-ESP32 core versions 2.x and 3.0. If an older project fails to compile, investigate the software versions before changing the application code.</p><p>Once you establish a working combination, record the Arduino IDE version, ESP32 board package version, board selection, and library versions. These details make the installation reproducible.</p><h3>Adding the ARD1939 Project</h3><p>Download the <a href="https://copperhilltech.com/blog/sae-j1939-protocol-stack-sketch-for-esp32-using-the-arduino-ide/">ESP32 edition of ARD1939</a> provided with the original project and extract the archive into a local working folder. Preserve the supplied directory structure and open its Arduino sketch.</p><p>The ESP32 distribution includes a precompiled protocol component rather than the complete ARD1939 implementation source. Consequently, the supplied supporting files must remain available to the build process. Copying only the main sketch into a new project may leave required components behind.</p><p>Check the extracted package for installation notes and any libraries that need to be placed in the Arduino sketchbook&#8217;s libraries folder. An Arduino project archive is not necessarily a library archive, so the entire download should not automatically be installed through &#8220;Add .ZIP Library.&#8221;</p><p>Compile the supplied example before making changes. This first build establishes whether the development environment can locate the headers, CAN driver, and precompiled stack.</p><h3>Using the Correct CAN Driver</h3><p>For the original ESP32 implementation, I selected the ESP32 CAN Protocol Demo driver and modified it for use with ARD1939. The changes included adding CAN error reporting and making several C++ compatibility adjustments.</p><p>Those modifications are part of the integration. Replacing the project&#8217;s driver with an unrelated CAN library may require changes to the interface between the driver and the protocol stack. Even when two libraries support the same controller, their initialization, transmit, receive, and error-reporting functions can differ.</p><p>When reproducing the original project, begin with its accompanying driver files. Establish a working baseline before considering a migration to another driver.</p><h3>Configuring the Hardware Interface</h3><p>Before uploading the J1939 example, verify that the CAN transmit and receive GPIO assignments match the board&#8217;s wiring. On a board with an integrated transceiver, these connections are usually fixed by the hardware design.</p><p>Also check whether the transceiver has an enable or standby input that requires configuration. A correctly initialized controller cannot communicate through a transceiver that remains in standby.</p><p>The CAN bit rate must match the test network, and the driver must handle extended 29-bit identifiers. Use the settings appropriate to the supplied example and the network you intend to connect.</p><h3>Running the J1939 Application</h3><p>Begin with the supplied application&#8217;s existing initialization and processing sequence. Review its device identity, address settings, message handling, and transmission behavior before adapting it to your own project.</p><p>The protocol stack needs regular processing time. Preserve the example&#8217;s intended call sequence and avoid adding long delays or blocking operations that interfere with communication. Wireless connections, user interfaces, and data logging should be introduced after basic J1939 operation has been established.</p><p>Installing the stack also does not automatically provide an application that understands every engine parameter. Your program still needs to select the relevant Parameter Group Numbers, interpret their data fields, and apply the appropriate scaling and offsets.</p><h3>Verifying the Installation</h3><p>Use a small bench network for the initial test, with suitable termination and a second CAN interface or J1939 device. A CAN monitor provides an independent view of the messages exchanged by the ESP32.</p><p>Verify the installation in stages:</p><ol><li><p>Confirm that the supplied project compiles and uploads.</p></li><li><p>Check any available startup and error messages.</p></li><li><p>Verify CAN reception and transmission.</p></li><li><p>Observe address claiming and the example&#8217;s intended J1939 traffic.</p></li><li><p>Introduce your own application changes gradually.</p></li></ol><p>This sequence helps distinguish development-environment problems from wiring, driver, and protocol issues.</p><h3>A Foundation for Further Development</h3><p>With the hardware interface and example application working, ARD1939 provides a starting point for exploring embedded J1939 development on the ESP32. From there, the application can grow into a gateway, logger, simulator, or another purpose-built network device.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0euyVIRs" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A0XZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!A0XZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg" width="300" height="391" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:391,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with Arduino&quot;,&quot;title&quot;:&quot;SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with Arduino&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://link.amazon/B0euyVIRs&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with Arduino" title="SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with Arduino" srcset="https://substackcdn.com/image/fetch/$s_!A0XZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A0XZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febaef50d-bacc-4bf6-9a74-6101b6908a3f_300x391.jpeg 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 original software is provided free of charge for demonstration and educational use, without warranty or technical support. My book, <a href="https://link.amazon/B0euyVIRs">SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with Arduino</a>, explains the ARD1939 interface and implementation concepts in greater detail. Although the original examples focus on other Arduino platforms, the protocol concepts remain relevant to the ESP32 version.</p>]]></content:encoded></item><item><title><![CDATA[Connecting NMEA 0183 and NMEA 2000]]></title><description><![CDATA[How the KC-2W converter helps older marine instruments communicate with newer electronics]]></description><link>https://www.wilfriedvoss.com/p/connecting-nmea-0183-and-nmea-2000</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/connecting-nmea-0183-and-nmea-2000</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 01 Nov 2026 16:43:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!2TSz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2TSz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2TSz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 424w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 848w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2TSz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png" width="1000" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:908509,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/223051965?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.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_!2TSz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 424w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 848w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!2TSz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63b1cc50-baba-4e79-a27c-24efce75b4e4_1000x1000.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Upgrading marine electronics often creates an unexpected problem: the new equipment works, the old equipment still works, but they cannot exchange information. An older GPS receiver, depth instrument, or wind sensor may provide an NMEA 0183 interface, while a new chartplotter expects data from an NMEA 2000 network. Replacing every instrument would solve the compatibility problem, but it could also turn a modest upgrade into an expensive project.</p><p>The <a href="https://link.amazon/B0aVfoiQt">KC-2W bidirectional converter</a> addresses this gap. It translates supported NMEA 0183 sentences into NMEA 2000 messages and performs the conversion in the opposite direction. This allows compatible equipment from different generations to share information, helping boat owners retain useful instruments while upgrading their onboard network.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h3>Why a Cable Adapter Is Not Enough</h3><p>NMEA 0183 and NMEA 2000 serve a similar purpose: exchanging information between marine electronic devices. However, they use different electrical interfaces, communication methods, and data formats.</p><p>NMEA 0183 transfers information as readable text messages called sentences. Each sentence carries a particular type of information, such as position, heading, or water depth. A conventional connection has one transmitting device, commonly called a talker, sending information to receiving devices known as listeners.</p><p>NMEA 2000 uses CAN Bus technology and carries information in binary messages identified by Parameter Group Numbers, or PGNs. Multiple devices communicate over a shared backbone rather than relying on individual serial connections for each data source.</p><p>Consequently, connecting the wires through a passive adapter cannot make these systems communicate. An active converter must receive a message, interpret its contents, and create the corresponding message for the other network.</p><h3>What Bidirectional Conversion Makes Possible</h3><p>Consider a boat with an older NMEA 0183 depth instrument and a recently installed NMEA 2000 chartplotter. If the converter supports the instrument&#8217;s depth sentences and the corresponding NMEA 2000 output, the chartplotter can receive that information through the network. The existing transducer and instrument can remain in service.</p><p>Conversion in the other direction is equally useful. Position information available on an NMEA 2000 network could be translated into an appropriate NMEA 0183 sentence for an older receiving device. A practical example is supplying position to a compatible VHF radio that requires an external GPS source.</p><p>These examples illustrate the converter&#8217;s main benefit: equipment replacement can follow the condition and usefulness of individual instruments instead of being dictated entirely by interface compatibility.</p><p>Bidirectional conversion does not mean that every possible message is translated. Compatibility depends on the converter&#8217;s supported sentences, PGNs, and conversion mappings, as well as the messages accepted by the receiving equipment.</p><h3>Installation and Configuration</h3><p>The KC-2W draws power through its NMEA 2000 connection, reducing the need for separate power wiring. Its NMEA 0183 input provides automatic baud-rate detection, while the output rate is configurable. Input detection does not automatically select the rate required by an older receiving instrument.</p><p>Published specifications differ between versions: the supplied listing states automatic detection up to 38,400 baud, while ONWA&#8217;s product page lists up to 115,200 baud. The documentation for the particular unit should determine installation settings.</p><p>ONWA also documents Wi-Fi for configuration and data output, with browser-based configuration and firmware-update facilities. Wireless access can make supported data available to compatible applications, but application format and connection requirements still matter.</p><p>The manufacturer lists a 9&#8211;30 VDC supply range, operation from &#8722;20&#176;C to +55&#176;C, and protection against overvoltage, power transients, and accidental reverse polarity. Its published waterproof designation is &#8220;IPX67,&#8221; an unusual notation that warrants clarification before choosing an exposed mounting location.</p><h3>Check the Data Path Before Connecting</h3><p>A successful installation starts with a simple question: which device needs which information?</p><p>Identify the source message, confirm that the KC-2W translates it, and verify that the destination accepts the resulting message. For an older instrument receiving serial data, check its required baud rate as well.</p><p>The NMEA 2000 backbone still requires correct power, termination, and connections. Automatic baud-rate detection simplifies part of the installation; it does not replace proper wiring or network planning. Where information can travel in both directions, plan the connections carefully to avoid feeding converted data back toward its original source.</p><p>For boats carrying a mixture of older and newer electronics, the KC-2W offers a practical bridge between two established marine communication standards. Its value lies in making existing information available where it is needed&#8212;and allowing useful equipment to remain useful. <a href="https://link.amazon/B0aVfoiQt">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[Simulating SAE J1939 Engine Data]]></title><description><![CDATA[Testing displays, gateways, and data loggers without a running diesel engine]]></description><link>https://www.wilfriedvoss.com/p/simulating-sae-j1939-engine-data</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/simulating-sae-j1939-engine-data</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 01 Nov 2026 14:34:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rzkq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rzkq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rzkq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rzkq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:997093,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/223036132?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.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_!Rzkq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!Rzkq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F284fbc32-b4be-40ce-8719-d3d856dcb105_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Developing an SAE J1939 application does not always require access to a truck or a running diesel engine. For many development tasks, what matters is receiving the messages that an engine controller and other electronic control units would normally transmit. A simulator can provide that traffic on a workbench, allowing developers to test their software under controlled and repeatable conditions.</p><p>Consider a dashboard that displays engine speed, coolant temperature, and oil pressure. Before connecting it to a vehicle, you need to determine whether it interprets the incoming data correctly. Does the tachometer show the expected speed? Does the temperature display use the correct units? Does a warning appear when oil pressure falls below the configured threshold? Simulated messages let you investigate these questions by choosing the values yourself.</p><p>The same approach is useful for testing gateways, recording devices, and remote monitoring systems. It also provides an accessible way to learn J1939: instead of trying to understand everything happening on a busy vehicle network, you can begin with a few known messages.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>Signals, SPNs, and PGNs</h2><p>Before configuring a simulation, it helps to distinguish between an individual parameter and the message that carries it.</p><p>An SPN, or Suspect Parameter Number, identifies a parameter such as engine speed. A PGN, or Parameter Group Number, identifies a parameter group that can contain several related parameters. Consequently, simulating three signals does not necessarily require transmitting three separate messages.</p><p>The transmitted data must also use the correct encoding. A physical value, such as a temperature or rotational speed, usually needs to be converted into a numerical representation using the specified resolution and offset. Its position and length within the message matter just as much as its value.</p><p>The <a href="https://www.sae.org/standards/j1939da_4q2012-j1939-digital-annex">SAE J1939 Digital Annex</a> provides the PGN and SPN definitions needed for this work, including data lengths, units, resolutions, offsets, and transmission information.</p><h2>Choosing What to Simulate</h2><p>A useful simulation begins with the requirements of the receiving device. There is little benefit in generating a large collection of messages if the application only uses a handful of parameters.</p><p>For an initial dashboard test, engine speed, coolant temperature, and oil pressure may be sufficient. A vehicle monitoring application might additionally require road speed, fuel level, fuel consumption information, and vehicle position. Identification and maintenance functions may depend on information such as the vehicle identification number and accumulated engine operating hours.</p><p>Start with fixed values. These make it easy to compare the transmitted data with the receiving device&#8217;s output. Once the basic interpretation is correct, introduce changing values and more demanding conditions.</p><p>For example, you could gradually increase engine speed, raise coolant temperature toward a warning threshold, or interrupt a message to examine how the application handles missing data. Each test should answer a specific question about the receiving system.</p><h2>Message Timing and Requests</h2><p>Correct values are only part of a useful simulation. Message timing also affects how the receiving application behaves.</p><p>A display may interpret a missing periodic message as a communication failure. A gateway may update its output only when new data arrives. If the simulator transmits everything at an arbitrary rate, the test may overlook problems that appear under the expected operating conditions.</p><p>Request handling deserves separate attention. When an application requests a particular parameter group, the simulator must recognize that request and provide the appropriate response. Periodically broadcasting the same information may allow a display to show a value, but it does not verify the application&#8217;s request-and-response behavior.</p><p>For each required parameter group, establish how it should be transmitted and what behavior the application expects.</p><h2>A Practical JCOM1939 Example</h2><p>In my original diesel engine simulation project, I used a <a href="https://copperhilltech.com/sae-j1939-ecu-simulator-board-with-usb-port/">JCOM1939 USB interface</a> together with the <a href="https://jcom1939.com/">Windows-based JCOM1939 Monitor software</a>. The configuration included common engine and vehicle parameters, along with information made available in response to requests.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://copperhilltech.com/sae-j1939-ecu-simulator-board-with-usb-port/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GfmS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 424w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 848w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 1272w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!GfmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png" width="500" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SAE J1939 ECU Simulator Board With USB Port for PC, Raspberry Pi, Arduino, BeagleBone, Teensy, Embedded Systems, Linux, Windows, etc. &quot;,&quot;title&quot;:&quot;SAE J1939 ECU Simulator Board With USB Port for PC, Raspberry Pi, Arduino, BeagleBone, Teensy, Embedded Systems, Linux, Windows, etc. &quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://copperhilltech.com/sae-j1939-ecu-simulator-board-with-usb-port/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="SAE J1939 ECU Simulator Board With USB Port for PC, Raspberry Pi, Arduino, BeagleBone, Teensy, Embedded Systems, Linux, Windows, etc. " title="SAE J1939 ECU Simulator Board With USB Port for PC, Raspberry Pi, Arduino, BeagleBone, Teensy, Embedded Systems, Linux, Windows, etc. " srcset="https://substackcdn.com/image/fetch/$s_!GfmS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 424w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 848w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 1272w, https://substackcdn.com/image/fetch/$s_!GfmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F159d44f0-0e29-41ca-ba15-4b16f2e8681e_500x250.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 interface provided J1939 address claiming and transport protocol support, while the software allowed the simulation messages to be configured and saved.</p><p>This division is useful because ECU simulation involves more than repeatedly transmitting CAN frames. Address claiming establishes the simulated node&#8217;s network identity. Transport protocol support handles parameter groups whose payload exceeds the eight-byte capacity of a Classical CAN data frame.</p><p>When selecting a simulator, check these capabilities against your application. A tool that can transmit individual frames may be sufficient for a basic display test, while a more complete ECU simulation requires additional protocol behavior.</p><h2>Building a Repeatable Test</h2><p>Keep a record of each simulation configuration, including the transmitted values, message timing, source addresses, and expected results. A saved configuration becomes especially valuable when you need to repeat a test after changing software or replacing hardware.</p><p>It is also helpful to monitor the bus independently. Comparing the actual transmitted traffic with the receiving application&#8217;s output makes it easier to determine whether a problem originates in the simulation or in the device being tested.</p><p>Begin with a small, understandable setup, then add complexity as each function is verified. The objective is to create predictable conditions that reveal how your application behaves.</p><h2>Diesel Truck Signal Simulation</h2><p style="text-align: justify;">In order to simulate some frequently used SAE J1939 signals, we have chosen the following parameters:</p><ul><li><p>Engine Speed</p></li><li><p>Wheel Based Vehicle Speed</p></li><li><p>Accelerator Pedal Position</p></li><li><p>Engine Oil Pressure</p></li><li><p>Engine Oil Temperature</p></li><li><p>Engine Coolant Temperature</p></li><li><p>Fuel Level</p></li><li><p>Engine Fuel Rate</p></li><li><p>Engine Fuel Economy</p></li><li><p>Vehicle Position (GPS)</p></li></ul><p style="text-align: justify;">All of the above parameters are transmitted automatically using their corresponding frequencies. The following signals are available on request, a modus that is also supported by our simulator board.</p><ul><li><p>Engine Hours of Operation</p></li><li><p>Vehicle Identification Number (VIN)</p></li><li><p>Time/Date</p></li><li><p>Vehicle Direction</p></li></ul><p style="text-align: justify;">The image below lists these parameters including their definition (PGN, SPN, frequency, etc.):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!chhy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!chhy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 424w, https://substackcdn.com/image/fetch/$s_!chhy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 848w, https://substackcdn.com/image/fetch/$s_!chhy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!chhy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!chhy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diesel Engine Simulation Parameters&quot;,&quot;title&quot;:&quot;Diesel Engine Simulation Parameters&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diesel Engine Simulation Parameters" title="Diesel Engine Simulation Parameters" srcset="https://substackcdn.com/image/fetch/$s_!chhy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 424w, https://substackcdn.com/image/fetch/$s_!chhy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 848w, https://substackcdn.com/image/fetch/$s_!chhy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!chhy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F417ec0ea-8bf5-4012-9405-49cd4aa9df5e_1890x676.jpeg 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 following image demonstrates how these signals have been entered (and saved to a file) using the jCOM1939 Monitor Software:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zH4N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zH4N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zH4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg" width="977" height="902" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:902,&quot;width&quot;:977,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diesel Engine Simulation&quot;,&quot;title&quot;:&quot;Diesel Engine Simulation&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diesel Engine Simulation" title="Diesel Engine Simulation" srcset="https://substackcdn.com/image/fetch/$s_!zH4N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zH4N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F000578fc-9ea9-417b-b58f-e264eae40033_977x902.jpeg 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>All signals are transmitted into an SAE J1939 vehicle network and displayed on the screen in order of appearance.</p><h2>What the Results Tell You</h2><p>A successful bench test demonstrates that the application handles the simulated traffic as expected. Its value depends on how well that traffic represents the intended vehicle or machine.</p><p>Fixed values can verify decoding. Changing values can exercise display updates and application logic. Deliberately interrupted messages can test timeout handling. More coordinated scenarios can examine how the application responds when several operating conditions change together.</p><p>Final testing on the intended equipment remains necessary. Real networks introduce additional traffic, manufacturer-specific behavior, electrical conditions, and interactions between controllers. A simulator helps you resolve many basic problems before reaching that stage&#8212;and makes those problems easier to reproduce when they occur.</p>]]></content:encoded></item><item><title><![CDATA[OBD-II Is Not a Vehicle Control Interface]]></title><description><![CDATA[Understanding the difference between diagnostic access and the vehicle&#8217;s internal CAN communications]]></description><link>https://www.wilfriedvoss.com/p/obd-ii-is-not-a-vehicle-control-interface</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/obd-ii-is-not-a-vehicle-control-interface</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sat, 31 Oct 2026 20:29:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!34us!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!34us!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!34us!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!34us!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!34us!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!34us!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!34us!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1024339,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222961218?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.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_!34us!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!34us!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!34us!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!34us!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3623917-4fda-4c6f-b1ef-407501f088fa_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Over the years, I have received numerous inquiries about possible OBD-II applications. Some involve straightforward data logging, such as recording engine speed, coolant temperature, or vehicle speed. Others start with a considerably broader assumption: connecting a CAN Bus interface to the OBD-II socket will provide access to the vehicle&#8217;s internal communications and allow the user to control certain functions.</p><p>That assumption confuses a physical connector, a diagnostic communication standard, and the networks responsible for operating the vehicle. They are related, but understanding their different roles is essential before choosing hardware or writing software.</p><p>One symptom of this misunderstanding is surprisingly common: someone connects a CAN Bus interface to the diagnostic socket, starts monitoring, and sees no data. The immediate suspicion is that the interface or software is defective. However, a silent connection can be entirely consistent with the way diagnostic access works.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h3>What OBD-II Provides</h3><p>OBD-II, short for On-Board Diagnostics II, provides standardized access to emissions-related diagnostic information. Depending on what the vehicle supports, this includes current operating values, diagnostic trouble codes, freeze-frame data captured when a fault occurred, and the status of emissions monitoring tests.</p><p>Its value lies in standardization. A compatible scan tool can request an operating parameter without needing a separate definition of that parameter for every vehicle manufacturer. Engine speed, for example, has a standardized parameter identifier and a defined method for converting the returned bytes into RPM.</p><p>However, this standardized access has a defined scope. OBD-II does not provide a universal command set for operating windows, switching lights, controlling steering, or otherwise directing the vehicle&#8217;s normal functions.</p><p>It is also more accurate to describe OBD-II as a diagnostic system and interface than as a separate diagnostic network. On vehicles that use CAN for OBD-II communication, diagnostic messages travel over CAN. Earlier OBD-II implementations used other communication technologies. OBD-II and CAN are therefore not interchangeable terms.</p><h3>Why Listening May Produce No Data</h3><p>Conventional OBD-II readings follow a request-and-response model. The diagnostic tool asks for information, and an appropriate electronic control unit responds.</p><p>For example, a tool requesting engine speed sends a diagnostic request identifying the service and parameter it wants to read. The ECU returns a response containing the requested value, provided that the parameter is supported and the request can be processed.</p><p>A continuously updating RPM display usually results from repeated requests. The scan tool keeps asking for fresh readings and updates its display as responses arrive. Connecting the tool does not cause the vehicle to begin broadcasting every available OBD-II parameter automatically.</p><p>This matters when using a general-purpose CAN interface. An interface configured only to receive messages does not generate diagnostic requests. If no other tool is making those requests, there may be no OBD-II responses to observe.</p><p>Of course, an empty receive window alone does not establish the cause. Incorrect CAN settings, wiring problems, ignition state, and other configuration issues can also prevent communication. The important point is that diagnostic data should not be expected merely because a cable has been connected.</p><h3>The Vehicle&#8217;s Normal CAN Traffic</h3><p>During normal operation, vehicle controllers exchange messages to coordinate their work. An engine controller may transmit information used by the instrument cluster, transmission controller, or other modules. Depending on the function, messages may be sent periodically or in response to events.</p><p>Those messages serve a different purpose from standardized OBD-II requests and responses. Even when both contain engine speed, the CAN identifier, byte positions, scaling, and other details may differ.</p><p>Consequently, knowing the OBD-II parameter identifier for engine speed does not tell you where engine speed appears in the manufacturer&#8217;s ordinary CAN messages.</p><p>CAN defines how frames are communicated. It does not, by itself, define what each payload means. Interpreting the vehicle&#8217;s normal traffic generally requires manufacturer-specific information or reverse engineering.</p><p>A screen full of CAN frames is therefore not the same thing as a screen full of recognizable OBD-II parameters.</p><h3>What the Diagnostic Socket Exposes</h3><p>The diagnostic socket is an access point. Its presence does not guarantee unrestricted visibility into every network inside the vehicle.</p><p>Some vehicles expose ordinary CAN traffic at the connector. In that situation, a passive monitor may receive numerous messages without sending anything. Other vehicles provide diagnostic access through a gateway that controls communication between the external tool and internal networks. Ordinary operating traffic may not be forwarded to the diagnostic connection.</p><p>This explains why a monitoring setup can produce a busy receive window on one vehicle and remain silent on another.</p><p>Neither behavior changes the fundamental purpose of standardized OBD-II communication. The connector&#8217;s accessibility should not be mistaken for a guarantee that the vehicle&#8217;s internal networks are equally accessible.</p><h3>Diagnostics Can Include Commands</h3><p>Describing OBD-II as diagnostic access does require one qualification: diagnostics is not exclusively about reading information.</p><p>Standardized diagnostic services include actions such as clearing emissions-related diagnostic trouble codes and resetting associated diagnostic information. Manufacturer-specific diagnostic systems can go further, supporting actuator tests, service routines, configuration, and other workshop functions.</p><p>However, these capabilities should not be confused with a universal OBD-II vehicle control interface. A professional tool that activates a component during a service test may be using manufacturer-specific diagnostic commands, additional protocols, and authorization procedures.</p><p>The fact that such a tool uses the same physical socket does not mean its functions are available through ordinary standardized OBD-II parameter requests.</p><h3>Why the Available Explanations Often Fall Short</h3><p>Much of the introductory OBD-II material a newcomer encounters concentrates on trouble-code interpretation. Other resources provide parameter tables, conversion formulas, or software examples that produce a useful reading with a few lines of code.</p><p>Those resources can be helpful, but they often begin after an essential explanation has been skipped: how the diagnostic exchange actually works.</p><p>A table explaining a fault code does not explain who transmits the request. A list of parameter identifiers does not explain CAN addressing. A library function that returns RPM may conceal message construction, response handling, timing, and transport details.</p><p>The formal documentation exists. SAE J1979 and ISO 15031-5 describe diagnostic services for conventional emissions-related OBD communication, while other standards address the underlying communication and transport mechanisms. These documents serve as engineering specifications, however, rather than a guided introduction.</p><p>The educational gap is therefore not a complete absence of documentation. It is the difficulty of finding a clear explanation that connects the diagnostic connector, CAN communication, diagnostic requests, and returned data before moving on to code tables and programming examples.</p><h3>Start with the Intended Application</h3><p>For a project that records supported operating values, standardized OBD-II requests may be exactly the right approach. The application needs to determine which parameters the vehicle supports, request them at suitable intervals, and interpret the responses.</p><p>For a project intended to examine the vehicle&#8217;s normal CAN communications, the task is different. It requires determining which traffic is accessible and obtaining the information needed to decode it.</p><p>For a project intended to control vehicle functions, the requirements are different again. Neither a CAN interface nor an OBD-II cable supplies the necessary command definitions simply by being connected.</p><p>Before selecting a board or downloading a software library, establish which of these applications you are actually building. OBD-II offers useful standardized diagnostic access. Understanding the scope of that access is the first step toward making the application work.</p><div><hr></div><h2>BLCKTEC 460T OBD2 Scanner &amp; Car Code Reader</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0edsghBO" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zqz4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 424w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 848w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 1272w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zqz4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png" width="400" height="328" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:328,&quot;width&quot;:400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154328,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://link.amazon/B0edsghBO&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/222961218?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.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_!zqz4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 424w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 848w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 1272w, https://substackcdn.com/image/fetch/$s_!zqz4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb10a998a-8a10-470f-b0d0-2d3b22a74d05_400x328.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 BLCKTEC 460T combines standard OBD-II diagnostics with vehicle-specific access to systems such as the engine, transmission, ABS, and airbags. It supports all 10 OBD-II modes, reads and clears diagnostic trouble codes, displays freeze-frame information, and checks emissions readiness. Users can view, graph, record, and replay live data, overlaying up to four data streams for comparison. Automatic vehicle identification and scanning simplify setup, while supported service functions include oil maintenance resets, ABS bleeding, electronic parking brake resets, steering angle sensor calibration, battery initialization, and throttle body relearn.</p><p>The scanner pairs with the subscription-free RepairSolutions2 app to provide scan reports, verified repair information, maintenance schedules, technical service bulletins, and recall details. It also includes free lifetime updates and U.S.-based support in English and Spanish. Intended for use in the United States and Canada, the 460T supports many OBD-II-compliant vehicles from 1996 onward, but system coverage and service functions vary by year, make, and model. Check BLCKTEC&#8217;s compatibility information before purchasing to confirm support for your vehicle and the specific functions you need. <a href="https://link.amazon/B0edsghBO">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[Cheap Hardware, Expensive Assumptions]]></title><description><![CDATA[Why a low component price does not establish a profitable product&#8212;or a credible business plan.]]></description><link>https://www.wilfriedvoss.com/p/cheap-hardware-expensive-assumptions</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/cheap-hardware-expensive-assumptions</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sat, 31 Oct 2026 15:50:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rLLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rLLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rLLI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rLLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:975780,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222932763?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.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_!rLLI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!rLLI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36ce6b76-c2fb-4dfe-86cf-832ccba50e03_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>I regularly receive inquiries that begin with a question about one of our products and quickly develop into a description of a substantial business opportunity. The proposed market is large, the existing products are expensive, and inexpensive hardware apparently offers a way to compete at a much lower price.</p><p>Then comes the part where somebody needs to make it work.</p><p>Usually, that requires expertise the person making the proposal does not have. Sometimes there is no meaningful development budget. In other cases, financial resources may be available, but the technical work has not been sufficiently understood to estimate its cost. The opportunity is presented with considerable confidence; the development requirements remain much less specific.</p><p>A <a href="https://www.wilfriedvoss.com/p/raspberry-pi-at-sea-the-real-cost">recent inquiry concerning marine electronic</a>s reminded me of a similar conversation several years ago about an Electronic Logging Device, or ELD. The markets were different, but the underlying argument was familiar: established products cost too much, the hardware could be purchased inexpensively, and a lower-priced alternative could capture a significant share of an attractive market.</p><p>It is a persuasive starting point. It is also an incomplete business case.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>The Hardware Is Only the Beginning</h2><p>The availability of inexpensive processors, interface boards, and communication modules has made sophisticated hardware accessible to small businesses and individual developers. That is a genuine advantage. Functions that once required substantial custom hardware development can often be demonstrated using readily available components.</p><p>But demonstrating a function is not the same as delivering a product.</p><p>The hardware still needs software that performs the required tasks reliably. It needs configuration, error handling, recovery procedures, testing, documentation, and a practical way to install updates. The finished system must also accommodate customers whose equipment and operating conditions differ from those used during development.</p><p>Lower hardware costs do not automatically reduce any of that work. A less expensive processor does not make a programming task take fewer hours.</p><h2>One Product Can Require Several Development Efforts</h2><p>The ELD proposal illustrates the issue. The envisioned product involved more than an onboard device. It also required a server-side system to receive, store, process, and present the information.</p><p>Those are distinct development responsibilities. The team working on the onboard equipment must address device operation, vehicle communication, data collection, and behavior when connections fail. The server-side team must address data handling, user access, application functions, and operation of the supporting service.</p><p>In a small organization, some people may contribute to both areas. Nevertheless, the work remains different and requires appropriate expertise. The two sides must also be integrated and tested together. Depending on the proposed product, mobile applications and other interfaces can add further development work.</p><p>Purchasing an inexpensive board does not provide those resources. Nor does a working prototype establish how much effort remains before the system can be sold and supported.</p><h2>A Large Market Does Not Finance Development</h2><p>Another recurring feature of these inquiries is the emphasis on potential sales. There may be hundreds of thousands of possible customers. Capturing even a small percentage would supposedly generate impressive revenue.</p><p>Perhaps it would. But a market estimate does not pay the people developing the product.</p><p>Engineering expenses begin before sales revenue arrives. Hardware must be purchased, software written, prototypes evaluated, and problems corrected. Applicable compliance requirements must be identified and addressed. Production, documentation, and customer support must be prepared.</p><p>Some expenses can be staged, and production can be organized in batches. Even so, somebody must provide the funding and accept the risk that sales will arrive later than expected&#8212;or fail to arrive at all.</p><p>A credible proposal needs to connect the market opportunity with a development budget, a realistic schedule, and a funded path to delivery. Without that connection, the revenue forecast is largely an expression of optimism.</p><h2>Price Is Not the Same as Component Cost</h2><p>It is easy to examine an established product, estimate the cost of its electronics, and conclude that the manufacturer is charging too much.</p><p>That comparison leaves out much of the business.</p><p>The selling price must recover development expenses and fund continuing software maintenance, technical support, warranty service, administration, and distribution. For a connected product, it may also need to support ongoing server infrastructure and operations. The company must then earn enough profit to remain viable and invest in the product&#8217;s future.</p><p>This does not mean every established product is reasonably priced or that a new competitor cannot improve the economics. It means a high selling price is not, by itself, evidence of greed. It may reflect the financial responsibility of maintaining a product and supporting the customers who depend on it.</p><p>A competitor promising the same functionality at a substantially lower price needs to explain which costs it can reduce and how. Pointing to cheaper hardware is rarely a sufficient answer.</p><h2>Expertise Is Part of the Investment</h2><p>For me, these inquiries also raise a practical question: who is expected to supply the missing technical knowledge?</p><p>An initial product question can gradually become a discussion of system architecture, development strategy, component selection, and project feasibility. Those subjects require professional judgment built through years of experience. They have value, even when the conversation takes place before a formal project exists.</p><p>I understand why an entrepreneur wants to explore an idea before committing money. But uncertainty about a business opportunity does not make the expert&#8217;s contribution cost-free. If technical guidance is necessary to establish whether the venture is viable, that guidance belongs in the project budget.</p><p>Inexpensive hardware can provide an excellent foundation for a new product. Turning it into a successful business requires funded development, capable people, realistic expectations, and a price that supports the responsibilities being accepted. Until those elements are accounted for, the inexpensive board is simply the least expensive part of the proposal.</p>]]></content:encoded></item><item><title><![CDATA[Raspberry Pi at Sea: The Real Cost]]></title><description><![CDATA[Why an affordable DIY marine computer becomes a different proposition when sold as a finished, supported product.]]></description><link>https://www.wilfriedvoss.com/p/raspberry-pi-at-sea-the-real-cost</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/raspberry-pi-at-sea-the-real-cost</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sat, 31 Oct 2026 14:40:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aSyn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aSyn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aSyn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aSyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:979594,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222919067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.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_!aSyn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!aSyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc52212ca-ae15-47cd-b332-fea2125d8dbd_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Recently, I received a somewhat vague inquiry concerning Raspberry Pi-based marine electronics and our <a href="https://copperhilltech.com/pican-m-nmea-0183-nmea-2000-hat-for-raspberry-pi-with-smps/">PiCAN-M interface board</a>. No specific project was proposed, but the wording of the message suggested an interest in exploring a commercial opportunity. The <a href="https://youtu.be/AXSuR1gsBdk">accompanying YouTube video</a> presented an inexpensive Raspberry Pi system as an alternative to costly marine electronics.</p><p>It was not the first time the idea had crossed my desk. At Copperhill Technologies, we had already considered offering a computer system with NMEA 2000 and NMEA 0183 connectivity. With the PiCAN-M board in our product line, it was a natural possibility to explore. We ultimately decided not to pursue it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><p>That decision was not a rejection of the technology. A Raspberry Pi running software such as OpenPlotter and Signal K can be a useful platform for collecting, displaying, and recording marine instrument data. It also provides opportunities for experimentation and specialized applications. For a technically inclined boat owner, putting such a system together can be an interesting and worthwhile project.</p><p>Selling it as a finished product is a different undertaking.</p><p>The video&#8217;s headline centers on a $209 computer. That is an attractive number, particularly when placed beside an invoice for several thousand dollars of commercial marine equipment. But buying two circuit boards does not give you a complete, installed, supported marine computer. Someone still has to provide the power supply, storage, cooling, cables, and mounting hardware. Someone has to assemble the system, install and configure the software, test it, and explain how to use it.</p><p>If the owner does that work, the investment is partly money but mostly personal time. If a business does it, that time becomes a cost that must be recovered through the selling price.</p><p>There is also the matter of what happens after the package arrives. Copperhill Technologies is a small business, and we would not have technicians traveling around the country to install computers aboard customers&#8217; boats. Installation would fall to the owner or a local installer. Questions about power connections, network wiring, missing instrument readings, and software settings would nevertheless find their way back to us. Supplying the computer would only be the beginning of that responsibility.</p><p>I receive proposals from time to time that start with inexpensive hardware and end with predictions of substantial sales. I understand the appeal. There is a large market for marine electronics, and the prospect of giving boat owners a more affordable, flexible way to use their instrument data deserves consideration. But the size of the broader market does not tell me how many customers would buy a particular product, what they would pay, or how much support they would need.</p><p>As a business owner, those are the questions I have to answer. Copperhill Technologies serves several technical markets beyond marine electronics, and every new product competes for the same limited development time and support resources. A promising concept needs to become a sustainable product before it becomes a business opportunity.</p><p>Nevertheless, the inquiry did inspire me to revisit the subject. In the following sections, I will examine the video&#8217;s argument and then work through the costs of supplying the proposed system as a commercial product. The Raspberry Pi approach has real merits. Understanding them requires a more complete comparison than the price of the boards.</p><h2>What the Video Gets Right&#8212;and What It Leaves Out</h2><p>First, I appreciate that the video mentions Copperhill Technologies several times, identifying us as the manufacturer of the PiCAN-M board. It is welcome exposure for our business and the products we offer. However, that recognition does not prevent me from taking a critical look at the video&#8217;s technical claims and economic assumptions.</p><p>The video builds its argument around the consolidation of the marine electronics industry. It describes how familiar brands, including Raymarine, Simrad, B&amp;G, Lowrance, and Navionics, became part of larger corporate portfolios. It then connects those acquisitions with equipment prices, chart subscriptions, and the difficulty of moving away from an established manufacturer&#8217;s ecosystem.</p><p>Its intended message is clear: boat owners have more alternatives than the major manufacturers would like them to believe.</p><p>To support that message, the video introduces a Raspberry Pi computer with a PiCAN-M interface board, running OpenPlotter, Signal K, and OpenCPN. This combination can connect to existing marine instruments, make supported data available to other applications, and provide chart viewing and navigation functions. Instrument readings can also be displayed on a cell phone connected to the boat&#8217;s local Wi-Fi network.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://copperhilltech.com/pican-m-nmea-0183-nmea-2000-hat-for-raspberry-pi-with-smps/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zVVV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 424w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 848w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 1272w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zVVV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png" width="500" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198615,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://copperhilltech.com/pican-m-nmea-0183-nmea-2000-hat-for-raspberry-pi-with-smps/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/222919067?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.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_!zVVV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 424w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 848w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 1272w, https://substackcdn.com/image/fetch/$s_!zVVV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59801fb8-78d5-42d8-af3d-629ae67ec67a_500x386.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>There is a useful idea here. Boat owners can gain more control over how they display, record, and process their instrument data. Open-source software also gives developers opportunities to create functions beyond those supplied by an equipment manufacturer. Those are legitimate advantages, and they deserve an informed discussion.</p><p>Unfortunately, the video wraps that discussion in a much broader claim about corporate ownership, excessive margins, and an inexpensive route to independence. Its financial figures and technical descriptions create an impression of thorough research, but several of the conclusions go beyond what the information actually establishes.</p><h2>AI Production Does Not Replace Technical Understanding</h2><p>YouTube identifies the video as containing altered or AI-generated sound or visuals. That disclosure alone does not establish how the script was researched or written. However, the presentation illustrates a familiar weakness of AI-generated material: assembling plausible facts into a confident narrative without adequately examining the connections between them.</p><p>The visual presentation raises further concerns. Several computer screens and product images do not accurately represent the equipment or software being discussed. These appear to be AI-generated illustrations, although their origin cannot be established from appearance alone. In a technical presentation, such images can mislead viewers about what the proposed system actually looks like and how it operates. They reinforce the impression that the finished video was not adequately reviewed by someone familiar with the technology.</p><p>A list of references does not resolve that problem. A source may support an acquisition price, a product specification, or a revenue figure without supporting the conclusion drawn from it. Several important claims in the video are insufficiently substantiated, particularly where it moves from those individual facts to assumptions about technical equivalence, customer dependence, and business economics.</p><p>For example, the video repeatedly points to the substantial revenues of major marine electronics manufacturers. Those figures demonstrate the size of the businesses being discussed. They do not establish the potential sales volume for a Raspberry Pi-based marine computer. Revenue from a broad portfolio of chartplotters, radar, sonar, instruments, and other products cannot simply be treated as an available market for a small open-source data hub.</p><p>There may be a worthwhile market for such a product. The video does not establish its size.</p><h2>The Technical Comparison Is Incomplete</h2><p>The most obvious problem is the comparison between the proposed $209 computer and the expensive collection of equipment presented at the beginning.</p><p>A Raspberry Pi and PiCAN-M board do not replace every function represented by that invoice. They do not become a radar system merely because they can display instrument data. They do not include a marine display, and they still depend on sensors and other equipment to produce the information they process.</p><p>To its credit, the video acknowledges some of these limitations. It recommends retaining a commercial chartplotter at the helm and keeping the Raspberry Pi system in a protected location. That is an important qualification, but it also weakens the dramatic price comparison. If the owner retains the primary navigation equipment, the Pi is an additional system whose value must be assessed against the additional functions it provides.</p><p>The power arrangement also receives too little attention. The video presents the PiCAN-M&#8217;s onboard supply as a straightforward way to power both boards from the NMEA 2000 backbone. A Pi 5 installation requires a more careful assessment of the supply capacity, peripheral load, wiring, and available network power. For the commercial configuration considered here, I would use an independent power supply rather than assume that an existing instrument network can reliably carry the additional load.</p><p>Likewise, installing Signal K does not guarantee that every connected device and every proprietary function will become available. The required messages must be supported, connections must be configured, and the results must be checked. Displaying an existing reading through an available dashboard is one task. Developing a new application or supporting an unusual device is another.</p><p>The flexibility is real. So is the work required to use it.</p><h2>The Economic Comparison Leaves Out the Work</h2><p>The video&#8217;s central price covers two major components. It leaves out much of what turns those components into a usable product.</p><p>Storage, power conversion, cooling, an enclosure, cables, protection, and mounting provisions all cost money. Assembly, software configuration, and testing require time. A system installed aboard a boat must then be checked against that boat&#8217;s particular equipment and network.</p><p>A technically capable owner may perform those tasks personally. That can make the project economical, especially if the owner enjoys the work. But unpaid personal effort cannot be carried into a commercial cost calculation as though it does not exist.</p><p>A supplier must also prepare installation instructions, connection diagrams, troubleshooting guidance, and recovery procedures. After the sale, someone must answer questions when the phone cannot connect, an expected engine reading is missing, or the computer restarts intermittently. The cause may be the supplied product, the boat&#8217;s wiring, another instrument, or a configuration setting. Determining which one is responsible is itself technical work.</p><p>The video also uses gross margin as evidence of how much money manufacturers retain from their products. Gross margin is not net profit. The remaining revenue must fund engineering, software maintenance, support, administration, and other operating expenses. Its example of money spent at a dealer also overlooks the distinction between the dealer&#8217;s retail revenue and the manufacturer&#8217;s revenue.</p><p>None of this means that commercial marine equipment is always reasonably priced. It means that the video has not made a complete economic comparison.</p><p>My objection is therefore not to the Raspberry Pi approach. It is to the suggestion that inexpensive components demonstrate an inexpensive finished solution&#8212;or an obvious opportunity for a supplier to make money. Establishing either claim requires accounting for the work between purchasing the boards and delivering a system that a customer can install, operate, and obtain support for.</p><h2>From a DIY Project to a Commercial Product</h2><p>A Raspberry Pi-based marine computer is an attractive proposition in terms of both price and functionality. Combined with a PiCAN-M board and suitable open-source software, it provides a flexible platform for displaying instrument data, recording information, and running navigation applications. For a boat owner who is willing and technically capable of assembling, configuring, and installing the system, it is an entirely valid choice.</p><p>The economics change when a business offers that same system as a finished product. The customer is then paying for more than the components. They are buying an assembled, configured, and tested computer, together with documentation, technical assistance, and the expectation that somebody will take responsibility when it does not work as expected.</p><p>For our estimate, the hardware would include the Raspberry Pi 5, PiCAN-M board, PiCAN-M enclosure, microSD card, independent power supply, cooling, and the necessary connections. However, that does not include the larger expenses associated with supplying and supporting the finished system.</p><p>Those expenses include:</p><ul><li><p>Assembly, software installation, configuration, and testing.</p></li><li><p>Online documentation, installation instructions, and troubleshooting guidance.</p></li><li><p>Technical support before, during, and after installation.</p></li><li><p>Customer service, order processing, and payment fees.</p></li><li><p>Packaging, shipping materials, and outbound shipping.</p></li><li><p>Applicable import duties, customs charges, and tariffs.</p></li><li><p>Warranty service, returns, and replacement units.</p></li><li><p>Ongoing software maintenance and compatibility testing.</p></li></ul><p>Some of these costs occur with every unit. Others must be spread across an uncertain number of sales. Documentation, for example, requires substantial effort before the first shipment and continued attention as software and supported hardware change. Technical support is even harder to predict: one customer may need little assistance, while another may require hours of troubleshooting.</p><p>Taking these responsibilities into account, our preliminary estimate is a selling price of roughly $1,100 to $1,250 per unit. This is a planning estimate rather than a quotation, but it reflects the difference between purchasing inexpensive components and operating a business that supplies a supported product. The margin must cover the expenses beyond assembly and leave enough profit to make the undertaking worthwhile.</p><p>Even at that price, the system would still require installation aboard the boat. We would not have personnel traveling around the country to perform that work. The customer would have to install it personally or hire a local technician, adding either their own time or another invoice to the total investment.</p><p>Installation would also generate support requests. A missing instrument reading might result from software settings, unsupported messages, wiring, or another device on the network. From the customer&#8217;s perspective, however, the new computer is not doing what they expected. Helping establish the cause becomes part of the supplier&#8217;s workload, even when the supplied hardware is functioning correctly.</p><p>At this point, the comparison with professional marine equipment becomes much closer than the video&#8217;s $209 figure suggests. The Raspberry Pi system may still offer valuable flexibility, particularly for specialized applications, but its commercial appeal must stand on those capabilities and the complete delivered price.</p><p>That is why I distinguish between recommending the technology and deciding to manufacture a finished system around it. A capable owner can build something useful and economical by contributing their own time and knowledge. A supplier must charge for that work and accept continuing responsibility for the product. </p><h3>Final Thoughts</h3><p>I receive similar inquiries regularly, often accompanied by predictions of substantial future business. This particular inquiry prompted me to revisit an idea we had already considered: offering a Raspberry Pi-based marine computer as a finished commercial product. The technology remains attractive. The business case requires considerably more than inexpensive hardware and an encouraging estimate of market size.</p><p>For illustration, suppose there were 100,000 potential installations and we could convert 1% into sales. Those are hypothetical assumptions, not a market forecast. At approximately $1,200 per unit, the resulting 1,000 orders would generate $1.2 million in revenue. That sounds promising, but it says little about the investment required or the profit remaining. Our estimated selling price allows for the costs of supplying and supporting each unit; it does not establish the upfront funding needed to purchase inventory, develop documentation, and arrange sufficient personnel and production capacity. Manufacturing in batches would reduce the initial commitment, but somebody would still have to finance those batches.</p><p>The sales timeline matters just as much. Selling 1,000 units in one year creates a very different business from selling them over five years, while support and operating expenses continue throughout. Before committing, I would need credible evidence of demand at the actual selling price, a realistic sales schedule, and a return that justifies the money and time invested. A Raspberry Pi marine computer can be an excellent project for a capable boat owner. Turning it into a supported commercial product is a separate undertaking&#8212;and the inexpensive boards do not make that undertaking inexpensive.</p>]]></content:encoded></item><item><title><![CDATA[OBD-II Data Logging with Raspberry Pi and the PiCAN2 CAN Bus Interface]]></title><description><![CDATA[Understanding the hardware, software, and diagnostic communication behind a vehicle data logger]]></description><link>https://www.wilfriedvoss.com/p/obd-ii-data-logging-with-raspberry</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/obd-ii-data-logging-with-raspberry</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:50:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8mKt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8mKt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8mKt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 424w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 848w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 1272w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8mKt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png" width="1000" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:945288,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222821106?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.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_!8mKt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 424w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 848w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.png 1272w, https://substackcdn.com/image/fetch/$s_!8mKt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa04d2f28-730c-475f-894e-a1a2e0e6c771_1000x562.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 Raspberry Pi equipped with a <a href="https://copperhilltech.com/pican2-can-interface-for-raspberry-pi-with-smps/">PiCAN2 CAN Bus interface</a> provides a useful platform for exploring vehicle diagnostics and recording CAN traffic. However, connecting the hardware to a vehicle&#8217;s OBD-II port is only the beginning. Successful data logging requires an understanding of the electrical connection, the CAN configuration, and the diagnostic messages exchanged with the vehicle.</p><p>Over the years, I have received numerous questions from users attempting this project. Many difficulties arise from the same assumption: once the interface is connected, recognizable engine data should appear automatically. In practice, capturing CAN frames and obtaining meaningful OBD-II measurements are two different tasks.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>CAN Bus and OBD-II Serve Different Purposes</h2><p>CAN Bus provides the communication mechanism that allows electronic control units to exchange messages. OBD-II defines diagnostic services through which a tester can request information such as engine speed, coolant temperature, diagnostic trouble codes, and emissions-related operating conditions.</p><p>The distinction matters because a CAN interface receives frames containing identifiers and data bytes. It does not automatically recognize those bytes as engine speed, vehicle speed, or temperature. Software must interpret the messages according to the applicable protocol.</p><p>Furthermore, an OBD-II connector does not guarantee that the vehicle uses CAN for diagnostics. Older vehicles may use other OBD-II communication protocols that the PiCAN2 cannot access directly. Before selecting hardware or configuring software, establish which diagnostic protocol the vehicle supports.</p><h2>Passive Monitoring Versus Diagnostic Requests</h2><p>There are two approaches to collecting data through a vehicle&#8217;s diagnostic connector.</p><p>Passive monitoring records traffic already present on the accessible CAN network. This approach can reveal message identifiers, transmission intervals, and changing data values. However, much of that traffic may use manufacturer-specific formats. Without documentation, a recording can contain thousands of frames while providing little immediately useful information.</p><p>OBD-II data acquisition usually involves an active exchange. The diagnostic application sends a request, and one or more control units return a response. For example, an application can request engine speed using the appropriate diagnostic service and parameter identifier, commonly called a PID.</p><p>Consequently, a logger that only listens cannot assume that standardized OBD-II measurements will appear continuously. Some vehicles expose considerable traffic at the diagnostic connector; others provide access through a gateway that limits what is visible until a diagnostic request is received.</p><p>Sending supported diagnostic requests is part of normal OBD-II operation. Nevertheless, arbitrary CAN transmissions should be avoided. A diagnostic data logger should send only the messages required for its intended function, with a controlled request rate.</p><h2>Choosing and Powering the Hardware</h2><p>The Raspberry Pi runs the logging application, while the PiCAN2 provides the CAN controller and transceiver needed to communicate with the network.</p><p>If the system will receive power from the vehicle, the <a href="https://copperhilltech.com/pican2-can-interface-for-raspberry-pi-with-smps/">PiCAN2 version with an onboard switch-mode power supply</a> offers a convenient arrangement. It converts the vehicle supply to the voltage required by the Raspberry Pi, provided the installation remains within the board&#8217;s electrical ratings and available power budget.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://copperhilltech.com/pican2-can-interface-for-raspberry-pi-with-smps/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vq5y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 424w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 848w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 1272w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vq5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png" width="500" height="412" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80ac8263-68a2-48ee-a2d3-131004866924_500x412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263945,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://copperhilltech.com/pican2-can-interface-for-raspberry-pi-with-smps/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/222821106?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.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_!Vq5y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 424w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 848w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 1272w, https://substackcdn.com/image/fetch/$s_!Vq5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80ac8263-68a2-48ee-a2d3-131004866924_500x412.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 power arrangement deserves attention beyond simply getting the Raspberry Pi to boot. The OBD-II power connection may remain energized after the ignition is switched off. A logger left connected can therefore continue drawing current from the battery.</p><p>A permanent installation should account for standby consumption, vehicle electrical conditions, and orderly shutdown. Repeatedly removing power while the Raspberry Pi is writing data can damage files or corrupt its storage.</p><h2>Connecting to the Diagnostic Port</h2><p>For CAN-based OBD-II communication, the principal connector assignments are:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AmWA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AmWA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 424w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 848w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 1272w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!AmWA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png" width="1038" height="504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:504,&quot;width&quot;:1038,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40020,&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://www.wilfriedvoss.com/i/222821106?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.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_!AmWA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 424w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 848w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 1272w, https://substackcdn.com/image/fetch/$s_!AmWA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb47f8e45-6b2b-4888-aff2-004433ef3b75_1038x504.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>These assignments do not replace the wiring instructions for the interface board and cable. Check the connector orientation carefully, and follow the manufacturer&#8217;s guidance for power and ground connections.</p><p>The PiCAN2 can be connected through its DB9 connector or screw terminal.</p><p>When using an OBD-II-to-DB9 cable, verify that its wiring matches the PiCAN2 connector configuration. A DB9 connector does not establish a universal CAN pinout. The PiCAN2 solder jumpers must also be configured appropriately for the chosen cable.</p><p>An open-ended OBD-II cable offers another option, but every connection must be identified before wiring it to the terminal. Wire colors vary between cable manufacturers and should never be treated as a standard.</p><h2>Leave the Vehicle&#8217;s Termination Intact</h2><p>A properly installed vehicle CAN network already has its termination resistors. Connecting a diagnostic interface generally does not require an additional resistor.</p><p>The PiCAN2 termination resistor should therefore normally remain disabled when connecting to an existing vehicle network. Adding another termination resistor changes the electrical load and can interfere with communication.</p><p>This differs from a small bench network, where the developer must provide suitable termination at both physical ends of the bus.</p><h2>Configuring the Raspberry Pi</h2><p>The PiCAN2 uses an MCP2515 CAN controller connected to the Raspberry Pi through SPI. Linux accesses the controller through SocketCAN, which presents the CAN channel as a network interface, typically named <code>can0</code>.</p><p>Configuration involves enabling SPI and loading the appropriate device-tree overlay. The controller&#8217;s oscillator frequency and interrupt assignment must match the actual board.</p><p>Use the <a href="https://copperhilltech.com/pican2-controller-area-network-can-interface-for-raspberry-pi/">PiCAN2 documentation</a> together with the instructions for the installed Raspberry Pi OS version. Older tutorials may refer to configuration file locations or overlay entries that differ from those used by newer releases. There is no benefit in copying an old configuration without checking whether it applies to the hardware and operating system.</p><p>Once the controller is recognized, the CAN interface must be configured with the correct bit rate. A rate of 500 kbit/s is common for CAN-based OBD-II, but it should not be assumed for every application.</p><p>For initial passive monitoring, listen-only mode is useful because it prevents the interface from transmitting onto the network. Active diagnostic requests require normal operating mode.</p><h2>Recording Frames Is Only the First Step</h2><p>Utilities such as <code>candump</code>, supplied with Linux CAN utilities, can display and record received frames. They are valuable for confirming that the interface works and for capturing timestamped traffic for later analysis.</p><p>However, <code>candump</code> does not automatically turn a raw CAN recording into an OBD-II report. Obtaining useful measurements requires software that generates diagnostic requests, identifies responses, and applies the correct decoding rules.</p><p>For example, standardized OBD-II engine speed is calculated from two response bytes:</p><p><code>Engine speed in rpm = (256 &#215; A + B) / 4</code></p><p>The application must first identify a valid response to the engine-speed request before applying that formula. It must also handle unsupported parameters, response timeouts, and potentially responses from multiple control units. Longer diagnostic messages may require ISO-TP transport handling.</p><p>For a practical logger, decoded measurements should be saved with timestamps, parameter names, units, and an indication of missing or invalid responses.</p><h2>Troubleshooting in a Logical Order</h2><p>If no data appears, check the system one layer at a time:</p><ol><li><p>Confirm that the vehicle supports CAN-based OBD-II.</p></li><li><p>Verify the cable wiring, board jumpers, and ground connection.</p></li><li><p>Check that the PiCAN2 termination resistor is disabled.</p></li><li><p>Confirm that Linux recognizes the CAN controller.</p></li><li><p>Verify the oscillator configuration and CAN bit rate.</p></li><li><p>Check whether the vehicle must be awake or the ignition switched on.</p></li><li><p>Establish whether passive traffic is available or diagnostic requests are required.</p></li><li><p>Confirm that the requested OBD-II parameters are supported.</p></li></ol><p>A quiet diagnostic connector does not necessarily indicate defective hardware. The vehicle may be asleep, a gateway may restrict access, or the desired information may only be transmitted in response to a request.</p><p>A Raspberry Pi and <a href="https://copperhilltech.com/pican2-can-interface-for-raspberry-pi-with-smps/">PiCAN2</a> make a flexible platform for learning these distinctions. Start by establishing a reliable connection, then capture traffic, introduce supported diagnostic requests, and finally build the decoding and storage functions that turn individual responses into a useful vehicle data log.</p>]]></content:encoded></item><item><title><![CDATA[Engine Sensors & OBD-II Codes Explained]]></title><description><![CDATA[A practical introduction to sensors, trouble codes, and diagnostic reasoning]]></description><link>https://www.wilfriedvoss.com/p/engine-sensors-and-obd-ii-codes-explained</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/engine-sensors-and-obd-ii-codes-explained</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Fri, 30 Oct 2026 17:02:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ldEN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ldEN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ldEN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ldEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:844701,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222813965?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.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_!ldEN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!ldEN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f3c636f-f4e5-43e2-be35-69d511805d07_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>As a starting point for the OBD2 section of this blog, I will introduce and recommend literature that can help readers build a foundation before I explore individual topics in greater detail. Understanding vehicle diagnostics involves more than connecting a scan tool and looking up a trouble code. It requires some knowledge of engine operation, the purpose of individual sensors, and how the engine control unit interprets their signals.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><p>One book worth considering is <a href="https://link.amazon/B0f0WyPMj">Engine Sensors &amp; OBD-II Codes Explained by Madhurjya Dutta</a>, founder of OBDCode.org. According to its description, the book combines explanations of common engine sensors with diagnostic trouble codes, symptoms, testing procedures, live data patterns, and troubleshooting flowcharts. Its emphasis is on identifying the cause of a problem before deciding which component, if any, needs replacement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0f0WyPMj" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a7X_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 424w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 848w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 1272w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a7X_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png" width="400" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e98330c3-2e8b-43db-acee-f40925966a82_400x517.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195909,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://link.amazon/B0f0WyPMj&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/222813965?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.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_!a7X_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 424w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 848w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.png 1272w, https://substackcdn.com/image/fetch/$s_!a7X_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe98330c3-2e8b-43db-acee-f40925966a82_400x517.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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><h3>Moving Beyond the Trouble Code</h3><p>An OBD-II trouble code provides a starting point for diagnosis. It identifies a condition detected by a vehicle&#8217;s monitoring system, but it does not necessarily identify a defective part. A code associated with an oxygen sensor, for example, may require investigation of wiring, intake or exhaust leaks, fuel delivery, or other operating conditions before replacing the sensor.</p><p>The book&#8217;s stated focus on diagnostic reasoning makes it relevant to readers who want to move beyond simply reading and clearing codes. Its description includes mass airflow (MAF), manifold absolute pressure (MAP), oxygen (O&#8322;), throttle position (TPS), and engine coolant temperature (ECT) sensors, along with fuel, timing, and evaporative emissions topics. Understanding what these sensors measure is an essential step toward interpreting the information reported by a scan tool.</p><h3>Live Data and Basic Testing</h3><p>Another topic highlighted in the description is live data, including fuel trims. Trouble codes record detected faults, while live data provides a view of what the control system is reporting during operation. Observing how readings change at idle, as the engine warms up, or under load can help narrow the investigation.</p><p>The advertised coverage also includes multimeter basics, sensor testing procedures, and symptom guides for conditions such as rough idle, misfires, and vacuum leaks. These subjects connect the electronic information available through OBD-II with checks performed on the vehicle itself. However, the appropriate test method depends on the sensor and vehicle; a multimeter is useful for many basic checks, but some investigations require additional equipment and manufacturer service information.</p><h3>A Starting Point for Further Learning</h3><p>Based on the publisher&#8217;s description, this book appears worth considering as an introductory resource for readers interested in practical engine diagnostics. This is an introduction to its advertised scope, rather than a review based on a complete reading of the book. Claims about repair savings or professional-level results should be treated as promotional statements rather than guaranteed outcomes.</p><p>In future posts, I will examine OBD2 concepts in more detail, including the distinction between a trouble code and a diagnosis, the interpretation of live data, and the communication between a diagnostic tool and the vehicle. Introducing relevant literature first gives readers an opportunity to establish some background and follow those discussions with a clearer understanding of the terminology.</p><p><a href="https://link.amazon/B0f0WyPMj">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[Tapping into LIN Bus: Possibilities and Practical Limitations]]></title><description><![CDATA[What it takes to observe, understand, and control devices on an existing automotive network]]></description><link>https://www.wilfriedvoss.com/p/tapping-into-lin-bus-possibilities</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/tapping-into-lin-bus-possibilities</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Fri, 30 Oct 2026 13:05:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4tue!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4tue!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4tue!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!4tue!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!4tue!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!4tue!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4tue!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1045105,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222781564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.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_!4tue!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!4tue!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!4tue!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!4tue!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64ad60b4-fea4-4721-abc2-b24ffba514c9_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>After writing <a href="https://www.wilfriedvoss.com/p/can-bus-vs-lin-bus-why-automotive">my previous post comparing CAN Bus and LIN Bus</a>, I became curious about a practical question: If LIN connects sensors, switches, and actuators throughout a vehicle, could I connect my own hardware and interact with those devices? My background in CAN Bus and SAE J1939 made the idea particularly interesting. Reading sensor values, adding a custom control, or operating an existing actuator all sound like worthwhile projects. However, LIN&#8217;s inexpensive hardware and relatively simple communication protocol do not automatically make an existing vehicle network easy to modify.</p><h2>Connecting Is Only the Beginning</h2><p>Tapping into a LIN network can mean several different things. It might involve passively recording messages, interpreting sensor readings, simulating a missing device, or actively changing how a subsystem operates. These activities have very different requirements.</p><p>Observing communication is generally the least intrusive starting point. A suitable interface can receive traffic without deliberately transmitting onto the bus. Active participation requires a much deeper understanding of the network, because your hardware must transmit the correct information at the correct time.</p><p>Before either activity, you need to identify the actual LIN connection. A device&#8217;s function alone does not reveal its interface. A motor might connect directly to a controller, while that controller communicates over LIN or CAN. Likewise, a nearby LIN wire may belong to a different group of devices than the one you want to investigate.</p><h2>The Appeal: Inexpensive Hardware and Useful Access</h2><p>LIN offers an attractive starting point for embedded development. A microcontroller with a suitable UART or LIN peripheral, together with a LIN transceiver, can provide the basic communication hardware. An ordinary USB-to-serial adapter alone is insufficient because its electrical interface does not match the automotive LIN bus.</p><p>The potential applications extend well beyond operating a particular actuator. A developer might investigate a switch panel, record temperature sensor readings, study a climate-control subsystem, or build a test fixture for a removed automotive component.</p><p>This access can be especially useful on the workbench. Instead of installing an entire vehicle subsystem, a developer can provide power and emulate the communication needed by an individual device. Once its requirements are understood, that arrangement can support troubleshooting, demonstrations, and component testing.</p><h2>The First Obstacle: Understanding the Messages</h2><p>LIN defines how information travels, but it does not provide a universal command set for every connected device.</p><p>A frame identifier and several data bytes do not explain themselves. Those bytes might represent a requested position, a measured temperature, switch states, operating modes, or several signals packed together. Their meaning depends on the particular application.</p><p>The most useful starting point is the correct LIN Description File, commonly called an LDF. It describes the network&#8217;s frames, signals, publishers, subscribers, and schedules. Even with that file, additional application documentation may be needed to understand operating conditions or device behavior.</p><p>Without documentation, investigation becomes a process of observation and comparison. You record traffic while changing one known input at a time, then look for corresponding changes in the messages. This can reveal useful relationships, but a changing byte is only a clue. It may be a command, feedback, a counter, or an unrelated value.</p><h2>The Second Obstacle: LIN Has a Commander</h2><p>LIN communication follows a schedule managed by one commander, traditionally called the master. The commander transmits a frame header, and the designated publisher provides the response. Depending on the frame, the publisher may be the commander itself or another node.</p><p>That structure matters when adding custom hardware. You cannot assume that a newly connected device may transmit whenever it has something to say. The existing network already assigns responsibility for each frame.</p><p>If your controller sends headers while the original commander is operating, their transmissions can overlap. If it supplies a response already assigned to another device, both may transmit simultaneously. LIN does not use CAN&#8217;s priority-based arbitration to resolve that competition.</p><p>Consequently, understanding a command is only part of the task. You must also determine how your hardware can transmit it without conflicting with the existing participants.</p><h2>Listening, Replacing, and Modifying</h2><p>There are three broadly useful approaches, each with its own advantages and limitations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uodr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uodr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 424w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 848w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 1272w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uodr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png" width="1456" height="557" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:557,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103740,&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://www.wilfriedvoss.com/i/222781564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.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_!Uodr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 424w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 848w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 1272w, https://substackcdn.com/image/fetch/$s_!Uodr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f756f4-1b6b-4eda-9c38-e7136bd432e1_1486x568.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Passive monitoring is a sensible first step because it establishes what the original system actually does.</p><p>Standalone operation provides greater freedom. With the original commander disconnected, your controller can manage the schedule. However, some components may expect initialization, configuration, or repeated communication before they operate.</p><p>An inline gateway offers more flexibility within an existing installation, but it is substantially more demanding. It creates separate electrical segments and must fulfill the appropriate communication role on each side. It must also preserve the behavior that the original controllers expect.</p><h2>Why Replaying a Captured Message May Fail</h2><p>Capturing a message during a particular action can make replay seem like an obvious next step. Sometimes it works, especially in a simple bench setup. In other cases, the captured message is only one part of a larger exchange.</p><p>A device may require a wake-up sequence, an operating-mode command, or periodic updates. The message you recorded might report an action rather than request it. Some applications also include counters or additional validity checks.</p><p>Even a valid command may have only a temporary effect if the original controller sends a different value during the next scheduled cycle.</p><p>Successful control therefore requires an understanding of the device&#8217;s ongoing conversation, including what happens before, during, and after the desired action.</p><h2>Electrical Simplicity Still Requires Care</h2><p>LIN&#8217;s single communication wire simplifies the network, but that wire is part of an automotive electrical system. A suitable transceiver provides the interface between the bus and the microcontroller&#8217;s logic signals. Power, grounding, and protection remain part of the design.</p><p>The interface&#8217;s operating mode also matters. Equipment intended only to observe traffic should not accidentally transmit, wake sleeping devices, or apply an inappropriate commander pull-up arrangement.</p><p>Sleep behavior deserves particular attention in an installed vehicle. A custom device that repeatedly wakes a LIN branch&#8212;or prevents it from sleeping&#8212;can keep other electronics active and increase battery consumption.</p><p>These issues are manageable, but they illustrate why a successful bench experiment is only one step toward a dependable vehicle installation.</p><h2>Where the Effort Pays Off</h2><p>Tapping into LIN is particularly rewarding when the objective is specific and the relevant documentation is available. Recording a known signal, testing a documented actuator, or emulating a defined node can be a practical embedded project.</p><p>The effort increases considerably when both the message definitions and the operating sequence are unknown. At that point, much of the work involves discovering the manufacturer&#8217;s application behavior rather than implementing LIN itself.</p><p>That distinction is the most useful lesson from my curiosity. LIN makes inexpensive automotive networking possible, and it offers interesting opportunities for independent development. Accessing an existing network, however, requires more than an electrical connection. The useful information lies in the messages, the schedule, and the behavior of the devices exchanging them.</p>]]></content:encoded></item><item><title><![CDATA[CAN Bus vs. LIN Bus: Why Automotive Networks Need Both]]></title><description><![CDATA[How LIN reduces the cost and complexity of connecting simple sensors and actuators]]></description><link>https://www.wilfriedvoss.com/p/can-bus-vs-lin-bus-why-automotive</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/can-bus-vs-lin-bus-why-automotive</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Fri, 30 Oct 2026 12:55:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_pJW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_pJW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_pJW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_pJW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:563,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1019454,&quot;alt&quot;:null,&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://www.wilfriedvoss.com/i/222779263?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.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_!_pJW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!_pJW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff056078c-6f8d-4655-8688-09dbb1b66039_1000x563.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>My work has long focused on CAN Bus and SAE J1939, but I was curious to learn more about LIN Bus and the reasons behind its development. Why did the automotive industry need another communication network when CAN was already well established? Exploring that question led me to LIN&#8217;s simpler design, lower cost, and role in connecting devices that do not require CAN&#8217;s capabilities. This post reflects what I learned and explains how these two technologies complement each other.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>CAN and LIN: Different Roles in Automotive Networks</h2><p>CAN Bus and LIN bus frequently appear together in automotive electronics, but they serve different requirements. CAN provides communication between electronic control units that need reliable message exchange, priority handling, and relatively high data rates. LIN provides an economical way to connect simpler devices whose communication needs are much more modest.</p><p>LIN was developed specifically for automotive applications, where adding a full CAN interface to every small sensor, switch, or actuator could introduce unnecessary expense. CAN also originated in the automotive industry, but its use expanded into industrial automation, medical equipment, marine electronics, and many other areas. The distinction is therefore one of design priorities and application scope: LIN was created for inexpensive local automotive networks, while CAN became a broadly adopted communication technology.</p><h2>Why LIN Was Created</h2><p>Consider the communication requirements of an electrically adjustable mirror. Its controller may need to receive a position command and report a few status values. A ventilation flap actuator has similarly limited needs: move to a requested position and indicate whether that position has been reached.</p><p>These functions do not require large amounts of data or particularly high communication speeds. Nevertheless, connecting each device through CAN requires a CAN controller, a suitable transceiver, and the associated wiring and software.</p><p>LIN, short for Local Interconnect Network, was developed to address this situation. It provides a standardized, low-cost network for devices that do not need CAN&#8217;s capabilities. Its intended role was to complement CAN within the vehicle, allowing manufacturers to select a communication system appropriate to each subsystem. Typical applications include mirrors, seats, door electronics, and climate-control actuators.</p><h2>How LIN Keeps Costs Down</h2><p>LIN&#8217;s cost advantage comes from several design decisions working together.</p><p>First, LIN uses one communication wire referenced to ground. Conventional high-speed CAN uses two communication wires, CAN_H and CAN_L, with differential signaling. LIN can therefore reduce communication wiring and connector requirements. The single-wire description applies to the communication connection; LIN devices still need power and ground.</p><p>Second, LIN communication can be implemented using a microcontroller&#8217;s UART, supported by suitable software or dedicated LIN features. A LIN transceiver is still required to connect the microcontroller to the physical bus. This allows inexpensive microcontrollers to serve as network nodes without requiring a CAN controller.</p><p>Third, responding LIN nodes can synchronize their communication timing from the header transmitted by the controlling node. Suitable implementations can consequently avoid a separate precision crystal or ceramic resonator at each responding node. Across the many small devices installed in a vehicle, these component savings become significant.</p><h2>Different Ways of Sharing the Bus</h2><p>CAN and LIN also differ in how they decide when a device may transmit.</p><p>CAN uses message-based arbitration. Multiple nodes can attempt to transmit when the bus becomes available. If transmissions begin simultaneously, the arbitration process determines which message continues according to its identifier. The other nodes wait and try again without corrupting the winning message.</p><p>LIN uses one commander node, traditionally called the master, to organize communication. It transmits message headers according to a schedule, and the designated publisher supplies the response. Depending on the frame, that publisher may be the commander itself or another node.</p><p>This arrangement removes the need for CAN-style arbitration and makes routine communication predictable. It also means that the schedule must provide suitable opportunities for commands and status updates. A device&#8217;s response time depends partly on when its information is scheduled for transmission.</p><h2>Speed and Data Capacity</h2><p>LIN supports communication rates up to 20 kbit/s. That is modest, but entirely adequate for many switches, sensors, and small actuators. A ventilation flap does not need a high-speed network to receive an occasional position command.</p><p>Classical CAN supports bit rates up to 1 Mbit/s, subject to network length and physical design. CAN FD increases available throughput by permitting a faster data phase and expands the maximum data payload from eight bytes to 64 bytes per frame. These capabilities make CAN more suitable when numerous devices must exchange information frequently or transfer larger amounts of data.</p><p>The additional capacity carries additional implementation requirements. Where only a few bytes need to move at modest intervals, LIN&#8217;s lower performance can be an appropriate engineering choice.</p><h2>CAN and LIN at a Glance</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RE9a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RE9a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 424w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 848w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 1272w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!RE9a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png" width="1456" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170120,&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://www.wilfriedvoss.com/i/222779263?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.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_!RE9a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 424w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 848w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 1272w, https://substackcdn.com/image/fetch/$s_!RE9a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99970a22-3637-437f-ae6e-7148a7f2c957_1480x1016.png 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 CAN wiring comparison refers to conventional high-speed CAN; other CAN physical-layer variants exist.</p><h2>How They Work Together</h2><p>A vehicle can use CAN to connect its main control units while using LIN for smaller groups of local devices. A control unit equipped with both interfaces acts as the connection between the two networks. Texas Instruments describes this use of LIN as a sub-bus for CAN as a common application.</p><p>For example, a climate-control unit could receive information over CAN and control several ventilation flap actuators over LIN. The climate-control unit translates the required actions into scheduled LIN messages and collects status information from the actuators.</p><p>The two buses remain electrically and logically separate. Connecting them requires a controller that understands both interfaces and implements the necessary application behavior. A LIN transceiver alone cannot convert LIN messages into CAN messages.</p><h2>Automotive Origins, Different Reach</h2><p>Both technologies have automotive roots, but their subsequent roles differ. CAN developed into a communication foundation for many industries, supported by higher-layer protocols that define how devices exchange application data. Its adoption extends well beyond passenger vehicles.</p><p>LIN remains closely associated with the automotive requirement that motivated its creation: connecting numerous inexpensive devices without giving every device a more capable network interface than it needs. Its use is not technically restricted to vehicles, but automotive subsystems remain its principal application area.</p><p>Choosing between CAN and LIN therefore starts with the application&#8217;s communication requirements. CAN offers greater capacity and flexibility. LIN offers an economical solution for simple, scheduled communication. Within a vehicle, combining them allows each function to use the network best suited to its needs.</p><p>For more technical background information see <a href="http://www.ni.com/white-paper/9733/en/">Introduction to the Local Interconnect Network (LIN) Bus</a>.</p>]]></content:encoded></item><item><title><![CDATA[Automotive Network Development with Teensy 4.0, Dual LIN, and CAN FD]]></title><description><![CDATA[A compact platform for automotive testing and gateway development.]]></description><link>https://www.wilfriedvoss.com/p/automotive-network-development-with</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/automotive-network-development-with</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 28 Oct 2026 21:22:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JbR9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JbR9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JbR9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JbR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!JbR9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!JbR9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7070bf56-e592-4c72-9db4-ccf155ef7fd6_1672x941.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Automotive electronics often combine several communication networks, each serving a particular purpose. CAN connects electronic control units, while LIN provides an economical way to communicate with simpler devices such as sensors and actuators.</p><p>For developers working across these networks, the <a href="https://copperhilltech.com/teensy-4-0-dual-lin-and-can-fd-board/">Teensy 4.0 Dual LIN and CAN FD Board</a> brings two LIN channels and a CAN interface onto one compact platform. With the Teensy 4.0 included and installed, the board provides a foundation for custom firmware, bench experiments, and automotive network development.</p><h3>Where LIN Fits</h3><p>LIN, short for Local Interconnect Network, is a single-wire serial communication system operating at speeds up to 20 kbit/s. It is widely used for automotive functions where modest data rates and low implementation costs are appropriate. Climate-control flap motors are one example; other applications involve switches, sensors, and small actuators.</p><p>A LIN network uses a commander, traditionally called the master, to schedule communication with responder devices. This predictable communication pattern makes LIN useful for recurring control commands and status updates.</p><h3>Why Two LIN Ports Matter</h3><p>The board&#8217;s two LIN ports are particularly useful when a project involves two separate LIN networks. Each channel provides a connection to its own bus, allowing developers to work with both networks from one microcontroller.</p><p>Consider a bench setup with a climate-control actuator on one LIN network and a lighting module on another. With suitable firmware, the Teensy can schedule communication on each channel, issue commands, and collect responses. Both devices can participate in the same experiment while retaining separate bus wiring and communication schedules.</p><p>That arrangement offers several practical advantages:</p><ul><li><p>Separate communication schedules: Each LIN network can follow the timing required by its connected devices.</p></li><li><p>More capacity across two buses: Traffic can be distributed between networks. Each bus retains LIN&#8217;s speed limit, but the devices do not all compete for one bus schedule.</p></li><li><p>Easier comparison testing: Developers can connect two devices or configurations to separate channels and compare their behavior under similar test conditions.</p></li><li><p>More flexible prototypes: One controller can coordinate two LIN subsystems, reducing the need for a second development board.</p></li></ul><p>Separate LIN channels also make it possible to experiment with different bus configurations without repeatedly rewiring a single interface. The channels are separate communication interfaces; this does not imply galvanic isolation.</p><h3>Applications: From Device Testing to Gateway Development</h3><p>One useful application is a programmable LIN test fixture. With the appropriate message definitions and firmware, developers can send commands to a LIN device, read its responses, and repeat a test sequence. Two channels allow a fixture to exercise two separate LIN networks during the same test.</p><p>Another application is a CAN-to-LIN gateway prototype. For example, firmware could receive a command over CAN, translate it into a LIN transaction, and return the resulting status over CAN. With two LIN ports, that prototype could address devices on two different LIN branches.</p><p>This translation requires application software. CAN and LIN use different communication methods and message structures, so the board provides the hardware foundation while the firmware defines scheduling, signal mapping, and error handling.</p><p>The same platform can support educational projects that demonstrate how a central controller coordinates multiple networks. Developers can explore the relationship between CAN commands, LIN schedules, and device responses in a manageable bench setup.</p><h3>Teensy 4.0 Provides the Processing Platform</h3><p>Teensy is a family of compact, USB-programmable microcontroller development boards. The Teensy 4.0 uses a 600 MHz Arm Cortex-M7 processor and supports development through the Arduino IDE with Teensy software support. Its processing capability leaves room for application logic alongside network communication, such as evaluating responses, managing test sequences, or preparing data for a host computer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://copperhilltech.com/teensy-4-0-dual-lin-and-can-fd-board/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qt8y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qt8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg" width="800" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75888,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://copperhilltech.com/teensy-4-0-dual-lin-and-can-fd-board/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.wilfriedvoss.com/i/222558062?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qt8y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qt8y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b685e9b-49c2-40ad-a1c9-6768f3dcbc92_800x600.jpeg 1456w" sizes="auto, 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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 interface board adds two Microchip MCP2004A LIN transceivers and support for Classical CAN or CAN FD. It also includes a 120 &#937; CAN termination resistor, an onboard 5 V regulator accepting a 7&#8211;12 V DC input, reverse supply voltage protection, and ESD protection.</p><p>For engineers, educators, and embedded developers, the main attraction is the combination: two LIN networks, a CAN interface, and one programmable controller. It creates a practical starting point for testing individual devices and exploring how multiple automotive subsystems work together.</p><p>View the <a href="https://copperhilltech.com/teensy-4-0-dual-lin-and-can-fd-board/">Teensy 4.0 Dual LIN and CAN FD Board at Copperhill Technologies</a> for product details.</p>]]></content:encoded></item><item><title><![CDATA[CAN Bus Error Injection: Available Hardware and Software]]></title><description><![CDATA[An Overview of Hardware and Software for Testing CAN Bus Faults]]></description><link>https://www.wilfriedvoss.com/p/can-bus-error-injection-available</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/can-bus-error-injection-available</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 27 Oct 2026 20:54:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TZ9Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TZ9Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!TZ9Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F855dca3c-dacc-4c32-a4ce-fb4078b9efd7_1774x887.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>CAN Bus error injection is used to test how a network or an individual device responds when communication is disrupted. The available tools range from simple boards with switches and adjustable resistors to sophisticated hardware and software systems that introduce precisely timed disturbances during a CAN message.</p><p>The distinction matters because &#8220;error injection&#8221; covers several different activities. A board that simulates a broken wire does not necessarily generate a CRC error at a selected bit position. Likewise, a tool that alters a CAN frame does not necessarily reproduce the voltage characteristics of a failing transceiver.</p><p>The following survey identifies representative commercial options and their capabilities. It is not an exhaustive list of every manufacturer or product.</p>
      <p>
          <a href="https://www.wilfriedvoss.com/p/can-bus-error-injection-available">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[CAN Bus Error Simulation: Why It Matters and How to Get Started]]></title><description><![CDATA[This article is part of CAN Bus Embedded Development, my growing online book about practical CAN Bus hardware, software, and embedded system development.]]></description><link>https://www.wilfriedvoss.com/p/can-bus-error-simulation-why-it-matters</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/can-bus-error-simulation-why-it-matters</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 27 Oct 2026 20:26:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FzGr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This article is part of <em>CAN Bus Embedded Development</em>, my growing online book about practical CAN Bus hardware, software, and embedded system development.</p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FzGr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FzGr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 424w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 848w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 1272w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FzGr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!FzGr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 424w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 848w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.png 1272w, https://substackcdn.com/image/fetch/$s_!FzGr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d56be1c-025d-43fe-866c-c7b0b468cf4e_1983x793.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 post was inspired by a customer inquiry about simulating CAN Bus faults and capturing them with an oscilloscope. The customer wanted to create a collection of reference waveforms for troubleshooting networks in the field.</p><p>I was familiar with CAN Bus error detection, but deliberately simulating physical faults was not a topic I knew well enough to offer a detailed answer. The question made me curious, so I started researching the available methods and equipment.</p><p>As I discovered, some faults can be introduced with a relatively simple test setup, while others require specialized hardware. In this post, I will explain why error simulation can be useful and explore some of the ways to put a CAN network to the test.</p><p>For a <strong>market survey</strong>, see my post <a href="https://www.wilfriedvoss.com/p/can-bus-error-injection-available">CAN Bus Error Injection: Available Hardware and Software</a>.</p><h2>Understanding CAN Bus Error Simulation</h2><p>A CAN Bus network is designed to detect communication errors and recover from many of them automatically. But how can you be sure that your application responds correctly when something goes wrong?</p><p>One way is to deliberately introduce faults into a controlled test network and observe the results. CAN Bus error simulation helps developers, technicians, and engineers understand what failures look like, how CAN controllers respond, and whether an application can recover when normal communication returns.</p><p>Error simulation can range from a simple wiring change to sophisticated equipment that disturbs individual bits in a CAN message. The right approach depends on the fault you want to reproduce and what you want to learn from it.</p><h2>Who Benefits from CAN Bus Error Simulation?</h2><p>CAN Bus error simulation is useful both for evaluating an entire network and for developing an individual node. From a network perspective, it can reveal how wiring faults, incorrect termination, electrical interference, or a faulty transceiver affect communication. For a node under development, the focus is on how that device responds to such conditions: whether it detects and reports errors, how it behaves if it enters the bus-off state, and whether it recovers when the fault is removed. In either case, the node is tested as part of a network so its interaction with other devices can be observed.</p><p>The extent of CAN Bus error simulation depends on the requirements of the application. A simple educational project may need only basic communication tests, while applications that demand high reliability&#8212;such as vehicles, medical equipment, industrial machinery, and robotics&#8212;benefit from more extensive fault testing. In these systems, developers need to understand how a device or network responds to communication failures and whether it can recover or enter a safe state.</p><h2></h2>
      <p>
          <a href="https://www.wilfriedvoss.com/p/can-bus-error-simulation-why-it-matters">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[A Brief Introduction to CAN Bus and SAE J1939]]></title><description><![CDATA[Understanding CAN Bus and SAE J1939 for Thomson Electrak HD Control]]></description><link>https://www.wilfriedvoss.com/p/a-brief-introduction-to-can-bus-and</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/a-brief-introduction-to-can-bus-and</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 25 Oct 2026 16:02:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cekD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This post is part of my onlone book <em>Linear Actuator Motion Control per CAN Bus</em>.</p><p><a href="https://www.wilfriedvoss.com/p/linear-actuator-motion-control-per-6aa">Table of contents&#8230;</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cekD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cekD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!cekD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!cekD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!cekD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cekD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image 1&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image 1" title="Generated image 1" srcset="https://substackcdn.com/image/fetch/$s_!cekD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!cekD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!cekD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!cekD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa89a6a42-82d7-4a02-bade-4836228170b0_1672x941.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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 Thomson user manual assumes that the reader is familiar with the SAE J1939 standard. Terminology from the standard is used, but not described in detail.</p><p>As I mentioned in the introduction, you don&#8217;t need to implement an SAE J1939 protocol stack to control the actuator. Mere CAN Bus communication will do. Nevertheless, a basic knowledge of both will help to better understand the terminology used in the manual.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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><h2>Controller Area Network</h2><p>Controller Area Network (CAN) is a serial network technology that was originally designed for the automotive industry, especially for European cars, but has also become a popular bus in industrial automation as well as other applications. The CAN bus is primarily used in embedded systems, and as its name implies, is a network technology that provides fast communication among microcontrollers up to real-time requirements, eliminating the need for the much more expensive and complex technology of a Dual-Ported RAM.</p><p>CAN is a two-wire, half duplex, high-speed network system, that is far superior to conventional serial technologies such as RS232 regarding functionality and reliability and yet CAN implementations are more cost effective.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Whz3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Whz3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg" width="500" height="167" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:167,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A picture containing table\n\nDescription automatically generated&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A picture containing table

Description automatically generated" title="A picture containing table

Description automatically generated" srcset="https://substackcdn.com/image/fetch/$s_!Whz3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Whz3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc114f258-0363-497a-8b6a-da2df2ede297_500x167.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>While, for instance, TCP/IP is designed for the transport of large data amounts, CAN is designed for real-time requirements and with its 1 MBit/sec baud rate can easily beat a 100 MBit/sec TCP/IP connection when it comes to short reaction times, timely error detection, quick error recovery and error repair.</p><p>CAN networks can be used as an embedded communication system for microcontrollers as well as an open communication system for intelligent devices. Some users, for example in the field of medical engineering, opted for CAN because they must meet particularly stringent safety requirements.</p><p>Similar requirements had to be considered by manufacturers of other equipment with very high safety or reliability requirements (e.g., robots, lifts, and transportation systems).</p><p>The greatest advantage of Controller Area Network lies in the reduced amount of wiring combined with an ingenious prevention of message collision (meaning no data will be lost during message transmission).</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1pKv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!1pKv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg" width="500" height="229" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:229,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Diagram\n\nDescription automatically generated&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram

Description automatically generated" title="Diagram

Description automatically generated" srcset="https://substackcdn.com/image/fetch/$s_!1pKv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1pKv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fa63745-8ff4-4cd7-b96e-63f4d2f214ba_500x229.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>The following shows a need-to-know overview of CAN&#8217;s technical characteristics.</p><p><strong>Controller Area Network</strong></p><ul><li><p>Is a serial networking technology for embedded solutions.</p></li><li><p>Needs only two wires named CAN_H and CAN_L.</p></li><li><p>Operates at data rates of up to 1 Megabit per second.</p></li><li><p>Supports a maximum of 8 bytes per message frame.</p></li><li><p>Does not support node IDs, only message IDs. One application can support multiple message IDs.</p></li><li><p>Supports message priority, i.e., the lower the message ID the higher its priority.</p></li><li><p>Supports two message ID lengths, 11-bit (standard) and 29-bit (extended).</p></li><li><p>Does not experience message collisions (as they can occur under other serial technologies).</p></li><li><p>Is not demanding in terms of cable requirements. Twisted-pair wiring is sufficient.</p></li></ul><p>For further details, see my book <a href="https://link.amazon/B0a5kDdml">A Comprehensible Guide to Controller Area Network</a>.</p><h2>SAE J1939</h2><p>SAE J1939 is a higher-layer protocol based on Controller Area Network (CAN). It provides serial data communications between microprocessor systems (also called Electronic Control Units - ECU) in any kind of heavy-duty vehicles. The messages exchanged between these units can be data such as vehicle road speed, torque control message from the transmission to the engine, oil temperature, and many more.</p><p>Even though extremely effective in automobiles and small, embedded applications, CAN alone is not suitable for projects that require a minimum of network management and messages with more than eight data bytes.</p><p>Consequently, higher layer protocols (additional software on top of the CAN physical layer) such as SAE J1939 for vehicles were designed to provide an improved networking technology that support messages of unlimited length and allow network management, which includes the use of node IDs (CAN supports only message IDs where one node can manage multiple message IDs).</p><p><strong>SAE J1939</strong></p><ul><li><p>Is a standard developed by the Society of Automotive Engineers (SAE)</p></li><li><p>Defines communication for vehicle networks (trucks, buses, agricultural equipment, etc.)</p></li><li><p>Is a Higher-Layer Protocol using CAN as the physical layer</p></li><li><p>Uses shielded twisted pair wire</p></li><li><p>Applies a maximum network length of 40 meters (~120 ft.)</p></li><li><p>Applies a standard baud rate of 250 Kbit/sec</p></li><li><p>Allows a maximum of 30 nodes (ECUs) in a network</p></li><li><p>Allows a maximum of 253 controller applications (CA) where one ECU can manage several CAs</p></li><li><p>Supports peer-to-peer and broadcast communication</p></li><li><p>Supports message lengths up to 1785 bytes</p></li><li><p>Defines a set of Parameter Group Numbers (PGNs, predefined vehicle parameters)</p></li><li><p>Supports network management (includes node IDs and an address claiming procedure)</p></li></ul><p>Compared to other, function-driven protocols such as CANopen and DeviceNet, SAE J1939 is primarily data-driven. In fact, J1939 provides a far better data bandwidth than any of these automation protocols.</p><p>For further details, see my book <a href="https://link.amazon/B04WxYwJ1">A Comprehensible Guide to J1939</a>.</p>]]></content:encoded></item></channel></rss>