J1939 Development for Embedded Systems

J1939 Development for Embedded Systems is a practical guide for engineers and embedded developers who want to build real-world SAE J1939 applications. Covering Arduino, ESP32, Teensy, and other embedded platforms, the book focuses on implementation rather than theory, using the open-source ARD1939 protocol stack and complete programming examples to demonstrate every concept.

Unlike traditional J1939 references, this book approaches the protocol from a programmer’s perspective. Instead of following the structure of the SAE standards, it concentrates on the concepts you actually need to begin developing embedded applications. While a solid understanding of PGNs and message handling is essential, many lower-level protocol details are already managed by a complete J1939 protocol stack. The goal is to help you become productive quickly without requiring you to master every aspect of the protocol before writing your first line of code.

This book was inspired by years of feedback from readers of my Comprehensible Guide to J1939. Many engineers shared the same experience I had when first learning the protocol: spending countless hours navigating multiple standard documents, deciphering abbreviations, and trying to piece together information scattered across the specification. The SAE documents are excellent technical specifications, but they were never intended to serve as a step-by-step programming guide. This book fills that gap by presenting J1939 in a logical, implementation-oriented sequence that mirrors the way embedded software is actually developed.

Another major difference is that this book goes beyond explanation. Every programming example is based on the open-source ARD1939 protocol stack, allowing you to study and modify real source code instead of isolated code snippets. By the time you finish the book, you will not only understand how SAE J1939 works—you will also have a practical software foundation that you can use in your own projects.

This is a work in progress and will continue to evolve as new chapters, code examples, technical articles, and software updates are completed. A preliminary table of contents is already available, and additional resources will be published regularly as development progresses.

This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.

Preliminary Table of Contents

Part I A Brief Introduction to J1939

  • Chapter 1 What Is J1939 and Why Should You Care?

  • Chapter 2 PGNs: The Language of J1939

  • Chapter 3 Understanding the 29-Bit Identifier

  • Chapter 4 Monitoring J1939 Traffic

  • Chapter 5 Requesting Data

  • Chapter 6 Transmitting J1939 Messages

  • Chapter 7 Source Addresses and Address Claiming

  • Chapter 8 Transport Protocol: When Eight Bytes Are Not Enough

  • Chapter 9 Diagnostic Messages: Understanding Vehicle Faults

Part II The J1939 Developer’s Toolbox

  • Chapter 10 Finding Information: J1939 Standards and References

    • Why You Need a Reference

    • J1939/71 – Vehicle Application Layer

    • Digital Annex (DA)

    • Other Useful Standards

  • Chapter 11 Monitoring J1939 Data

    • Why Monitoring Matters

    • Typical Workflow

  • Recommended Features

  • Chapter 12 CAN Analyzers and Bus Monitors

    • J1939 Runs on CAN

    • What a CAN Analyzer Shows

    • When a CAN Analyzer Is Needed

    • J1939 Monitor vs CAN Analyzer

  • Chapter 13 Building a Test Network

    • Why You Need a Network

    • Minimum Network

    • Recommended Development Setup

    • Real Vehicle vs Bench Network

  • Chapter 14 Your First Development Environment

Part III Getting Ready to Program

  • Chapter 15 Choosing Your Hardware

  • Chapter 16 Installing the Arduino IDE

  • Chapter 17 CAN Hardware Essentials

  • Chapter 18 Connecting Everything Together

  • Chapter 19 Exploring Live Network Traffic

  • Chapter 20 Meet ARD1939

    • Why Use a Protocol Stack?

    • What ARD1939 Does

    • What ARD1939 Does Not Do

    • Supported Platforms

    • Installing ARD1939

    • Your First ARD1939 Program

Part IV – Writing J1939 Software

  • Chapter 21 Inside a J1939 Application

  • Chapter 22 Understanding the ARD1939 Architecture

  • Chapter 23 Receiving Messages

  • Chapter 24 Transmitting Messages

  • Chapter 25 Decoding PGNs and SPNs

  • Chapter 26 Building Your First ECU