One of the first questions engineers ask when starting with SAE J1939 development is:
“Which hardware platform should I use?”
The good news is that there is no shortage of choices.
Over the years I have worked with numerous embedded platforms, development environments, and operating systems. They all have their strengths, and there is certainly nothing wrong with using them. However, when writing my upcoming book, J1939 Development for Embedded Systems, I had to make one important decision:
Which platform provides the easiest learning curve while still being powerful enough for professional development?
My answer was clear: the Arduino IDE and Arduino-compatible hardware.
Why the Arduino IDE?
The Arduino IDE has evolved far beyond its educational roots. Today it supports a wide range of powerful 32-bit microcontrollers while maintaining one of the simplest development environments available.
Its advantages are difficult to ignore:
- Free to download and use
- Available for Windows, macOS, and Linux
- Extremely easy to install
- No complicated project configuration
- Huge user community
- Excellent library support
- Fast compile-download-debug cycle
Most importantly, it allows you to concentrate on learning SAE J1939 instead of spending days configuring a development environment.
That is exactly the philosophy behind my book.
The goal is not to teach a specific IDE—it is to teach embedded J1939 programming.
The Hardware Platforms Used Throughout the Book
All programming examples in the book are based on hardware that fully supports the requirements of a modern J1939 node.
The three primary development platforms are:
- ESP32-S3 Board with CAN FD and Classical CAN…
- Arduino-Based ECU Development Board with Dual CAN Bus Interface…
- Teensy 4.0 Triple CAN Bus Board with Two CAN 2.0B and One CAN FD Interface…
Although these boards differ considerably in processing power and available peripherals, they all share the same essential capabilities required for embedded J1939 development.
What Does a J1939 Application Really Need?
Surprisingly little.
A reliable embedded J1939 implementation requires only a few basic building blocks:
- A CAN interface
- Accurate timer functionality
- A USB connection for programming and debugging
- Sufficient processing power and memory for the intended application
Every hardware platform used in this book provides these features.
The programming concepts therefore remain almost identical across all supported boards.
Instead of learning different programming techniques for every processor family, you learn one software architecture that can easily be transferred from one platform to another.
What About Raspberry Pi?
Many readers ask whether a Raspberry Pi can be used for SAE J1939 development.
The answer is yes.
However, I generally recommend using the Raspberry Pi as an application computer rather than relying on the Linux operating system’s native CAN and J1939 support for real-time communication.
Linux is an excellent operating system, but it was not originally designed as a hard real-time operating system. Depending on overall system load, background services, and scheduling, message timing can vary. While this is acceptable for many applications, deterministic timing becomes increasingly important as embedded control tasks become more demanding.
For that reason, I prefer connecting the Raspberry Pi to an external J1939 interface, such as our SAE J1939 ECU Simulator Board with USB. In this configuration, the external hardware handles the real-time protocol processing while the Raspberry Pi focuses on the application logic.
This approach combines the flexibility of Linux with the deterministic behavior expected from an embedded communication interface.
I will discuss this topic in much greater detail in a future article, since real-time behavior under Linux deserves a dedicated discussion.
Why I Chose This Approach
My objective with J1939 Development for Embedded Systems is not to compare processors, benchmark microcontrollers, or debate development environments.
The objective is much simpler:
Teach engineers how to develop real-world SAE J1939 applications as quickly as possible.
By standardizing on the Arduino IDE and a carefully selected set of hardware platforms, every code example in the book remains straightforward, portable, and easy to reproduce.
Once you understand the concepts, moving to another processor or development environment becomes a relatively simple task.
Learning SAE J1939 is challenging enough.
Your development environment shouldn’t be.
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.