CANopen: object dictionary, PDO, SDO, NMT and COB-IDs

The CANopen application layer (CiA 301): node IDs, the predefined connection set, SDO and PDO communication, NMT states, heartbeat and device profiles like CiA 402.

Object dictionary

Every CANopen device has an object dictionary — a table addressed by a 16-bit index and an 8-bit sub-index:

Index rangeContent
0x1000–0x1FFFCommunication profile (device type, error register, heartbeat, PDO configuration)
0x2000–0x5FFFManufacturer-specific objects
0x6000–0x9FFFStandardized device profiles (e.g. CiA 402 drives, CiA 401 I/O)

The dictionary is described in an EDS file (INI-style text) used by configuration tools.

COB-IDs: the predefined connection set

Each node has a node ID 1…127. CANopen derives default CAN identifiers (COB-IDs) from a function code and the node ID:

ObjectCOB-ID
NMT command0x000
SYNC0x080
EMCY0x080 + node ID
TIME0x100
TPDO1 / RPDO10x180 / 0x200 + node ID
TPDO2 / RPDO20x280 / 0x300 + node ID
TPDO3 / RPDO30x380 / 0x400 + node ID
TPDO4 / RPDO40x480 / 0x500 + node ID
SDO server → client / client → server0x580 / 0x600 + node ID
Heartbeat / NMT error control0x700 + node ID

So 0x58A is an SDO response from node 10. Decode any identifier with the CANopen COB-ID tool.

SDO — service data

Confirmed read/write of any dictionary entry. An expedited download (write ≤ 4 bytes) uses command byte 0x23/0x27/0x2B/0x2F for 4/3/2/1 data bytes, then index (little-endian), sub-index and data; the server replies 0x60. An upload request is 0x40, the reply 0x43/0x47/0x4B/0x4F. Command 0x80 is an abort with a 32-bit abort code, e.g. 0x06020000 "object does not exist", 0x06010002 "attempt to write a read-only object".

PDO — process data

Unconfirmed, up to 8 bytes of mapped objects, sent on change, cyclically or after SYNC. Mapping objects (0x1A00… for TPDO, 0x1600… for RPDO) define which dictionary entries are packed in which order.

NMT and heartbeat

NMT states: Initialisation → Pre-operational (SDO allowed, no PDO) → Operational (PDO active) ↔ Stopped. The master sends NMT commands (0x01 start, 0x02 stop, 0x80 enter pre-operational, 0x81 reset node, 0x82 reset communication). Devices send a heartbeat with their state: 0x00 boot-up, 0x04 stopped, 0x05 operational, 0x7F pre-operational.

Profiles

Device profiles standardize objects for device classes: CiA 402 (drives and motion — controlword 0x6040, statusword 0x6041, modes of operation 0x6060), CiA 401 (generic I/O), CiA 406 (encoders).

Loading the map…

Sources

  1. CAN knowledge (CAN, CAN FD, CANopen) — CAN in Automation (CiA)

Updated 2026-10-02