LiFePO4 BMS CAN Communication for OEMs: Proprietary CAN vs SAE J1939 vs CANopen (CiA 418/419)

Share This Article

If you build golf carts, aerial work platforms, AGVs or other electric equipment, the battery is not finished when the cells and BMS are chosen. The motor controller, display, charger and telematics all need to read state of charge, faults and charge limits from the battery, and they only can if the BMS speaks the same CAN language. This guide compares the three options you will meet most often (a supplier’s proprietary CAN, SAE J1939 and CANopen with the CiA 418/419 battery and charger profiles) and lists what to write into your battery spec before you send an RFQ.

Third-party products named below are typical market examples, not LJY products. Protocol options for an LJY-supplied pack are arranged per project with the manufacturer and confirmed on your own bench.

Short answer

  • Start from what your equipment already speaks. If the controller, display and charger are CANopen, ask for a CiA 418 battery profile; if the vehicle bus is J1939, ask for J1939 messages at the bus bitrate.
  • Proprietary CAN can work well when one supplier controls the whole system, but you need the frame map (often a DBC file) or a gateway.
  • Ask for the protocol document early. Integration time is mostly spent mapping signals, not wiring.

Why the protocol decides integration time

On a CAN bus every node has to agree on identifiers, bitrate and what each byte means. A battery that reports SOC in a format your display does not read will still drive the motor, but the operator sees nothing, the charger may fall back to a fixed profile, and fault codes go unlogged. Agreeing the protocol in the spec avoids a late firmware change or an extra gateway box after the pilot build.

Proprietary CAN

Many BMS boards ship with a vendor-defined CAN message set. Identifiers, bitrate and scaling are whatever the BMS designer chose. That is fine when the same supplier also provides the display and charger, or when your engineers are happy to decode the messages themselves. What you need:

  • A complete frame map: identifier, byte position, scaling, offset and update rate for every signal.
  • Fault and alarm code list.
  • Sample logs recorded from a real pack.

If your controller cannot be programmed to read those frames, a gateway can translate them into J1939 or CANopen, at the cost of one more part to source and qualify.

SAE J1939

J1939 is a higher-layer protocol built on CAN and widely used in heavy-duty vehicles. According to Kvaser’s J1939 introduction:

  • It uses the 29-bit identifier defined in CAN 2.0B.
  • The Parameter Group Number (PGN) is an 18-bit value built from fields in that identifier; the PGN identifies which parameter group a message carries.
  • Bus speed is nearly always 250 kbit/s or 500 kbit/s.
  • The application layer documents (J1939/71 and J1939/73) define the data inside each message.

For a battery, ask the supplier which PGNs and parameters the BMS transmits, and check that they match what your display or telematics unit reads. The SAE documents themselves are paid standards; your controller supplier can usually tell you which parameter groups it expects.

CANopen with CiA 418 (battery) and CiA 419 (charger)

CANopen uses an object dictionary and standard communication objects defined in CiA 301. CAN in Automation (CiA) publishes two device profiles that matter for batteries:

  • CiA 418 specifies the CANopen interface for battery modules, so they work with chargers built to CiA 419. A compliant battery module must provide the battery type, battery capacity, number of cells, maximum permissible charge current and battery temperature. Optional data includes identifiers, charge history, battery voltage, state of charge, requested current and water level (for flooded batteries).
  • A default transmit PDO sends battery temperature and status on a timer; optional PDOs carry battery voltage, current requests and state of charge. A default receive PDO takes the charger status.
  • The battery module must support the NMT server and heartbeat functions of CiA 301 and provide a 5-wire interconnect; if a CiA 106 connector is used, its pin assignment is recommended.
  • CiA 419 is the matching profile for battery chargers. It receives the battery data and transmits the charger status.

Because the minimum data set is fixed, a CiA 418 battery and a CiA 419 charger can carry out a charge without custom mapping. Many traction controllers and displays also support CANopen and/or J1939; for example, Curtis lists CANopen, J1939 and an adjustable baud rate for its 3401T display (market example).

Writing a battery spec? Send us your controller and charger models. We’ll check with the manufacturer which BMS communication options can be arranged for your project.

Check BMS communication options

Comparison at a glance

Proprietary CANSAE J1939CANopen CiA 418/419
IdentifiersVendor-defined (11- or 29-bit)29-bit (CAN 2.0B), PGN-basedObject dictionary with PDOs and SDOs (CiA 301)
BitrateVendor-defined; must match your busNearly always 250 or 500 kbit/sSet per network; match the controller
Standard battery dataNone; needs a frame mapParameter groups defined in the SAE application layerMandatory set: type, capacity, cells, max charge current, temperature
Where you meet itSingle-supplier packs and systemsHeavy-duty vehicles and equipment busesBattery-to-charger links and CANopen controllers
Integration effortMapping work or a gatewayMedium: confirm which PGNs are usedLow if both sides implement the profiles

What to put in your battery spec or RFQ

ItemWhat to state
ProtocolProprietary (with frame map), J1939 or CANopen CiA 418
BitrateThe bitrate of your vehicle or machine bus
TerminationWhether the battery should carry a 120 Ω terminating resistor or not
AddressingJ1939 source address or CANopen node ID, fixed or configurable
SignalsSOC, pack voltage, current, temperatures, faults, charge-current and charge-voltage request
Wake / sleepHow the BMS wakes (CAN traffic, key signal, button) and its sleep behaviour
ConnectorConnector type and pinout for CAN and any wake line
EvidenceProtocol document or DBC, plus a sample CAN log from a real pack

Testing integration before the pilot run

  1. Bench first. Connect a golden-sample battery to the real controller, display and charger with a CAN logger on the bus.
  2. Exercise the edge cases. Low SOC, over-temperature, charge start and stop, BMS protection trip and wake from sleep.
  3. Compare logs with the protocol document and record any differences before the pilot run.
  4. Freeze the firmware version that passed, and quote it in the purchase order so later lots match.

Pack-level reliability topics are covered in our guide to what makes a LiFePO4 pack reliable.

Where this applies

Typical equipment where BMS communication is written into the spec: golf cart batteries such as the 48V 150Ah golf cart battery, aerial work platform batteries, AGV and AMR robot batteries and material handling. For RVs, which use their own CAN standard, see our RV-C lithium battery integration guide. Customisation options are on our OEM/ODM page.

OEM project with CAN integration? Share your controller, bus protocol and volumes. We coordinate BMS options and protocol documents with the manufacturer per project.

Start an OEM battery inquiry

Prefer chat? WhatsApp +86 159 8945 0735.

FAQ

Does my battery need CANopen to work with a Curtis controller?

Not always. Check which protocols your controller and display support. Many support CANopen and/or J1939, and the Curtis 3401T display lists both.

What is CiA 418?

The CANopen device profile for battery modules, published by CAN in Automation. It defines the data a battery must give a charger (type, capacity, number of cells, maximum charge current and temperature) and pairs with the CiA 419 charger profile.

Can a proprietary CAN BMS be converted to J1939?

Often, through firmware mapping or a gateway, but it depends on the BMS. Treat it as a project item to confirm with the manufacturer and test on your bench.

What bitrate do I need?

Match your vehicle or machine bus. J1939 buses are nearly always 250 or 500 kbit/s; CANopen networks are set per installation.

What should I ask a battery supplier for?

The protocol document or DBC file, a sample CAN log from a real pack, the fault code list and the connector pinout.

Sources (checked 30 October 2026)

Share This Article