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 range | Content |
|---|---|
| 0x1000–0x1FFF | Communication profile (device type, error register, heartbeat, PDO configuration) |
| 0x2000–0x5FFF | Manufacturer-specific objects |
| 0x6000–0x9FFF | Standardized 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:
| Object | COB-ID |
|---|---|
| NMT command | 0x000 |
| SYNC | 0x080 |
| EMCY | 0x080 + node ID |
| TIME | 0x100 |
| TPDO1 / RPDO1 | 0x180 / 0x200 + node ID |
| TPDO2 / RPDO2 | 0x280 / 0x300 + node ID |
| TPDO3 / RPDO3 | 0x380 / 0x400 + node ID |
| TPDO4 / RPDO4 | 0x480 / 0x500 + node ID |
| SDO server → client / client → server | 0x580 / 0x600 + node ID |
| Heartbeat / NMT error control | 0x700 + 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).
Connections
Open in Knowledge Graph →Loading the map…
Sources
- CAN knowledge (CAN, CAN FD, CANopen) — CAN in Automation (CiA)
Updated 2026-10-02