119 lines
4.8 KiB
ReStructuredText
119 lines
4.8 KiB
ReStructuredText
CANopen Basics
|
||
==============
|
||
|
||
Communication Objects
|
||
---------------------
|
||
|
||
A CANopen network consists of "masters" and "slaves", masters are clients,
|
||
slaves are servers. At most one master may be active at a time.
|
||
|
||
CANopen supports addressing of up to 127 slaves on a bus using node IDs 1-127.
|
||
Node address 0 is used for broadcasts to all nodes. Node addressing is simply
|
||
mapped onto CAN IDs by adding the node id to a base ID.
|
||
|
||
The CANopen protocol mainly consists of…
|
||
|
||
- PDO (process data objects)
|
||
- SDO (service data objects)
|
||
- NMT (network management)
|
||
- SYNC (synchronisation)
|
||
- EMCY (emergency events)
|
||
|
||
**PDO** are regular, normally periodical, status update frames, for example sensor
|
||
data. You can log them using the CAN monitor (``can log start monitor …``).
|
||
PDOs can be sent at any CAN ID except those reserved for other CANopen services.
|
||
|
||
**SDO** are memory registers of nodes that can be read and written by masters on
|
||
request. SDO requests are normally sent at ID 0x600 + nodeid, responses at ID
|
||
0x580 + nodeid. SDOs are addressed by a 16 bit index + 8 bit subindex. Registers
|
||
and data types for a given device are documented by the device specific object
|
||
dictionary, normally represented as an EDS (electronic data sheet) file.
|
||
|
||
**NMT** are short datagrams to control node startup / shutdown. There's a special
|
||
node state "pre-operational" allowing access to all operation and communication
|
||
parameters of a node in a standardized way. NMT requests are sent at ID 0x000,
|
||
responses and unsolicited updates (aka heartbeats) are sent at ID 0x700 +
|
||
nodeid with length 1.
|
||
|
||
**SYNC** messages are datagrams of length 0, normally sent at ID 0x080.
|
||
|
||
**EMCY** messages are sent if a node encounters some kind of alert or warning
|
||
condition, they are normally sent at ID 0x080 + nodeid with a length of 8 bytes.
|
||
|
||
================ =========================
|
||
CAN IDs Communication objects
|
||
================ =========================
|
||
0x000 NMT requests
|
||
0x080 SYNC
|
||
0x081 - 0x0FF EMCY
|
||
0x581 - 0x5FF SDO responses
|
||
0x601 - 0x67F SDO requests
|
||
0x701 - 0x77F NMT responses / heartbeats
|
||
================ =========================
|
||
|
||
So if any of these IDs look familiar to you, chances are you've got a CANopen
|
||
network.
|
||
|
||
.. note:: CANopen coexists nicely with OBD-II and often does in a vehicle (i.e.
|
||
Renault Twizy). OBD-II devices normally are addressed at IDs > 0x780 so are
|
||
outside the CANopen ID range. Even if they use non-standard IDs, the devices
|
||
normally will detect and ignore frames not matching their protocol.
|
||
|
||
|
||
SDO Addresses
|
||
-------------
|
||
|
||
The SDO address space layout is standardized:
|
||
|
||
=========== ===============================================
|
||
Index (hex) Object
|
||
=========== ===============================================
|
||
0000 not used
|
||
0001-001F Static Data Types
|
||
0020-003F Complex Data Types
|
||
0040-005F Manufacturer Specific Complex Data Types
|
||
0060-007F Device Profile Specific Static Data Types
|
||
0080-009F Device Profile Specific Complex Data Types
|
||
00A0-0FFF Reserved for further use
|
||
1000-1FFF Communication Profile Area
|
||
2000-5FFF Manufacturer Specific Profile Area
|
||
6000-9FFF Standardised Device Profile Area
|
||
A000-BFFF Standardised Interface Profile Area
|
||
C000-FFFF Reserved for further use
|
||
=========== ===============================================
|
||
|
||
See `CiA DS301`_ for details on standard SDOs.
|
||
|
||
For example, a device shall tell about the PDOs it transmits or listens to,
|
||
their IDs, update frequency and content structure at SDO registers 1400-1BFF.
|
||
This is mandatory in theory but real devices may not fully comply to that rule.
|
||
|
||
CANopen compliant standard device types like motor controllers need to
|
||
implement some standard profile registers. See `CiA DS401`_ for the generic I/O
|
||
device class definition and `CiA DS402`_ for motor controllers.
|
||
|
||
Most devices will require some kind of login before allowing you to change
|
||
operational parameters. This is also done using SDO writes, but there is no
|
||
standard for this, so you'll need to dig into the device documentation.
|
||
|
||
Of course there's a lot more on CANopen, but this should get you going.
|
||
|
||
|
||
CAN in Automation
|
||
-----------------
|
||
|
||
More info on the standard and specific device profiles can be found on the
|
||
CiA website:
|
||
|
||
https://www.can-cia.org/
|
||
|
||
CAN in Automation (CiA) is the international users’ and manufacturers’ group
|
||
for the CAN network (Controller Area Network), internationally standardized
|
||
in the ISO 11898 series. The nonprofit association was established in 1992.
|
||
The aim is to provide an unbiased platform for future developments of the
|
||
CAN protocol and to promote the image of the CAN technology.
|
||
|
||
|
||
.. _`CiA DS301`: https://www.can-cia.org/standardization/specifications/
|
||
.. _`CiA DS401`: https://www.can-cia.org/standardization/specifications/
|
||
.. _`CiA DS402`: https://www.can-cia.org/standardization/specifications/
|