SDO Overview [LEGACY]#

Warning

Legacy documentation. This page documents the CANopen implementation shipped with MD firmware 2.5.x. It is kept for users who still run that firmware and is no longer updated.

The CANopen stack has been rewritten for the current firmware and is documented in CANopen. The two object dictionaries are not compatible, so do not read values across from that section.

1. Introduction#

SDOs (Service Data Objects) in CANopen provide a request/response mechanism to access and configure any object in the Object Dictionary.
Unlike PDOs, SDOs are slower but allow reading/writing large or complex data structures.


2. SDO Communication Concept#

  • SDO communication is always between a client and a server.

  • The client initiates the transfer (read or write), and the server responds.

  • SDOs can transfer data up to 4 GB using segmented communication if needed.


3. SDO Message Structure#

SDO messages are carried using CAN-ID 0x600 + Node-ID for client → server, and 0x580 + Node-ID for server → client.

Field

Description

CAN-ID

0x600 + Node-ID for requests, 0x580 + Node-ID for responses

Command Specifier (CS)

Defines the type of operation: upload, download, segment, abort

Index / Subindex

Identifies the object in the Object Dictionary

Data

Up to 4 bytes (or segmented for longer data)


4. SDO Commands (Command Specifiers)#

Command

Hex Value

Description

Initiate Download (Expedited)

0x2x

Write up to 4 bytes in one message

Initiate Upload(Expedited)

0x4x

Read up to 4 bytes in one message

Initiate Download (Segmented)

0x2x

Start writing more than 4 bytes

Initiate Upload (Segmented)

0x60

Start reading more than 4 bytes

Segment Download / Upload

0x00 / 0x01

Transfer next 7 bytes segment

Abort Transfer

0x80

Stop current transfer in case of error

Note: x => second bytes depend on the length of the data

Note: Expedited SDO is used for small data (≤ 4 bytes), segmented SDO is used for larger data (> 4 bytes).


5. Example of SDO Transfer#

Write 16-bit value 0x1234 to object 0x6040:00 (Controlword) on node 0x05:

CAN-ID

CS

Index

Subindex

Data

0x605

0x23

0x40 0x60

0x00

0x34 0x12

Read the same object:

CAN-ID

CS

Index

Subindex

Data

0x605

0x40

0x40 0x60

0x00

–

0x585

0x43

0x40 0x60

0x00

0x34 0x12

Warning: The index and the data must be send in little-endian


6. Advantages of SDO#

  • Access any object in the Object Dictionary

  • Supports large data transfers with segmentation

  • Ensures reliable request/response communication

  • Essential for configuration, diagnostics, and parameterization


7. Conclusion#

SDOs complement PDOs in CANopen by allowing flexible and reliable data access, especially for configuration and larger or less time-critical data.

✅ Use SDOs for reading/writing configuration parameters
✅ Use PDOs for real-time process data
✅ Combine both for a fully functional CANopen system