<?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>Mon, 21 Sep 2026 23:33:22 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[Are We Overengineering CAN Bus? CANopen, J1939, CAN FD, CAN XL, and Ethernet]]></title><description><![CDATA[A Personal Perspective After Three Decades of CAN Bus Development]]></description><link>https://www.wilfriedvoss.com/p/are-we-overengineering-can-bus-canopen</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/are-we-overengineering-can-bus-canopen</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 20 Sep 2026 19:04:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JkME!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_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_!JkME!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JkME!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!JkME!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!JkME!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!JkME!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JkME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67e94dce-1d13-40e6-bca0-2860851f2c6e_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;:967016,&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://wilfriedvoss.substack.com/i/216620416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_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_!JkME!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!JkME!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!JkME!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!JkME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67e94dce-1d13-40e6-bca0-2860851f2c6e_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 have been working with Controller Area Network for roughly three decades, and I should state my position at the beginning: I love Classical CAN.</p><p>It is one of the most ingenious communication technologies developed for embedded systems. It is robust, inexpensive, deterministic, relatively easy to implement, and remarkably tolerant of the electrically hostile environments in which embedded systems often operate.</p><p>But CAN is not a complete network architecture.</p><p>That distinction is important, because it leads directly to higher-layer protocols such as CANopen, SAE J1939, NMEA 2000, ISOBUS, DeviceNet, and others.</p><p>It also leads to a question that I have increasingly asked myself as CAN has evolved into CAN FD and now CAN XL:</p><p><strong>Are we improving CAN, or are we trying to turn CAN into something it was never intended to be?</strong></p><p>What follows is very much a personal view. It is based on roughly three decades of working with CAN, developing CAN-based products and software, writing about the technology, and at one time teaching seminars on CAN and CANopen.</p><p>Others in the industry will certainly disagree with some of my conclusions. That is perfectly fine. My purpose here is not to declare winners and losers, but to question some of the directions CAN development has taken.</p><h2>Why Do We Need Higher-Layer Protocols?</h2><p>Classical CAN provides an excellent data-link layer, but deliberately leaves many important questions unanswered.</p><p>CAN does not tell us what a message identifier means. It does not provide a standardized device-addressing system. It does not define how a device joins a network, how devices identify themselves, how parameters are represented, how diagnostic information is exchanged, or how application data larger than a CAN frame should be transported.</p><p>In other words, CAN provides the communication mechanism, but not the complete network-management infrastructure.</p><p>Higher-layer protocols fill that gap.</p><p>CANopen, SAE J1939, DeviceNet, NMEA 2000, ISOBUS, and other protocols approached the problem differently. Some developed extensive device models and configuration mechanisms. Others concentrated more heavily on message definitions, addressing, network management, and interoperability within particular industries.</p><p>The existence of these protocols is not the problem. We need higher-layer protocols.</p><p>The more interesting question is how much protocol we actually need.</p><h2>CANopen: Powerful, but at What Cost?</h2><p>I should probably make another personal bias clear.</p><p>Despite having taught CANopen seminars myself and having once been quite familiar with the protocol, I have never become an admirer of CANopen.</p><p>That is not because I fail to understand what CANopen attempts to accomplish. There are aspects of it that I genuinely appreciate.</p><p>The Object Dictionary provides a standardized representation of device data. Device profiles can provide genuine interoperability between products from different manufacturers. The idea that an encoder, drive, I/O module, or other device can conform to a defined profile has obvious advantages.</p><p>But in my view, CANopen achieves these advantages with a considerable amount of complexity.</p><p>Object Dictionaries, PDOs, SDOs, NMT, synchronization, emergency messages, communication profiles, device profiles, configuration mechanisms, and numerous associated specifications create a substantial learning curve.</p><p>CANopen is certainly powerful.</p><p>I simply question whether many embedded applications need that much machinery.</p><p>There is another issue that should not be overlooked: <strong>bandwidth.</strong></p><p>Classical CANopen inherited the fundamental restrictions of Classical CAN: a maximum data field of 8 bytes and a maximum nominal bit rate of 1 Mbit/s. CiA itself describes these as the speed and payload limitations of Classical CANopen. CANopen FD increases the payload to as much as 64 bytes and permits higher data-phase bit rates. Interestingly, CiA has also acknowledged that migration to CANopen FD has been relatively slow because many existing CANopen applications can continue operating within the Classical CAN limitations.</p><p>The bandwidth limitation becomes particularly relevant when CANopen&#8217;s more elaborate communication mechanisms are considered. An 8-byte CAN data field does not leave much room when larger blocks of application or configuration data must be transferred.</p><p>CANopen FD addresses that problem.</p><p>But to me, that raises a more fundamental question:</p><p><strong>If the application increasingly requires substantially more bandwidth and larger packets, should our first response always be to make CAN faster?</strong></p><h2>J1939 Took a Different Approach</h2><p>This is one reason I have always appreciated SAE J1939.</p><p>J1939 provides a surprisingly capable network architecture without requiring an equally large conceptual framework.</p><p>The 29-bit CAN identifier provides priority information, a Parameter Group Number, source addressing, and&#8212;in appropriate cases&#8212;destination information. J1939 defines address claiming, request mechanisms, standardized parameters, diagnostics, and transport mechanisms for messages that exceed the capacity of a single CAN frame.</p><p>From an implementation perspective, the basic concepts are relatively easy to understand.</p><p>A device can announce itself. It can claim an address. Messages identify both their purpose and their source. Parameter Groups organize related information. Larger messages can be transported when necessary.</p><p>There is certainly complexity within the complete J1939 ecosystem, especially when considering the enormous number of standardized parameters and application-specific documents. But the underlying network-management architecture remains comparatively elegant.</p><p>For years I have wondered why that basic approach did not spread much further into general-purpose embedded networking.</p><p>Here I need to make a qualification.</p><p>J1939 actually has spread far beyond diesel-engine control. SAE identifies applications including on- and off-highway trucks, construction equipment, agricultural equipment and implements, and stationary applications such as generator sets.</p><p>Its influence extends even further.</p><p>NMEA 2000 adopted concepts from J1939 for marine networking, while ISO 11783&#8212;better known as ISOBUS&#8212;uses a J1939-based architecture for agricultural machinery.</p><p>So it would be incorrect to describe J1939 as merely an engine protocol.</p><p>Nevertheless, I remain surprised that its relatively straightforward network-management concepts did not become more widely adopted as a general-purpose approach to embedded CAN networking.</p><h2>Then the Automobile Industry Needed More</h2><p>Eventually, Classical CAN&#8217;s limitations became increasingly troublesome, particularly in automotive applications.</p><p>CAN FD was the response.</p><p>This history is worth remembering. CiA states quite explicitly that CAN FD was developed because of the automotive industry&#8217;s increasing bandwidth requirements. Bosch began development in 2011 in cooperation with automobile manufacturers and other CAN experts.</p><p>CAN FD addressed two obvious limitations of Classical CAN.</p><p>The maximum payload increased from 8 bytes to 64 bytes, and the data portion of a frame could be transmitted at a higher bit rate than the arbitration portion.</p><p>Technically, it is an impressive evolution of CAN.</p><p>But I see it primarily as exactly that: <strong>an evolution, not a revolution.</strong></p><p>It moves the bandwidth boundary.</p><p>It does not eliminate it.</p><p>This is not a criticism of the engineers who developed CAN FD. They solved the problem they were given while preserving many of the characteristics that made CAN attractive in the first place.</p><p>My concern is with the underlying strategy.</p><p>If increasing application demands caused 1 Mbit/s and 8-byte messages to become insufficient, increasing those limits gives us additional breathing room.</p><p>But what happens when those new limits are no longer sufficient?</p><p>We already know the answer.</p><h2>Enter CAN XL</h2><p>CAN XL takes the same progression considerably further.</p><p>CiA currently describes the three generations as Classical CAN with up to 8-byte data fields and 1 Mbit/s, CAN FD with up to 64-byte data fields and higher data-phase rates, and CAN XL with data fields up to 2048 bytes and data rates reaching approximately 20 Mbit/s.</p><p>Those are enormous improvements compared with Classical CAN.</p><p>But again, I find myself asking whether this is the direction we should be taking.</p><p>CAN XL development began at the end of 2018 following a request from Volkswagen. CiA credits Volkswagen engineers with supplying many of the initial ideas, followed by significant contributions from Bosch, Fraunhofer, NXP, and other participants. CAN XL has since been incorporated into ISO 11898.</p><p>Consequently, it would be unfair to characterize CAN XL simply as a proprietary German automotive project. It isn&#8217;t.</p><p>But its automotive origins are difficult to ignore.</p><p>And meanwhile, the automotive industry itself is increasingly using Ethernet.</p><p>That brings me to what may be my biggest disagreement with the continuing expansion of CAN.</p><h2>You Can&#8217;t Squeeze Blood Out of a Stone</h2><p>I am not opposed to new technology.</p><p>Nor am I suggesting that we should continue using Classical CAN simply because it has worked well for decades.</p><p>Quite the opposite.</p><p><strong>When the requirements change sufficiently, perhaps the technology should change as well.</strong></p><p>Classical CAN was designed for relatively small amounts of control and status information exchanged reliably among distributed electronic control units.</p><p>For that job, it remains exceptionally good.</p><p>A temperature value does not require a megabit Ethernet connection. Neither does an engine speed, switch position, pressure value, actuator command, alarm condition, or hundreds of other signals routinely exchanged in embedded systems.</p><p>CAN handles those jobs beautifully.</p><p>But cameras, radar, large software downloads, high-resolution sensors, audio/video streams, and other data-intensive applications represent a different class of communication problem.</p><p>If those applications require tens, hundreds, or eventually thousands of megabits per second, continually expanding CAN begins to look less attractive to me.</p><p>There comes a point where, as the saying goes, <strong>you can&#8217;t squeeze blood out of a stone.</strong></p><h2>We Already Have Ethernet</h2><p>Ethernet is hardly an experimental alternative.</p><p>It is one of the most established networking technologies in existence.</p><p>Automotive Ethernet and industrial Ethernet technologies have adapted Ethernet to environments that differ considerably from the office networks with which most people associate the term.</p><p>Ethernet provides something else that CAN FD and CAN XL cannot permanently provide:</p><p><strong>room to grow.</strong></p><p>That does not mean I want Ethernet to replace CAN.</p><p>Quite the opposite.</p><p>I believe the more sensible architecture for many future embedded systems is a <strong>mixed network</strong>.</p><p>Use CAN where CAN makes sense.</p><p>Use Ethernet where Ethernet makes sense.</p><p>And provide gateways between them.</p><p>CAN can continue handling distributed sensors, actuators, controllers, and other devices for which modest message sizes, deterministic arbitration, low cost, and robustness are more important than massive bandwidth.</p><p>Ethernet can provide the high-speed backbone and handle applications involving large amounts of data.</p><p>There is no requirement that an embedded system must choose one or the other.</p><h2>NMEA Took an Interesting Course</h2><p>The marine industry provides an excellent example.</p><p>NMEA 2000 uses CAN and concepts derived from J1939. It has been enormously useful for connecting marine electronics and exchanging information such as engine data, navigation information, heading, tank levels, environmental information, and countless other relatively small pieces of data.</p><p>But modern vessels also contain radar, sonar, chart systems, cameras, audio/video equipment, and other devices capable of producing vastly larger amounts of information.</p><p>NMEA could have attempted to stretch NMEA 2000 progressively further to accommodate those applications.</p><p>Instead, it developed <strong>OneNet</strong>.</p><p>OneNet uses IPv6 and IEEE 802.3 Ethernet and was specifically designed to support high-bandwidth applications while maintaining interoperability with NMEA 2000 through gateways. Interestingly, it can continue transporting NMEA network messages and PGNs over the IP infrastructure.</p><p>I find that approach compelling.</p><p>NMEA did not need to abandon NMEA 2000.</p><p>It also did not need to turn NMEA 2000 into something fundamentally different simply because some marine applications needed much more bandwidth.</p><p>Use the appropriate network for the appropriate job and connect the two.</p><p>That is very close to how I believe embedded networking should evolve.</p><h2>What About J1939 FD?</h2><p>SAE has naturally responded to the availability of CAN FD as well. J1939-22 defines the CAN FD data-link layer for J1939, with goals including extended transport capability, functional safety, cybersecurity, and backward compatibility with existing J1939 definitions.</p><p>I understand the reasoning.</p><p>I am simply not convinced that continually increasing CAN&#8217;s bandwidth represents the best long-term architecture.</p><p>CAN FD solves today&#8217;s problem.</p><p>CAN XL attempts to solve tomorrow&#8217;s.</p><p>What happens after that?</p><p>At some point, an application that continually demands more bandwidth may simply no longer be a CAN application.</p><h2>Perhaps CAN Does Not Need to Become Ethernet</h2><p>This brings me back to why I like Classical CAN so much.</p><p>CAN succeeds because it is exceptionally good at a particular job.</p><p>It does not need to be everything.</p><p>The industry has spent decades developing CAN controllers, transceivers, software stacks, diagnostic tools, higher-layer protocols, engineering knowledge, and manufacturing infrastructure. There are very good economic reasons to preserve that investment.</p><p>But technological familiarity can also tempt us to keep extending a technology because we know it rather than because it remains the best architecture for the problem.</p><p>I remain skeptical about the long-term prospects for CAN XL for precisely that reason.</p><p>I may be wrong.</p><p>CAN XL is standardized, technically sophisticated, and backed by significant companies and industry organizations. It may find important applications, particularly in automotive architectures.</p><p>But I question whether there is a sufficiently large and durable space between CAN FD and Ethernet to justify yet another generation of CAN.</p><p>And as Ethernet technology continues moving closer to sensors and actuators, that question becomes even more interesting.</p><h2>Keep CAN What It Does Best</h2><p>After roughly three decades of working with CAN, my conclusion is not that CAN is obsolete.</p><p>It is almost the opposite.</p><p><strong>I believe CAN is too good at what it does to burden it with the expectation that it must do everything.</strong></p><p>Higher-layer protocols are necessary because CAN itself intentionally leaves network management and application semantics to us.</p><p>Some higher-layer approaches, in my opinion, accomplish that more elegantly than others. I have never been particularly fond of CANopen despite understanding its capabilities and having taught it myself. I continue to admire the relative simplicity and efficiency of the basic J1939 architecture.</p><p>Likewise, I appreciate what CAN FD accomplishes technically while questioning whether continuously increasing CAN bandwidth is the right long-term strategy.</p><p>And I remain skeptical that CAN XL is the inevitable future of CAN networking.</p><p>Perhaps we should stop asking how much more data we can force through CAN and ask a different question:</p><p><strong>What communication technology is appropriate for the data we actually need to move?</strong></p><p>Sometimes the answer will be Ethernet.</p><p>Sometimes it will be CAN.</p><p>Increasingly, the answer may be <strong>both</strong>.</p><p>And there is absolutely nothing wrong with that.</p>]]></content:encoded></item><item><title><![CDATA[What They Didn’t Tell You About CAN FD]]></title><description><![CDATA[Higher Speed and Larger Payloads Come With a Few Important Tradeoffs]]></description><link>https://www.wilfriedvoss.com/p/what-they-didnt-tell-you-about-can</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/what-they-didnt-tell-you-about-can</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sun, 20 Sep 2026 14:21:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dUDH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_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://substackcdn.com/image/fetch/$s_!dUDH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dUDH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dUDH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/165e543d-1956-47f9-8b9a-3e118b08edcd_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;:772419,&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://wilfriedvoss.substack.com/i/216582965?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.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_!dUDH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!dUDH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F165e543d-1956-47f9-8b9a-3e118b08edcd_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><span>This article is part of </span><em><span>CAN Bus Embedded Development</span></em><span>, my growing online book about practical CAN Bus hardware, software, and embedded system development.</span></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div><hr></div><p>There is nothing mysterious about the development of CAN FD, and certainly no conspiracy behind it. Nevertheless, some important practical aspects of CAN FD received considerably less attention during its introduction than its obvious advantages.</p><p>For engineers who had worked successfully with Classical CAN for years, some of those details turned out to be rather important.</p><p>CAN FD &#8212; CAN with Flexible Data Rate &#8212; was introduced by Bosch in 2012. The development itself had started earlier. According to CAN in Automation (CiA), General Motors and Bosch began working on improvements to CAN throughput in early 2011. Bosch subsequently worked with other CAN experts and officially introduced CAN FD in 2012. The technology was later standardized in ISO 11898-1:2015.</p><p>The motivation was easy to understand.</p><p>Classical CAN had been extraordinarily successful, but it had two increasingly noticeable limitations:</p><ul><li><p>A maximum payload of 8 data bytes per CAN frame.</p></li><li><p>A practical standardized upper bit rate of 1 Mbit/sec.</p></li></ul><p>Higher-layer protocols could overcome the payload limitation by dividing larger amounts of data among several CAN frames. SAE J1939, ISO-TP, CANopen, and proprietary protocols all developed mechanisms for doing exactly that.</p><p>But they could not make the underlying CAN bus transmit bits faster.</p><p>As embedded systems became more sophisticated and software images became larger, that limitation became increasingly significant. One of the original automotive motivations for CAN FD was actually reducing the time required to download increasingly large software packages into electronic control units during vehicle production.</p><p>CAN FD addressed both limitations.</p><p>A CAN FD frame can carry as many as 64 data bytes instead of eight. More importantly, CAN FD allows the bit rate to change during transmission of the frame. Arbitration still takes place at the nominal CAN bit rate, preserving CAN&#8217;s familiar nondestructive arbitration mechanism, while the data portion of the frame can be transmitted considerably faster.</p><p>Common CAN FD implementations use data-phase rates of several Mbit/sec, with rates up to 8 Mbit/sec commonly associated with CAN FD.</p><p>On paper, this looks like the natural successor to Classical CAN.</p><p>And technically, it is.</p><p>Migration, however, is another matter.</p>
      <p>
          <a href="https://www.wilfriedvoss.com/p/what-they-didnt-tell-you-about-can">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What You Didn’t Know About CAN]]></title><description><![CDATA[Understanding the Limitations Behind CAN&#8217;s Reliability]]></description><link>https://www.wilfriedvoss.com/p/what-you-didnt-know-about-can</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/what-you-didnt-know-about-can</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Sat, 19 Sep 2026 20:36:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!px-D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_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://substackcdn.com/image/fetch/$s_!px-D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!px-D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!px-D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!px-D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!px-D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!px-D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7149575b-67dd-4417-9768-5beaca46091d_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;:596253,&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://wilfriedvoss.substack.com/i/216496853?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.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_!px-D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!px-D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!px-D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!px-D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7149575b-67dd-4417-9768-5beaca46091d_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><span>This article is part of </span><em><span>CAN Bus Embedded Development</span></em><span>, my growing online book about practical CAN Bus hardware, software, and embedded system development.</span></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div><hr></div><p>Controller Area Network is an ingenious communication technology, but part of its strength comes from what it does <em>not</em> attempt to do.</p><p>CAN provides highly reliable transmission, nondestructive bus arbitration, extensive error detection, automatic retransmission, and mechanisms for removing persistently faulty nodes from the network. At the same time, it leaves many functions that developers may expect from a network protocol entirely to the application.</p><p>Some of these characteristics are easily overlooked, even by engineers who have worked with CAN for years.</p><h2>CAN Does Not Have Node IDs</h2><p>Neither Classical CAN nor CAN FD provides native node IDs.</p><p>A CAN data frame does not contain a source address identifying the node that transmitted it, nor does it contain a destination address identifying the node that should receive it.</p><p>Instead, CAN uses a <strong>CAN Message ID</strong>.</p><p>The basic principle is simple: A node transmitting a message does not know&#8212;or even care&#8212;where that message goes. All nodes connected to the network see the same data frame and determine whether they are interested in it, usually through the CAN controller&#8217;s acceptance filters.</p><p>The reverse is equally important. A node receiving a CAN message does not inherently know which physical node transmitted it. It receives a CAN Message ID and the associated data.</p><p>At first, this may sound restrictive. In practice, it is one of CAN&#8217;s strengths.</p><p>The CAN controller does not need to maintain addresses, routing information, connections, or information about the other devices on the network. A node simply publishes information onto the bus, and interested nodes receive it.</p><p>The simpler, the better.</p><p>If an application requires node addresses, source identification, destination addresses, network management, or similar functionality, those features must be implemented by the application or by a higher-layer protocol.</p><p>CANopen, SAE J1939, and NMEA 2000 are examples of protocols that add such functionality on top of CAN. The important distinction is that these are features of the higher-layer protocol, not CAN itself.</p>
      <p>
          <a href="https://www.wilfriedvoss.com/p/what-you-didnt-know-about-can">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Controller Area Network (CAN): Why It Remains Essential for Embedded Systems]]></title><description><![CDATA[Why CAN bus remains a practical choice for embedded development&#8212;and how its reliability, low hardware requirements, simple software, and efficient two-wire network can matter more than raw speed.]]></description><link>https://www.wilfriedvoss.com/p/controller-area-network-can-why-it</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/controller-area-network-can-why-it</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Fri, 18 Sep 2026 21:27:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U0O9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_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://substackcdn.com/image/fetch/$s_!U0O9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U0O9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U0O9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/321496d1-4968-4d84-9a34-fb406579c9a2_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;:704762,&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://wilfriedvoss.substack.com/i/216365647?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.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_!U0O9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!U0O9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321496d1-4968-4d84-9a34-fb406579c9a2_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><span>This article is part of CAN Bus Embedded Development, my growing online book about practical CAN Bus hardware, software, and embedded system development.</span></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div><hr></div><h2>Controller Area Network</h2><p>In this chapter, I will not attempt another detailed explanation of how Classical CAN or CAN FD works. As mentioned in the introduction, there is already an abundance of excellent literature, specifications, tutorials, and websites covering CAN frames, identifiers, arbitration, bit timing, error handling, and the physical layer.</p><p>There is little value in repeating all of that here.</p><p>Instead, I want to approach CAN from a different direction.</p><p>Rather than asking <strong>&#8220;What is Controller Area Network?&#8221;</strong>, let us ask the more practical question:</p><p><strong>Why are we using it?</strong></p><p>That question becomes particularly important when developing embedded systems. Looking only at specifications, CAN may appear almost outdated compared with modern networking technologies. Classical CAN provides a maximum data field of only 8 bytes and operates at bit rates up to 1 Mbit/s. CAN FD improves considerably on those numbers, supporting payloads of up to 64 bytes and allowing the data portion of a frame to be transmitted at substantially higher bit rates.</p><p>Compared with Ethernet, however, even CAN FD does not appear particularly impressive.</p><p>But raw speed tells only a small part of the story.</p><h2>A Remarkably Complete Protocol</h2><p>One of CAN&#8217;s greatest strengths is how much functionality is handled by the CAN controller itself.</p><p>A CAN controller takes care of functions such as bus access, message arbitration, frame generation, CRC generation and checking, acknowledgment, error detection, error signaling, automatic retransmission, and fault confinement.</p><p>In modern microcontrollers, the CAN controller is frequently integrated directly into the processor. Other designs use a separate CAN controller. In either case, a CAN transceiver normally provides the electrical interface between the controller and the two-wire CAN bus.</p><p>From the application&#8217;s point of view, however, much of the complexity disappears into the hardware.</p><p>At its simplest, the software provides a CAN identifier and some data and tells the controller to transmit them. On reception, the application retrieves the identifier and data from the controller. Status information and error conditions can also be monitored, but the application does not have to implement the underlying network protocol itself.</p><p>That is an enormous advantage in an embedded system.</p><p>It means that sophisticated and reliable network communication can be implemented with relatively modest processor performance, memory, hardware, and software.</p><h2>Arbitration Without Destroying Messages</h2><p>CAN&#8217;s bus arbitration mechanism is a particularly elegant example.</p><p>Suppose two CAN nodes begin transmitting at exactly the same time. In many communication systems, this would result in a collision. Both transmissions would be corrupted, and some mechanism would be required to recover from the collision.</p><p>CAN does something different.</p><p>During transmission, every CAN node also monitors the bus. Arbitration takes place bit by bit using the CAN identifier. Dominant bits override recessive bits. When a transmitting node sends a recessive bit but detects a dominant bit on the bus, it knows that another message has higher priority.</p><p>The losing node simply stops transmitting.</p><p>The higher-priority node continues transmitting without interruption.</p><p>Nothing has been corrupted.</p><p>The node that lost arbitration can attempt transmission again when the bus becomes available.</p><p>This is called <strong>nondestructive arbitration</strong>, and it is one of the reasons CAN works so well for real-time embedded applications. Message priority is inherent in the CAN identifier, and resolving simultaneous bus access does not require destroying the successful transmission.</p><h2>Reliability Is Built In</h2><p>CAN was designed for electrically challenging environments, and reliability is not something that must be added later by application software.</p><p>Every transmitting node monitors what actually appears on the bus. Frames contain CRC protection. CAN also performs bit-stuffing checks, frame-format checks, acknowledgment checks, and other error-detection functions.</p><p>When an error is detected, the erroneous frame is rejected and normally retransmitted automatically.</p><p>CAN also maintains error counters that allow nodes experiencing repeated communication problems to restrict themselves and, eventually, disconnect themselves logically from normal bus communication. A defective node therefore has mechanisms preventing it from indefinitely disrupting the entire network.</p><p>The probability of an undetected corrupted CAN message is extraordinarily small. This combination of error detection, error signaling, retransmission, and fault confinement is one reason CAN escaped its original automotive environment long ago.</p><p>Today, CAN technology can be found in industrial machinery, agricultural equipment, medical equipment, robotics, marine systems, transportation systems, and many other embedded applications.</p><p>The common requirement is not necessarily high bandwidth.</p><p>It is <strong>reliable communication between embedded devices</strong>.</p><h2>Two Wires Can Connect an Entire System</h2><p>Another major advantage is the physical network itself.</p><p>A conventional high-speed CAN network uses a differential two-wire bus, CAN_H and CAN_L. Nodes connect to the same bus rather than requiring individual point-to-point communication links between every device.</p><p>Consider what happens as an embedded system grows.</p><p>Without a network, adding sensors, controllers, displays, actuators, and other intelligent devices can result in increasingly complicated wiring. With CAN, those devices can exchange information over the same two communication conductors.</p><p>In a production CAN network, proper cable characteristics, topology, termination, stub lengths, grounding, and electromagnetic compatibility must of course be considered.</p><p>But during development on a workbench, particularly at moderate bit rates and short distances, CAN can be remarkably forgiving. A simple two-wire connection may be sufficient to get several embedded boards communicating with each other.</p><p>That makes CAN particularly attractive for experimentation and prototyping.</p><h2>What About Speed?</h2><p>This is where CAN is sometimes unfairly judged.</p><p>Classical CAN is limited to a maximum bit rate of 1 Mbit/s and a maximum payload of 8 bytes per data frame. CAN FD increases the payload to as much as 64 bytes and allows the data phase of the frame to operate considerably faster than the arbitration phase. Depending on the transceivers, topology, wiring, and network design, data-phase bit rates of several Mbit/s&#8212;and up to approximately 8 Mbit/s in suitable implementations&#8212;are practical.</p><p>Those numbers are tiny compared with modern Ethernet.</p><p>But that comparison misses the purpose of CAN.</p><p>CAN was never intended to transfer video, large files, database records, or massive streams of data. It was designed primarily to exchange relatively small amounts of information efficiently and reliably between embedded controllers.</p><p>An engine controller may need to communicate engine speed.</p><p>A temperature sensor may transmit a measured value.</p><p>A hydraulic controller may report pressure.</p><p>A motor controller may receive a speed command.</p><p>A machine controller may announce an alarm condition.</p><p>For these applications, 100 Mbit/s or 1 Gbit/s provides little inherent advantage if each useful piece of information consists of only a few bytes.</p><h2>CAN Versus Ethernet</h2><p>This leads to an important point that is easy to overlook:</p><p><strong>Faster does not automatically mean better.</strong></p><p>Ethernet provides vastly greater bandwidth than CAN, and there are many embedded applications where Ethernet is unquestionably the appropriate technology.</p><p>But bandwidth has a price.</p><p>An Ethernet implementation can require more capable hardware, more memory, larger software stacks, more complicated networking software, and greater overall system resources. Depending on the application, switches and additional network infrastructure may also be required.</p><p>CAN approaches the problem from the opposite direction.</p><p>The protocol deliberately provides comparatively modest bandwidth while putting arbitration, error detection, retransmission, and fault handling into the CAN hardware. The resulting software interface can remain remarkably small.</p><p>For a microcontroller exchanging short control and status messages with several other microcontrollers, that tradeoff can be extremely attractive.</p><p>So, in the right embedded application, CAN can effectively <strong>beat Ethernet&#8212;not in bandwidth, but in simplicity, resource requirements, deterministic message prioritization, implementation cost, and robustness.</strong></p><p>That distinction matters.</p><p><em>In memory of Dr.-Ing. Werner Schulze, co-founder of esd electronics, a friend and colleague who once summarized the CAN-versus-Ethernet discussion for me in one wonderfully simple sentence:</em></p><blockquote><p>&#8220;You don&#8217;t use a Ferrari to go grocery shopping.&#8221;</p></blockquote><p>Werner&#8217;s point was not that Ethernet is somehow inferior to CAN. Quite the opposite: Ethernet offers vastly greater performance. His point was that engineering is about choosing the technology appropriate for the task.</p><p>For many embedded control applications, enormous bandwidth simply isn&#8217;t necessary. What matters more may be low hardware cost, modest memory requirements, minimal software overhead, predictable bus access, and robust error handling.</p><p>In other words, sometimes you don&#8217;t need the Ferrari.</p><h2>CAN Is an Embedded Network</h2><p>This is perhaps the most useful way to think about CAN throughout this book.</p><p>CAN is not a general-purpose computer network that happens to be used with microcontrollers.</p><p>It is a network technology designed around the requirements of embedded control.</p><p>It assumes that messages are relatively small. It assumes that multiple controllers need access to a common communication medium. It provides message prioritization. It detects communication errors in hardware. It automatically handles many failures and retransmissions. And it accomplishes all of this while requiring comparatively few hardware and software resources.</p><p>Those characteristics explain why CAN has remained relevant for decades despite enormous increases in processor performance and network bandwidth.</p><p>The question is therefore not:</p><p><strong>&#8220;Why would I use CAN when Ethernet is so much faster?&#8221;</strong></p><p>The better question is:</p><p><strong>&#8220;How much communication does my embedded application actually need, and what will it cost me&#8212;in hardware, software, memory, complexity, and reliability&#8212;to provide it?&#8221;</strong></p><p>For a remarkably large number of embedded systems, CAN remains an excellent answer.</p><div><hr></div><h2>Follow CAN Bus Embedded Development</h2><p><span>New chapters and technical material are added regularly. Subscribe to receive new additions as the online book continues to grow.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.wilfriedvoss.com/subscribe?"><span>Subscribe now</span></a></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p>]]></content:encoded></item><item><title><![CDATA[Classical CAN: Designed for Maximum Reliability]]></title><description><![CDATA[How built-in error detection, rapid recovery, and fault confinement made CAN a trusted network for automotive, industrial, medical, and aerospace systems]]></description><link>https://www.wilfriedvoss.com/p/classical-can-designed-for-maximum</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/classical-can-designed-for-maximum</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Thu, 17 Sep 2026 21:54:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!s-RC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_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://substackcdn.com/image/fetch/$s_!s-RC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s-RC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s-RC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9258255b-aeb4-4d91-9272-29aabc5f7c31_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;:856569,&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://wilfriedvoss.substack.com/i/216220861?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.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_!s-RC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!s-RC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9258255b-aeb4-4d91-9272-29aabc5f7c31_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><span>This article is part of CAN Bus Embedded Development, my growing online book about practical CAN Bus hardware, software, and embedded system development.</span></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div><hr></div><h2>Maximum Reliability</h2><p>The Controller Area Network (CAN) is most closely associated with the automobile. For decades, CAN has provided the communication backbone connecting electronic control units for engines, transmissions, braking systems, body electronics, instrumentation, and countless other functions.</p><p>But CAN did not remain confined to vehicles.</p><p>Its combination of robustness, deterministic behavior, sophisticated error detection, and fault confinement made it attractive wherever communication must continue to work reliably in electrically noisy and demanding environments. Today, CAN can be found in industrial automation, mobile machinery, medical equipment, transportation systems, aerospace applications, and even satellites.</p><p>That widespread adoption is no accident. Reliability was one of the fundamental design goals of Classical CAN.</p><h2>More Than Error Detection</h2><p>Many communication protocols can detect corrupted data. CAN goes considerably further.</p><p>A CAN controller continuously monitors communication while a message is being transmitted. Errors can therefore often be detected immediately, rather than waiting until an entire message has been received and subsequently rejected.</p><p>Classical CAN uses several complementary error-detection mechanisms:</p><h3>Bit Monitoring</h3><p>A transmitting CAN node also monitors the bus while it transmits.</p><p>Except for defined situations such as arbitration and acknowledgment, the bit observed on the bus must correspond to the bit the node attempted to transmit. If they differ, the controller detects a bit error.</p><p>This is particularly powerful because the transmitter is effectively checking its own transmission in real time.</p><h3>Bit Stuffing</h3><p>CAN uses bit stuffing to maintain synchronization. After five consecutive bits of identical polarity, the transmitter inserts a bit of the opposite polarity.</p><p>Every receiving node knows this rule. If the expected stuff bit is missing or has the wrong value, the receiver detects a stuff error.</p><p>Bit stuffing therefore serves two purposes: maintaining synchronization and providing another mechanism for detecting corrupted communication.</p><h3>CRC Checking</h3><p>Every CAN data frame contains a Cyclic Redundancy Check (CRC).</p><p>The transmitter calculates the CRC from the relevant contents of the frame and transmits the result. Each receiver independently performs the same calculation. If the calculated value does not match the received CRC sequence, the receiver detects a CRC error.</p><p>This provides strong protection against corrupted message contents.</p><h3>Form Checking</h3><p>Certain portions of a CAN frame have a predefined format and must contain specific bit values.</p><p>CAN controllers monitor these fields automatically. If a fixed-format field contains an illegal value, a form error is detected.</p><h3>Acknowledgment Checking</h3><p>CAN also verifies that a transmitted message has actually been received by at least one other active node.</p><p>During the ACK slot, a receiver that has accepted the frame correctly signals acknowledgment. If the transmitter does not detect an acknowledgment, it recognizes an ACK error.</p><p>The transmitter therefore does not simply place a message onto the network and assume that everything went well.</p><h2>Detect, Abort, and Try Again</h2><p>Error detection is only part of the story.</p><p>When a CAN controller detects an error, the erroneous frame is invalidated so that other nodes do not accept corrupted information as valid data. Under normal CAN operation, the affected message can then be retransmitted automatically.</p><p>This happens at the CAN controller level and generally requires no intervention from the application software.</p><p>The result is extremely fast error recovery. On a properly designed CAN network, a temporary disturbance can corrupt a transmission, be detected, cause the frame to be rejected, and allow communication to resume almost immediately.</p><p>This is one of CAN&#8217;s great strengths. Error handling is not an afterthought added by the application programmer. It is built deeply into the protocol itself.</p><h2>What Happens When a Node Is the Problem?</h2><p>There is another problem that a reliable network must address.</p><p>What if the disturbance is not temporary? What if one CAN node itself is malfunctioning and continuously produces errors?</p><p>Without additional protection, a defective controller could potentially disrupt communication for every other device on the network.</p><p>CAN addresses this through fault confinement.</p><p>Every CAN controller maintains separate error counters associated with transmission and reception. These counters are adjusted according to precisely defined rules whenever communication succeeds or particular types of errors occur.</p><p>This allows CAN to distinguish between occasional communication disturbances and persistent failures.</p><p>More importantly, the rules are designed to help determine whether a node is merely observing errors or is likely to be causing them. A transmitter repeatedly responsible for unsuccessful communication is penalized differently from a receiver that simply observes problems occurring on the network.</p><p>As the error condition becomes more severe, a CAN controller progresses through defined error states.</p><p>A normally operating controller begins in the Error Active state. If its error history becomes sufficiently serious, it transitions to Error Passive, reducing its ability to interfere with other network traffic.</p><p>If its transmit error count continues to increase beyond the defined limit, the controller enters the Bus Off state.</p><p>At that point, it effectively removes itself from normal bus communication.</p><p>This self-retirement mechanism is one of the most important reliability features of CAN.</p><p>A malfunctioning node is not allowed to disrupt the network indefinitely.</p><h2>Fault Confinement Protects the Network</h2><p>The combination of transmit and receive error monitoring gives Classical CAN an unusually sophisticated approach to network fault management.</p><p>The objective is not merely to determine that something went wrong. The protocol is designed to protect the remainder of the network when something continues to go wrong.</p><p>CAN fault confinement provides mechanisms for:</p><ul><li><p>distinguishing temporary communication disturbances from persistent node failures;</p></li><li><p>helping identify whether a node is causing errors or merely observing them;</p></li><li><p>limiting the influence of increasingly unreliable nodes;</p></li><li><p>transitioning faulty nodes from Error Active to Error Passive operation; and</p></li><li><p>ultimately removing a persistently malfunctioning transmitter from the network through the Bus Off state.</p></li></ul><p>This means a single defective electronic control unit does not necessarily bring down the entire communication system.</p><p>That characteristic is particularly valuable in applications where dozens of independent controllers share the same physical network.</p><h2>Why CAN Became So Successful</h2><p>The remarkable reliability of CAN comes from the fact that these mechanisms work together.</p><p>Bit monitoring can detect discrepancies during transmission. Bit stuffing provides synchronization as well as additional error detection. CRC protects the frame contents. Form checking verifies the structure of the frame. Acknowledgment confirms successful reception. Error signaling prevents corrupted frames from being accepted. Automatic retransmission provides rapid recovery from temporary disturbances. Error counters distinguish occasional faults from persistent ones. Fault confinement can eventually remove a malfunctioning node from the network.</p><p>All of this occurs largely within the CAN controller hardware.</p><p>The application does not have to invent its own basic communication recovery system.</p><p>That helps explain why a network originally developed for automobiles became attractive far beyond automotive electronics. Industrial machinery, medical equipment, aerospace systems, and satellites all share a fundamental requirement: communication failures must be detected quickly, corrupted information must not silently become valid information, and one defective device should not be allowed to compromise an entire network.</p><p>Classical CAN was designed around exactly those principles.</p><h2>And What About CAN FD?</h2><p>CAN FD inherited the fundamental error-handling and fault-confinement concepts of Classical CAN, including bit monitoring, frame checking, CRC protection, error signaling, error counters, and the Error Active, Error Passive, and Bus Off states.</p><p>There is, however, an important distinction.</p><p>CAN FD was designed to carry considerably more data while also allowing the data portion of the frame to operate at a higher bit rate. When Bit Rate Switching is used, arbitration takes place at the nominal CAN bit rate, while much of the data phase can operate substantially faster.</p><p>That higher speed required some compromises in the physical timing and error-detection behavior during the fast portion of the frame. In particular, some of the bit-by-bit monitoring capabilities that make Classical CAN so robust cannot operate in exactly the same manner under all CAN FD conditions.</p><p>CAN FD compensates for this in other ways, including improved CRC protection compared with Classical CAN. It remains an extremely reliable protocol and retains CAN&#8217;s fundamental philosophy of error detection and fault confinement.</p><p>Nevertheless, Classical CAN remains remarkable for the thoroughness of its original design.</p><p>It was not merely designed to transmit messages.</p><p>It was designed with the assumption that errors <em>will</em> happen&#8212;and with mechanisms to detect them, recover from them, determine when a node itself has become unreliable, and protect the rest of the network when that happens.</p><p>That is one of the major reasons why, decades after its introduction, CAN remains one of the most trusted communication technologies used in embedded systems.</p><div><hr></div><h2>Follow CAN Bus Embedded Development</h2><p><span>New chapters and technical material are added regularly. Subscribe to receive new additions as the online book continues to grow.</span></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.wilfriedvoss.com/subscribe?"><span>Subscribe now</span></a></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p><div><hr></div><h2><span>A Comprehensible Guide to Controller Area Network</span></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0aUunXaM" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aa3H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 424w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 848w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 1272w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aa3H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png" width="300" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:173210,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://link.amazon/B0aUunXaM&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://wilfriedvoss.substack.com/i/216220861?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.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_!Aa3H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 424w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 848w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 1272w, https://substackcdn.com/image/fetch/$s_!Aa3H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7678f27f-5613-404e-a1c1-cf8e1d84ab89_300x386.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image 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 error detection, error handling, automatic recovery, and fault-confinement mechanisms discussed in this article represent only an overview of the sophisticated reliability features built into CAN. These subjects are covered in substantially greater technical detail in my book, <em>A Comprehensible Guide to Controller Area Network</em>. The book examines the individual CAN error-detection mechanisms, transmit and receive error counters, Error Active and Error Passive states, Bus Off behavior, and the underlying principles that allow CAN to maintain reliable communication even when errors and malfunctioning nodes occur.</p><p><em>A Comprehensible Guide to Controller Area Network</em> focuses exclusively on Classical CAN; it does not cover CAN FD. In addition to error management and fault confinement, the book provides an in-depth treatment of CAN communication, message frames, bus arbitration, bit timing, physical-layer considerations, and the other mechanisms that make CAN particularly well suited for embedded and real-time applications. It is intended as a comprehensive technical reference while remaining accessible to engineers and developers who want to understand not merely how to use CAN, but how the protocol actually works. <a href="https://link.amazon/B0aUunXaM">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[CAN Bus Embedded Development: A Practical Approach]]></title><description><![CDATA[From CAN fundamentals to real-world hardware and software development, based on years of hands-on experience.]]></description><link>https://www.wilfriedvoss.com/p/can-bus-embedded-development-a-practical</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/can-bus-embedded-development-a-practical</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 16 Sep 2026 20:54:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KiZI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.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_!KiZI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KiZI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 424w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 848w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 1272w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KiZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png" width="1000" height="333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afa38eb7-8055-4906-befe-277dd1381ace_1000x333.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:333,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:418107,&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://wilfriedvoss.substack.com/i/216053852?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.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_!KiZI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 424w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 848w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.png 1272w, https://substackcdn.com/image/fetch/$s_!KiZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa38eb7-8055-4906-befe-277dd1381ace_1000x333.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 article is part of CAN Bus Embedded Development, 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><hr></div><h2>Introduction</h2><p>I have been involved with CAN Bus technology and embedded systems for many years. During that time, I have worked with different microcontrollers, CAN controllers, development environments, higher-layer protocols, and countless combinations of hardware and software. Like most engineers who have worked with CAN for any length of time, I have also spent my share of hours trying to understand why something that should have worked didn&#8217;t.</p><p>Much of what I know today came not only from specifications and technical documentation, but from actually building systems, writing software, testing hardware, analyzing network traffic, and solving problems. Over the years, some of that experience has found its way into books, technical articles, software, and products. With <em>CAN Bus Embedded Development</em>, I want to bring much of that experience together and share it in one place.</p><p>This is intended to be a practical publication. I will cover the fundamentals of CAN Bus technology, but only to the extent necessary to establish a common foundation. There is already a substantial amount of excellent literature available that explains CAN in great technical depth. I see little value in repeating material that is readily available elsewhere simply to make this publication longer.</p><p>Instead, I want to concentrate on what happens when we actually start working with CAN Bus in an embedded system: selecting hardware, connecting a CAN controller and transceiver, configuring the software, transmitting and receiving messages, understanding what we see on the network, and dealing with the problems that inevitably appear along the way.</p><p>We will work with different hardware platforms and development approaches. Some subjects will be relatively simple; others will take us considerably deeper. Where necessary, I will return to CAN fundamentals and explain the underlying technology, but always with an emphasis on why it matters to the application we are developing.</p><p>This is also a growing online publication rather than a conventional book that is written in its entirety and released only when it is finished. I will add material regularly, expand existing topics when appropriate, and follow subjects that deserve a closer look. That format allows me to share useful material as it is developed rather than keeping it on my computer until some distant publication date.</p><p>I also use AI as part of the writing process. I consider AI a writing and editorial tool, not the source of the technical expertise presented here. It helps me organize thoughts, refine language, and turn years of accumulated notes and experience into material that is hopefully easier to read. The technical direction, practical experience, examples, and conclusions remain my responsibility.</p><p>My goal is fairly simple: to share what I have learned about CAN Bus embedded development in a way that is useful to someone who wants to build something.</p><p>If you are such a person, I hope you will follow along.</p><div><hr></div><h2>Follow CAN Bus Embedded Development</h2><p>New chapters and technical material are added regularly. Subscribe to receive new additions as the online book continues to grow.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.wilfriedvoss.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.wilfriedvoss.com/subscribe?"><span>Subscribe now</span></a></p><p><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development">View the complete Table of Contents &#8594;</a></p>]]></content:encoded></item><item><title><![CDATA[JCOM1939.com — A Practical Resource for SAE J1939 Development]]></title><description><![CDATA[SAE J1939 Knowledge, Development Tools, Software, and Hardware in One Place]]></description><link>https://www.wilfriedvoss.com/p/jcom1939com-a-practical-resource</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/jcom1939com-a-practical-resource</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 16 Sep 2026 14:37:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FubC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.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_!FubC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FubC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 424w, https://substackcdn.com/image/fetch/$s_!FubC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 848w, https://substackcdn.com/image/fetch/$s_!FubC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 1272w, https://substackcdn.com/image/fetch/$s_!FubC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FubC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png" width="1000" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:672313,&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://wilfriedvoss.substack.com/i/215999784?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.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_!FubC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 424w, https://substackcdn.com/image/fetch/$s_!FubC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 848w, https://substackcdn.com/image/fetch/$s_!FubC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.png 1272w, https://substackcdn.com/image/fetch/$s_!FubC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5185259e-67f0-4d0d-9d89-bc6d2405a58a_1000x417.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>Working with SAE J1939 involves much more than simply connecting a CAN interface and watching data frames appear on a screen.</p><p>Developers need to understand Parameter Group Numbers (PGNs), source addresses, destination addresses, network management, Address Claiming, diagnostic messages, the Transport Protocol, error handling, and the behavior of individual Electronic Control Units (ECUs). When something does not work as expected, understanding the protocol is often just as important as having the right hardware and software tools.</p><p>That is the idea behind <a href="https://jcom1939.com">JCOM1939.com</a>.</p><p>The website has grown beyond being simply a home for the JCOM1939 Monitor software. My goal is to develop it into a practical technical resource for engineers, programmers, technicians, students, and anyone else working with SAE J1939 networks.</p><p>It combines technical articles, engineering notes, software documentation, programming information, development hardware, and a community forum with the JCOM1939 Monitor software and JCOM1939 gateway family.</p><h2>Learning and Understanding SAE J1939</h2><p>The SAE J1939 standards define a sophisticated higher-layer protocol built on Controller Area Network (CAN). Understanding the individual CAN frames is only the beginning.</p><p>Real-world J1939 development introduces questions such as:</p><p>How does an ECU claim its network address?</p><p>What happens when two ECUs attempt to use the same address?</p><p>How are messages longer than eight bytes transmitted?</p><p>How does the Transport Protocol work?</p><p>How should a device respond to Request messages?</p><p>What happens when CAN communication errors occur?</p><p>How can an ECU be simulated during development when the actual vehicle or machine is not available?</p><p>These are exactly the kinds of subjects addressed at JCOM1939.com.</p><p>The site includes technical articles and engineering notes covering SAE J1939 development, CAN Bus behavior, diagnostics, network management, Address Claiming, Transport Protocol operation, ECU simulation, troubleshooting, and related embedded-development subjects.</p><p>Rather than limiting the information to descriptions of JCOM1939 products, the objective is to explain what is actually happening on the network and why.</p><h2>The JCOM1939 Monitor Software</h2><p>At the center of the development environment is the <a href="https://jcom1939.com/jcom1939-monitor-download-documentation-and-other-resources/jcom1939-monitor-software-for-windows-quick-start-guide/">JCOM1939 Monitor software for Windows</a>.</p><p>The software works with JCOM1939 gateway hardware to provide a practical environment for monitoring, recording, analyzing, transmitting, and simulating SAE J1939 network traffic.</p><p>For basic network analysis, the Monitor can display received J1939 messages and filter traffic according to PGNs. But monitoring is only one part of its purpose.</p><p>The software can also be used to define J1939 messages for transmission, send messages once or periodically, generate Request messages, respond to requests, scan a J1939 network, and simulate ECUs.</p><p>ECU simulation is particularly valuable during development. Instead of requiring a complete vehicle or machine for every software test, developers can reproduce portions of the network on the workbench. A simulated ECU can be assigned its own NAME, preferred address, and address-negotiation parameters and participate in the J1939 network like another node.</p><p>This makes the Monitor useful not only for troubleshooting existing networks but also for developing and testing new J1939 products.</p><h2>From CAN Frames to J1939 Network Behavior</h2><p>One of the goals behind JCOM1939 is to bridge the gap between looking at raw CAN frames and understanding the higher-level J1939 behavior they represent.</p><p>A CAN analyzer is an indispensable engineering tool, but a raw CAN trace does not automatically explain why an ECU transmitted a particular message or how that message fits into the J1939 protocol.</p><p>For example, an Address Claim is not simply another 29-bit CAN frame. It is part of a network-management procedure governed by the ECU&#8217;s J1939 NAME and address-selection rules.</p><p>Likewise, a sequence of Transport Protocol frames represents much more than a collection of CAN packets. The individual frames belong to a coordinated transfer that may use BAM or a peer-to-peer RTS/CTS session.</p><p>JCOM1939.com therefore places considerable emphasis on explaining the relationship between the specification, the software implementation, and the CAN Bus traffic that can actually be observed.</p><h2>JCOM1939 Gateway Hardware</h2><p>The JCOM1939 Monitor works in combination with <a href="https://jcom1939.com/jcom1939-gateways/">dedicated J1939 gateway hardware</a>.</p><p>These gateways are designed specifically for SAE J1939 rather than functioning merely as generic USB-to-CAN adapters. Important J1939 functions are handled by the gateway firmware, reducing the amount of protocol management that must be performed by the host computer or embedded application.</p><p>The gateway architecture supports J1939 network management, including Address Claiming, as well as the J1939 Transport Protocol used for transferring messages that exceed the normal eight-byte CAN data field.</p><p>Communication with the host uses a documented serial protocol. This is important because the gateway hardware is not restricted to use with the Windows Monitor software.</p><p>Developers can integrate a JCOM1939 gateway into their own applications and embedded systems.</p><h2>A Documented Programming Interface</h2><p>For developers building their own software, JCOM1939.com provides information about the <a href="https://jcom1939.com/jcom1939-monitor-download-documentation-and-other-resources/jcom1939-monitor-programming-interface/">programming interface used to communicate with the gateways</a>.</p><p>Because communication takes place through a serial connection, applications do not have to depend on a proprietary operating-system-specific API merely to access the hardware.</p><p>Programming examples are available for languages including C, C++, and C#, making it possible to use the gateway as part of a custom Windows, Linux, Raspberry Pi, or other embedded application.</p><p>This creates two distinct ways of using the JCOM1939 ecosystem.</p><p>An engineer can use the ready-to-run JCOM1939 Monitor for network analysis, testing, and simulation, or use the documented gateway interface as the foundation for a completely independent application.</p><h2>Development, Simulation, and Troubleshooting</h2><p>The combination of software and gateway hardware creates a useful development environment on the workbench.</p><p>A developer can monitor an existing J1939 network, record its traffic, generate selected PGNs, simulate another ECU, issue Request messages, investigate Address Claiming, and observe how actual devices respond.</p><p>That becomes particularly useful when troubleshooting.</p><p>When an ECU does not appear on a network, for example, the problem may involve wiring or termination&#8212;but it could also involve Address Claiming, configuration, baud rate, CAN controller errors, or the behavior of another node.</p><p>The ability to observe both J1939 traffic and the underlying CAN network behavior can greatly reduce the amount of guesswork involved.</p><h2>Documentation and Engineering Notes</h2><p>Software and hardware are useful only when developers understand how to use them effectively.</p><p>For that reason, JCOM1939.com also maintains documentation for the JCOM1939 Monitor and gateway hardware, along with troubleshooting information and more detailed engineering notes.</p><p>Some subjects require considerably more explanation than belongs in a conventional user manual. CAN error counters, Bus-Off behavior, Silent or Listen-Only operation, Address Claiming, and similar subjects benefit from understanding the underlying CAN and J1939 mechanisms.</p><p>These topics are therefore increasingly being addressed through dedicated technical articles and engineering notes rather than simply adding more pages to a software manual.</p><p>The result is intended to become a growing technical library rather than static product documentation.</p><h2>The J1939 Community</h2><p>Another important part of JCOM1939.com is the <a href="https://jcom1939.com/forum/">J1939 Community</a>.</p><p>The community forum provides a place for engineers, developers, students, hobbyists, and JCOM1939 users to ask questions, discuss technical issues, share experiences, and suggest improvements.</p><p>Discussion areas include SAE J1939 development, the JCOM1939 Monitor, installation and configuration, monitoring and data analysis, ECU simulation, the ARD1939 protocol stack, feature requests, and troubleshooting.</p><p>The community also provides an important feedback mechanism.</p><p>Documentation can explain how something was designed to work. Real users often uncover different questions: an unusual ECU response, an Address Claim problem, a network configuration that behaves unexpectedly, or a feature that would make development easier.</p><p>Those discussions can subsequently lead to additional documentation, engineering notes, software improvements, or entirely new development topics.</p><h2>More Than a Product Website</h2><p>Ultimately, that is the direction I want JCOM1939.com to take.</p><p>It is certainly the home of the JCOM1939 Monitor software and JCOM1939 gateway technology, but its purpose is broader.</p><p>I want it to become a practical SAE J1939 knowledge center where someone can arrive with a question about J1939, learn how the underlying technology works, find practical examples, obtain the necessary development tools, and discuss problems with others working in the same field.</p><p>SAE J1939 can appear intimidating when first encountered. There are many standards documents, numerous protocol mechanisms, and a considerable difference between understanding the specification and successfully implementing it in an embedded system.</p><p>JCOM1939.com is intended to help bridge that gap.</p><p>Whether you are learning SAE J1939 for the first time, developing a new ECU, analyzing vehicle network traffic, building an embedded J1939 application, or troubleshooting an existing system, the site is designed to provide both the technical information and the practical tools needed to move the project forward.</p><p>And it will continue to grow as new software features, engineering notes, programming examples, development tools, and community discussions are added.</p>]]></content:encoded></item><item><title><![CDATA[CAN Bus Embedded Development]]></title><description><![CDATA[From Hardware to Software - Build, Test, and Deploy Reilable CAN Applications]]></description><link>https://www.wilfriedvoss.com/p/can-bus-embedded-development</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/can-bus-embedded-development</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Wed, 16 Sep 2026 14:08:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PkcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.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_!PkcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PkcT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 424w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 848w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 1272w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PkcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png" width="1000" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:685244,&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://wilfriedvoss.substack.com/i/215990943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.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_!PkcT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 424w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 848w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.png 1272w, https://substackcdn.com/image/fetch/$s_!PkcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F587b112e-5a10-44b7-ab3f-5169d83fdc0a_1000x559.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><em>CAN Bus Embedded Development</em> is an online book published as a work in progress. Rather than releasing the entire book at once, I will build it topic by topic, adding new chapters and expanding existing material on a regular basis. </p><p>This format allows the book to evolve along with the technology and, just as importantly, with its readers. Subscribers can comment on individual topics, ask questions, and point out areas that deserve further explanation. </p><p>The table of contents will therefore remain flexible as the project grows, providing a structured path through the material while allowing new subjects to be added where they fit best. The goal is to create a practical, continuously developing reference for engineers, programmers, students, and anyone interested in building CAN Bus&#8211;based embedded systems.</p><h2><strong>Table of Contents</strong></h2><p style="text-align: center;">This is the initial concept and will continue to evolve as new topics are added and existing sections are expanded or refined.</p><ul><li><p><strong><a href="https://wilfriedvoss.substack.com/p/can-bus-embedded-development-a-practical">Introduction</a></strong></p></li><li><p><strong><a href="https://wilfriedvoss.substack.com/p/controller-area-network-can-why-it">Controller Area Network</a></strong></p><ul><li><p>Classical CAN and CAN FD</p></li><li><p><a href="https://wilfriedvoss.substack.com/p/classical-can-designed-for-maximum">Maximum Reliability</a></p></li><li><p>CAN Bus Arbitration</p></li><li><p><a href="https://wilfriedvoss.substack.com/p/what-you-didnt-know-about-can">What You Didn&#8217;t Know About CAN</a></p></li><li><p><a href="https://wilfriedvoss.substack.com/p/what-they-didnt-tell-you-about-can">What They Don&#8217;t Tell You About CAN FD</a></p></li></ul></li><li><p><strong>Higher-Layer Protocols</strong></p><ul><li><p>SAE J1939</p></li><li><p>NMEA 2000</p></li><li><p>CANopen</p></li></ul></li><li><p><strong>Development Tools</strong></p><ul><li><p>CAN Monitoring &amp; Analyzing Gateway</p></li><li><p>Programming Environment</p></li><li><p>The Arduino IDE</p></li></ul></li><li><p><strong>Software Design</strong></p><ul><li><p>Driver Software</p><ul><li><p>Standard Features</p><ul><li><p>Read</p></li><li><p>Write</p></li><li><p>Status</p></li></ul></li><li><p>Additional Features</p><ul><li><p>Read Error Counter</p></li><li><p>Read Controller Status</p></li><li><p>Silent Mode</p></li><li><p>Sleep Mode</p></li></ul></li></ul></li><li><p>Timer Functionality</p></li><li><p>Serial Protocol</p></li></ul></li><li><p>Hardware Platforms</p><ul><li><p>Arduino Uno</p></li><li><p>Arduino Due</p></li><li><p>ESP32</p></li><li><p>ESP32-S3</p></li><li><p>Teensy</p></li></ul></li></ul><div><hr></div><h2><span>SAE J1939 ECU Programming &amp; Vehicle Bus Simulation with the Arduino</span></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://link.amazon/B0btrMuDI" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lSRQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 424w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 848w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 1272w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lSRQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png" width="300" height="391" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png&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;:129453,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://link.amazon/B0btrMuDI&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://wilfriedvoss.substack.com/i/215990943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.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_!lSRQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 424w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 848w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 1272w, https://substackcdn.com/image/fetch/$s_!lSRQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe61c296b-0f83-461c-bd74-1cebd3869c5c_300x391.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image 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>Written by an experienced specialist in Controller Area Network (CAN) technologies, this book provides a practical guide to understanding and implementing an SAE J1939 protocol stack for embedded systems.</p><p>The book combines detailed explanations with numerous C/C++ code examples and recorded J1939 network traffic, allowing readers to see not only how the software works, but also what actually happens on the CAN Bus. Topics include designing and transmitting J1939 data frames, receiving and processing messages, and simulating J1939 Electronic Control Units (ECUs).</p><p>Practical Arduino projects include a J1939 network scanner and an SAE J1939-to-USB gateway with an accompanying Windows GUI developed in Visual Studio C#. The projects culminate in ARD1939, a fully functional SAE J1939 protocol stack for the Arduino Uno and Mega 2560.</p><p>The book also explores two important areas of SAE J1939 in greater depth: the Transport Protocol defined by SAE J1939/21, including BAM and RTS/CTS sessions, and the Address Claim Procedure defined by SAE J1939/81. Code examples and recorded bus traffic illustrate how these mechanisms operate on an actual J1939 network.</p><p>By combining the accessibility of the Arduino development environment with practical source code, network analysis, and detailed protocol explanations, this book provides a hands-on path to learning SAE J1939 and developing real-world embedded J1939 applications. <a href="https://link.amazon/B0btrMuDI">More information&#8230;</a></p>]]></content:encoded></item><item><title><![CDATA[Why the Raspberry Pi 5 Needs a Different Power Strategy for NMEA 2000]]></title><description><![CDATA[The Raspberry Pi 5 works well with NMEA 2000, but its higher power requirements make direct network power impractical.]]></description><link>https://www.wilfriedvoss.com/p/why-the-raspberry-pi-5-needs-a-different</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/why-the-raspberry-pi-5-needs-a-different</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 15 Sep 2026 21:44:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k7gW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_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_!k7gW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k7gW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k7gW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png" width="1000" height="563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/254cd3df-51d8-4809-a0c4-85215bc56999_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;:863551,&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://wilfriedvoss.substack.com/i/215899173?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_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_!k7gW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 424w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 848w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_1000x563.png 1272w, https://substackcdn.com/image/fetch/$s_!k7gW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F254cd3df-51d8-4809-a0c4-85215bc56999_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>The Raspberry Pi has become an increasingly popular platform for marine applications. Combined with an NMEA 2000 interface, it can serve as a data logger, gateway, Signal K server, OpenPlotter system, or custom marine controller.</p><p>There is, however, an important difference between the Raspberry Pi 3, Raspberry Pi 4, and Raspberry Pi 5 that is easily overlooked: power consumption.</p><p>With the Raspberry Pi 5, we have reached the point where powering the complete computer directly from the NMEA 2000 network is no longer a good design choice.</p><h3>NMEA 2000 Is a Data Network &#8212; With a Limited Power Budget</h3><p>NMEA 2000 does more than carry CAN bus data. The backbone also distributes DC power to connected devices.</p><p>The nominal network voltage is 12 VDC, with NMEA 2000 devices designed to operate over a range of approximately 9 to 16 VDC.</p><p>Power consumption on an NMEA 2000 network is expressed using the Load Equivalency Number, or LEN:</p><p><strong>1 LEN = 50 mA</strong></p><p>A device drawing 250 mA from the network therefore represents 5 LEN.</p><p>According to the NMEA 2000 power model, the maximum current a single device should draw from the backbone is 1 A, corresponding to 20 LEN. Equipment requiring more power should use a separate power connection.</p><p>That limit makes sense when considering what NMEA 2000 was designed to support. A marine network may contain GPS receivers, engine interfaces, heading sensors, temperature sensors, gateways, displays, and numerous other devices. They all share the available network power.</p><p>A general-purpose computer can become a disproportionately large load on that network.</p><h3>The Raspberry Pi Power Requirement Has Increased</h3><p>The progression of the Raspberry Pi illustrates the problem.</p><p>Raspberry Pi recommends the following power-supply capacities:</p><p><strong>Raspberry Pi 3:</strong> 5 V / 2.5 A<br><strong>Raspberry Pi 4:</strong> 5 V / 3 A<br><strong>Raspberry Pi 5:</strong> 5 V / 5 A</p><p>These numbers should not be interpreted as the amount of current the Raspberry Pi continuously consumes. Actual consumption is normally considerably lower and varies according to processor load, USB devices, storage, networking, and other peripherals.</p><p>Nevertheless, the recommended supply rating tells us something important when designing an embedded system: how much power must potentially be available for reliable operation.</p><p>The Raspberry Pi 5 represents a significant jump. Raspberry Pi recommends a 27 W USB-C power supply capable of providing 5 V at 5 A. The Pi 5 can operate from a 5 V / 3 A supply, but doing so restricts the available power for USB peripherals.</p><p>That is very different from designing a small sensor or gateway intended to obtain all of its operating power from an NMEA 2000 backbone.</p><h3>The 12 V-to-5 V Conversion Matters</h3><p>An NMEA 2000 network does not provide the 5 V required by a Raspberry Pi. An interface that powers the Pi from the network therefore needs a DC/DC converter, normally a switch-mode power supply (SMPS).</p><p>For example, our PiCAN-M with SMPS provides a regulated 5 V supply rated at 3 A from the marine DC input.</p><p>That arrangement works well with a Raspberry Pi 3 and can support a Raspberry Pi 4, although the Pi 4 is already approaching the capability of a 3 A supply when the system is heavily loaded.</p><p>The Raspberry Pi 5 changes the equation.</p><p>Its recommended supply is capable of 5 A. The 3 A SMPS therefore cannot provide the full power budget for which the Raspberry Pi 5 was designed.</p><p>Simply installing a larger DC/DC converter does not completely solve the problem if that converter continues to obtain its input power from the NMEA 2000 backbone.</p><p>At a theoretical maximum of 25 W for a 5 V / 5 A supply, a converter operating from approximately 12 V would need more than 2 A on its input side after conversion losses. That is already well beyond the 1 A maximum normally allocated to a single NMEA 2000-powered device.</p><p>In other words, the problem moves from the 5 V side to the 12 V side.</p><h3>Raspberry Pi 3, 4, and 5 in Practical NMEA 2000 Systems</h3><p>The Raspberry Pi 3 remains relatively comfortable in applications where the Raspberry Pi and NMEA 2000 interface are powered through a suitably designed DC/DC converter. Its actual operating consumption is modest compared with later Raspberry Pi generations.</p><p>The Raspberry Pi 4 increased the available computing power and the corresponding power requirement. It can still work with a 5 V / 3 A supply, but there is considerably less power margin, particularly when USB devices and other peripherals are attached.</p><p>The Raspberry Pi 5 takes another substantial step in performance &#8212; and power requirements. Designing an NMEA 2000 interface around the assumption that the network will also provide the full operating power for the Pi 5 is therefore difficult to justify.</p><h3>The Better Solution: Separate the Computer Power from the Network</h3><p>Fortunately, there is nothing preventing a Raspberry Pi 5 from being used with NMEA 2000.</p><p>The better approach is simply to separate the two power requirements.</p><p>The Raspberry Pi 5 should receive its main power from an appropriately rated external DC/DC converter or USB-C power supply connected to the vessel&#8217;s electrical system. The NMEA 2000 interface remains connected to the NMEA 2000 backbone for CAN communication.</p><p>This is similar to the way many larger marine displays and multifunction devices operate. They communicate over NMEA 2000 but obtain their primary operating power separately rather than expecting the network backbone to power the entire device.</p><p>For a Raspberry Pi 5, this architecture provides several advantages. It prevents a computer-class load from consuming a large portion of the NMEA 2000 power budget, provides adequate current for processor peaks and USB peripherals, reduces the possibility of Raspberry Pi undervoltage conditions, and avoids unnecessary voltage drop along the NMEA 2000 backbone.</p><h3>More Computing Power Requires a Different Power Strategy</h3><p>The Raspberry Pi 5 is an excellent platform for marine computing. Its substantially higher performance makes it particularly attractive for Signal K, OpenPlotter, data logging, dashboards, and more demanding onboard applications.</p><p>The issue is not NMEA 2000 compatibility. From the CAN communication perspective, there is no fundamental reason why a Raspberry Pi 5 cannot participate in an NMEA 2000 network.</p><p>The issue is power.</p><p>Earlier Raspberry Pi generations were much easier to treat like embedded devices that could obtain their operating power through a marine interface board. With the Raspberry Pi 5, the safer engineering approach is to regard the Raspberry Pi as a small onboard computer: connect it to NMEA 2000 for communication, but provide its primary power independently.</p><p>That small distinction can make the difference between an installation that merely works on the bench and one that remains reliable aboard a vessel.</p>]]></content:encoded></item><item><title><![CDATA[When the CAN Bus Keeps Blowing the Protection Diode]]></title><description><![CDATA[What a Failed CAN Protection Diode Is Telling You]]></description><link>https://www.wilfriedvoss.com/p/when-the-can-bus-keeps-blowing-the</link><guid isPermaLink="false">https://www.wilfriedvoss.com/p/when-the-can-bus-keeps-blowing-the</guid><dc:creator><![CDATA[Wilfried Voss]]></dc:creator><pubDate>Tue, 15 Sep 2026 20:19:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!s_W0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_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://substackcdn.com/image/fetch/$s_!s_W0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s_W0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s_W0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png" width="1000" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/599ead25-1e82-45e2-9f3c-ff6b7d863ee5_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;:845125,&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://wilfriedvoss.substack.com/i/215885664?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.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_!s_W0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 424w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 848w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_1000x500.png 1272w, https://substackcdn.com/image/fetch/$s_!s_W0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F599ead25-1e82-45e2-9f3c-ff6b7d863ee5_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>A customer contacted me recently because he was having a recurring problem with one of our CAN boards. A diode on the board kept failing. He knew which component was causing the problem, but he didn&#8217;t know why it kept happening.</p><p>The component in question is a PESD1CAN-U connected to CAN_H and CAN_L. Its job is simple: protect the CAN interface against electrostatic discharge (ESD) and other voltage transients.</p><p>Under normal CAN operation, this diode shouldn&#8217;t have much to do. It sits there waiting for something abnormal to happen. If a voltage spike appears on one of the CAN lines, the diode clamps the transient and helps prevent that energy from reaching the CAN transceiver.</p><p>If that diode fails repeatedly, therefore, replacing it may get the board running again, but it doesn&#8217;t address the real problem.</p><p>Something is happening on the CAN bus.</p><h3>ESD Is One Possibility&#8212;but Not the Only One</h3><p>The immediate explanation for a failed ESD protection diode is, naturally, ESD. And that certainly can be the cause.</p><p>But I wouldn&#8217;t automatically assume that somebody is walking across a carpet and touching the CAN connector.</p><p>In an industrial or automotive environment, CAN wiring can be exposed to all sorts of electrical transients. Motors, relays, solenoids, contactors, pumps, and other inductive loads can generate substantial voltage spikes. Long CAN cables can also pick up electrical noise, particularly when they are routed alongside power wiring.</p><p>Another issue I would look at very closely is grounding.</p><p>CAN is a differential bus, which makes it quite resistant to electrical noise. But that doesn&#8217;t mean it is immune to differences in ground potential between connected devices. If two CAN nodes are referenced to significantly different ground potentials, CAN_H and CAN_L can be pushed outside the common-mode voltage range that the interface was designed to tolerate.</p><p>At that point, the protection circuitry may start doing exactly what it was designed to do&#8212;and if the transient energy is high enough or occurs often enough, the protection diode can eventually fail.</p><h3>What Should You Check?</h3><p>If I encountered this problem in an installation, I would start with the basics.</p><p>Check the CAN wiring and, especially, the grounding between the connected devices. Look for equipment that could be producing electrical transients, particularly motors, relays, solenoids, and other inductive loads. Also look at how the CAN cable is routed. Running a CAN cable alongside high-current power wiring is generally something I would avoid.</p><p>The cable itself is worth considering as well. CAN_H and CAN_L should be carried as a twisted pair. In an electrically noisy environment, a properly installed shielded twisted-pair CAN cable can provide additional protection against interference picked up along the cable.</p><p>However, I wouldn&#8217;t consider shielding a cure for a grounding problem. If there is a significant ground-potential difference between CAN nodes, adding a shield isn&#8217;t going to make that problem disappear.</p><h3>The Failed Diode Is Telling You Something</h3><p>This is really the interesting part of the problem.</p><p>When a protection diode repeatedly fails, it&#8217;s tempting to view the diode as the problem. In reality, the diode may simply be providing useful evidence of a problem somewhere else in the system.</p><p>It is there to protect the CAN interface from abnormal electrical conditions. If it keeps getting destroyed, something on the CAN bus is repeatedly exceeding what that protection circuit can safely handle.</p><p>Replacing the diode fixes the symptom.</p><p>Finding the source of those transients fixes the problem.</p>]]></content:encoded></item></channel></rss>