Developing an SAE J1939 application has traditionally required a substantial investment—not only in hardware and engineering time, but also in software. Commercial SAE J1939 protocol stacks are often expensive, frequently licensed per device, and in many cases remain closed-source. For students, hobbyists, researchers, startups, and even experienced engineers who simply want to prototype an idea, this has been a significant obstacle.
That is exactly why I developed ARD1939.
ARD1939 is a complete SAE J1939 protocol stack written entirely in C++, specifically designed for embedded systems. While the project originally targeted Arduino hardware, it has evolved into a portable protocol stack that now supports multiple processor platforms and serves as the programming foundation for my new book, “J1939 Development for Embedded Systems.”
ARD1939 is currently available as a precompiled library, allowing developers to begin building and testing SAE J1939 applications immediately. The library is fully functional and suitable for evaluating the protocol stack in real-world applications. With the release of my book J1939 Development for Embedded Systems, the complete C++ source code will be made available under an open-source license, enabling developers to study, modify, and extend every aspect of the implementation.
Why Another J1939 Protocol Stack?
This is a fair question.
There are already commercial protocol stacks on the market, and many of them are excellent products. They are professionally supported and well suited for commercial applications.
However, they also come with licensing costs that often exceed the budget of educational institutions, independent developers, and engineers who simply want to learn how SAE J1939 actually works.
ARD1939 follows a different philosophy.
The goal is not to compete with commercial products but to provide an educational, fully functional implementation that allows engineers to understand the protocol from the inside out. Instead of treating J1939 as a mysterious black box, ARD1939 lets you study the actual implementation while building real applications.
Built for Real Development
Unlike many demonstration projects that implement only a few selected PGNs, ARD1939 provides the infrastructure needed for real J1939 communication.
The stack includes support for:
- Network Management according to SAE J1939/81
- Dynamic Address Claiming
- PGN transmission and reception
- Broadcast Announce Message (BAM)
- RTS/CTS Transport Protocol sessions
- Request message handling
- Multi-packet message transfer
- Message filtering
- Generic application interfaces
- Portable C++ architecture
Every programming example in my upcoming book is based on ARD1939, allowing readers to move beyond isolated code snippets and work with a complete protocol implementation.
Designed for Multiple Hardware Platforms
Although ARD1939 began as an Arduino Uno project, its architecture was intentionally kept generic.
Today the protocol stack supports platforms including:
- Arduino Uno
- Arduino Mega 2560
- Arduino Due
- ESP32
Development is also underway for Teensy processors, and because the implementation follows standard C++ programming practices, the code can be adapted to many additional embedded platforms with relatively little effort.
One important design goal was portability. Hardware-specific CAN controller access is separated from the protocol logic, making it considerably easier to migrate the stack to new processors.
Why the Arduino IDE?
Some developers are surprised that I chose the Arduino IDE as the primary development environment.
The reason is simple.
The Arduino ecosystem provides one of the easiest and fastest paths from concept to a working prototype. It is supported by a massive community, works across numerous processor families, and allows developers to focus on solving application problems rather than spending weeks configuring toolchains.
As the project expanded to the ESP32, Arduino Due, and other boards, the same development environment continued to provide a consistent programming experience.
Efficient Even on Small Microcontrollers
One of the original design goals was to make ARD1939 run on extremely modest hardware.
The first implementation was developed on the Arduino Uno—not because it was the cheapest platform, but because it represented one of the most resource-constrained systems likely to be used for J1939 development.
The Uno’s limited RAM does impose restrictions, particularly regarding simultaneous Transport Protocol sessions. For that reason, the Uno implementation supports one active BAM session and one active RTS/CTS session at a time.
In practice, however, this limitation is rarely a problem. The vast majority of J1939 applications never require multiple concurrent transport sessions, making this approach entirely sufficient for most embedded systems.
On more capable processors such as the Arduino Due, ESP32, and other modern microcontrollers, these memory limitations essentially disappear.
Open Source with Education in Mind
ARD1939 is released as open-source software because I believe engineers learn best by studying real implementations.
Reading the SAE standards is certainly important, but standards alone rarely explain how to organize software, structure protocol layers, or write maintainable embedded code.
The combination of the protocol stack, programming examples, and detailed implementation documentation bridges that gap.
The emphasis throughout the project is practical engineering rather than academic discussion.
A Dedicated Home for ARD1939
As the project has continued to grow, it became clear that ARD1939 deserved its own dedicated website.
While JCOM1939 remains the home for articles, tutorials, and the ongoing “J1939 Development for Embedded Systems” book project, the complete documentation for the protocol stack itself is now maintained separately at ARD1939.com.
There you’ll find detailed information about:
- The protocol stack architecture
- Programming interfaces
- Supported hardware
- Implementation details
- Development updates
- Documentation as the project continues to evolve
Separating the protocol stack documentation from the educational content allows each site to focus on its own purpose while making it easier for developers to find exactly the information they need.
The Beginning, Not the End
ARD1939 is not a finished product that will remain unchanged.
New programming examples, additional hardware support, implementation improvements, and expanded documentation are being added continuously as the accompanying book evolves.
If you’re interested in developing SAE J1939 applications on Arduino, ESP32, Teensy, or other embedded systems, ARD1939 provides a practical foundation that you can study, modify, and build upon.
The goal has always been simple: make professional SAE J1939 development accessible to everyone—from students taking their first steps into embedded programming to experienced engineers building sophisticated vehicle network applications.
More Information
For complete information about the ARD1939 protocol stack, including architecture, implementation details, programming interfaces, and documentation, please visit ARD1939.com.
To stay informed about new releases, development progress, programming examples, and book updates—and to connect with other engineers working with SAE J1939—join our J1939 Community Forum. We welcome your questions, suggestions, and feedback as ARD1939 and the accompanying book continue to evolve.
SAE J1939 Starter Kit and Network Simulator
Our JCOM.J1939 Starter Kit and Network Simulator is designed to allow the experienced engineer and the beginner to experiment with SAE J1939 data communication without the need to connect to a real-world J1939 network, i.e., a diesel engine. It may sound obvious, but you need at least two nodes to establish a network. That fact applies especially to CAN/J1939, where the CAN controller shuts down after transmitting data without receiving a response. Therefore, our jCOM.J1939 Starter Kit and Network Simulator consists of two J1939 nodes, namely our jCOM.J1939.USB, an SAE J1939 ECU Simulator Board with USB Port.
The jCOM.J1939.USB gateway board is a high-performance, low-latency vehicle network adapter for SAE J1939 applications. The board supports the full SAE J1939 protocol according to J1939/81 Network Management (Address Claiming) and J1939/21 Transport Protocol (TP). More Information…










Comments are closed.