Docs

ECAN-Lite Docs

Read product documentation, quick starts, and protocol references online.

Overview

ETHERCAT TO CAN / CAN FD GATEWAY
ECAN-Lite Product Overview V3.0
Connect CAN Devices to EtherCAT
ECAN-Lite is an industrial EtherCAT-to-CAN/CAN FD gateway. It appears as a standard EtherCAT slave to the master and connects to multiple CAN buses on the device side, bringing servos, sensors, actuators, and test equipment into one real-time control network.
Standard EtherCAT Slave 4-Channel CAN / CAN FD Dynamic PDO CoE Configuration FoE Update IgH demo sample package Document Version V3.0

This document is for product evaluation. For wiring, PDO/SDO fields, FoE compatibility, For configuration and troubleshooting, use the ECAN-Lite Application Manual V3.0. For protocol and object definitions, use the ECAN-Lite Technical Reference V3.0. Source customers should start with the source quick start.

What Problem Does It Solve?

Many field devices still use CAN or CAN FD while control systems are converging on EtherCAT. ECAN-Lite bridges the two networks:

EtherCAT Master
PLC / Linux master
Periodic PDO control
ECAN-Lite
PDO packet conversion
SDO configuration and maintenance
CAN Devices
Servo / I/O / sensor
CANopen or vendor protocol
The master exchanges standard EtherCAT PDO data. ECAN-Lite converts that data into CAN frames and returns received CAN traffic through EtherCAT.

How Data Flows

Transmit
Direction
Master Writes PDO
Periodic task updates RxPDO
Gateway Parses
Identifies channel, frame ID, and payload
CAN Transmission
Sends the frame on the selected channel
Device Responds
Servo, I/O, or sensor performs the command
Receive
Direction
CAN Reception
Collects field data from multiple channels
Unified Packing
Places frames into the TxPDO data area
Master Reads
Periodic task receives the latest data
Diagnostics
Uses status, version, and error counters

Core Capabilities

Multi-Channel CAN Expansion

One device connects multiple CAN/CAN FD buses, making bus grouping clearer and control-cabinet wiring simpler.

Dynamic PDO Capacity

PDO capacity scales with the application, from lightweight systems to multi-device workloads.

Cyclic Data Exchange

CAN frames follow the EtherCAT cycle for control, acquisition, and automated testing.

Field Maintenance

SDO configuration, version queries, and FoE updates reduce disassembly and direct programming.

Complete Master Examples

The IgH package covers scanning, PDO exchange, cyclic testing, FoE updates, and CiA402 reference control.

Faster Troubleshooting

Status words, error counters, version queries, and diagnostic paths simplify field debugging.

Quick Specifications

EtherCAT Interface

Two 100 Mbps EtherCAT ports with CoE parameter configuration and FoE firmware updates.

Four MCAN Channels

Each channel supports CAN 2.0A/B and ISO CAN FD with payloads up to 64 bytes.

Scalable PDO Capacity

PDO size uses 128-byte base blocks, with 16-byte fine adjustment on firmware 2.x. The stable SM profile uses 128-byte RxPDO and 256-byte TxPDO, DC uses 384 bytes in each direction, and the per-direction maximum is 1392 bytes.

Real-Time Transmission

Supports immediate and scheduled transmission, including RxPDO full64 scheduling relative to the SYNC0 phase.

High-Speed CAN FD

TDC is enabled by default and required for data rates of 5 Mbit/s and above.

Persistent Configuration

Key parameters are stored in a CRC32-protected Flash image to reduce reconfiguration after power loss.

Category Summary
Main control platform HPMicro HPM5E00 series RISC-V MCU, CPU 400MHz, mchtmr 24MHz
EtherCAT 2-port 100Mbps, supports CoE/FoE
CAN / CAN FD 4-channel MCAN, supports CAN 2.0A/B and CAN FD ISO, maximum 64B data field
PDO capability Stable SM uses 128B RxPDO and 256B TxPDO; DC uses 384B in each direction; base blocks are capped at 10 and firmware 2.x adds 16B fine sizing, up to 1392B/direction
PDO encapsulation Default V1 header is 24B on 5E and 32B on 6E with payload CRC disabled; firmware 2.x can explicitly enable compact V2 at 16B/20B and CRC remains opt-in; CAN packets carry control, ID, optional timestamp, and data
Real-time features Direct transmission, delta16/delta32/full64 timestamp encoding, and SYNC0 phase scheduling
Maintenance capability SDO parameter configuration, Flash parameter persistence, FoE firmware upgrade

Validated real-time operating modes

The current Linux/IgH delivery is converged to two modes:

Mode Synchronization Default PDO Intended use
sm_250us_1ms (default) 250us SM subcycles with four-phase rotation 128B RxPDO and 256B TxPDO One fixed phase for each of MCAN0..3 and a 1ms per-channel control period
dc_1ms_cross_cycle DC Sync0, 1ms cycle, 900us shift 384B in each direction Command in cycle N and collect the reply in N+1 for a 1kHz loop

The examples apply the period, PDO size, phase, and send strategy as one profile, so users do not need to reconstruct the parameter combination. Actual latency still depends on the host, kernel, NIC, CAN bit rate, bus load, and motor response time; validate the complete deployment as described in the technical manual.

In-Robot Communication and Debugging

Robot systems often include joint drives, end-effectors, torque sensors, grippers, I/O modules, and safety components. These devices may be distributed across several CAN buses and may use CANopen or vendor-specific protocols. ECAN-Lite acts as a real-time conversion layer between the robot controller and the internal CAN network, aggregating distributed CAN traffic into EtherCAT.

Robot Controller
EtherCAT cyclic task
Motion control and status acquisition
ECAN-Lite
Multi-channel CAN aggregation
Cyclic packing and forwarding
Internal CAN Network
Joint / gripper / sensor
End-effector and expansion module
Centralized Internal-Bus Access

Group CAN/CAN FD channels by joints, end-effectors, sensors, or test interfaces while exposing one EtherCAT slave to the master.

Control and Diagnostics on One Link

The EtherCAT link carries control frames, status frames, error reports, and diagnostic data, reducing extra debug cabling.

Prototype Bring-Up

Observe CAN frames, node states, versions, and error counters to isolate joint, harness, and protocol issues.

Production and Maintenance

Master-side scripts support scanning, configuration, communication checks, and FoE updates for batch testing and field maintenance.

Example: A quadruped controller runs Linux and the IgH EtherCAT master. Cyclic EtherCAT traffic reaches ECAN-Lite, which connects joint motors, foot sensors, and power-management modules over multiple CAN/CAN FD channels. Control software keeps the EtherCAT cyclic model while reusing established CAN motors and sensors.
Quadruped
Example
Linux Master
Runs IgH
Schedules control tasks
EtherCAT
Cyclic PDO
Low-latency backbone
ECAN-Lite
EtherCAT to CAN
Multi-channel forwarding
CAN Devices
Joint drives
Sensors and expansion modules

Which applications are suitable?

Application scenarios Changes brought by ECAN-Lite
CANopen servo access to EtherCAT Use EtherCAT periodic tasks to centrally control multiple CANopen nodes
In-robot communication Bring CAN traffic from joints, end-effectors, sensors, and expansion modules into the robot controller
Quadruped/mobile robot control Run IgH on a Linux master and convert EtherCAT to CAN for joint-motor control
Robot prototype debugging Observe CAN frames, node states, error counters, and versions through one master link
Multi-channel CAN data collection Aggregate distributed CAN buses into one master
Production-line testing Use scripts for batch configuration, communication checks, verification, and updates
Legacy CAN equipment migration Retain existing device protocols and reduce system migration cost
Control cabinet interface expansion Reduce the number of host CAN interfaces to make the system structure clearer

Why is it easier to integrate?

Simple Master Integration

Configure PDO, SDO, and FoE through standard EtherCAT mechanisms without designing a separate communication framework.

Flexible Device Side

Connect CANopen devices or carry existing vendor-specific CAN protocols.

Clear Data Path

The master writes RxPDO to transmit CAN and reads TxPDO to receive CAN, making direction and troubleshooting straightforward.

From Validation to Production

Use the same mechanism for engineering validation, production-line testing, and field deployment.

Delivery Features

IgH Master Demo

Buildable Linux/IgH examples help validate single-axis, multi-axis, and cyclic communication.

Matched update package

Each release provides an FoE package matched to the device model and factory configuration. Verify the product model, firmware version, and release notes before updating; packages for different device configurations must not be mixed.

FoE OTA Example

The master can update firmware through FoE for field maintenance, version rollback, and batch upgrades.

Clear Configuration Documentation

The technical manual documents PDO encoding, SDO configuration, the public object dictionary, and common troubleshooting steps.

Release File Boundaries

File Includes Does Not Include / Not For
ECAN-Lite-<version>-igh-demo.zip Linux/IgH master-side source, build files, and examples It is not slave firmware and cannot be programmed into the device
ECAN-DEMO-firmware-<release-id>.zip Versioned direct-programming BIN and its JSON; includes EtherCAT/CoE, dynamic PDO, and CAN/CAN FD gateway functions The BIN has no second-stage bootloader, FoE update header, or field-update capability and is not an FoE package
ECAN-Lite-firmware-<release-id>.zip Raw, FoE, and signed/encrypted FoE-sec BINs plus one aggregate JSON Select the variant for the device; FoE-sec is only for ECAN-Lite-S with matching factory security configuration
ECAN-Lite.xml EtherCAT ESI device description, PDO definitions, and object configuration No executable code or firmware

The <release-id> in ecan_demo_app_raw_<release-id>.bin inside ECAN-DEMO-firmware-<release-id>.zip matches the delivery package and makes the image traceable to its source revision. The image retains the public CoE object dictionary, including 0xF000:00, 0xF000:05, and 0xF000:06, but is intended only for direct programming with a programmer/debugger or in a production-test flow.

Typical workflow

1
Scan the Slave
Confirm that ECAN-Lite is online and read its version.
2
Configure Capabilities
Set PDO size, CAN bit rate, and channel mode.
3
Write RxPDO
Place outgoing CAN frames in cyclic process data.
4
Read TxPDO
Receive frames returned from the CAN bus.
5
Maintain and Update
Update through FoE and confirm the new version.

Pre-integration checklist

Match product and version

Use the device model, ESI, firmware package, and master examples from one compatible release.

Document the topology

Record the dedicated EtherCAT interface, slave order, and wiring for every MCAN channel.

Match the PDO map

Keep SM2/SM3 lengths, assignments, and the application PDO profile exactly aligned.

Verify CAN parameters

Confirm arbitration/data rates, CAN FD, BRS, termination, and the node protocol.

Start from a stable profile

Bring up the default SM profile first; validate the DC profile before using a 1 kHz loop.

Keep acceptance evidence

Record WKC, slave state, error counters, CAN-frame integrity, and long-run results.


Application Manual

ECAN-Lite Application Manual V3.0

For first connection, master configuration, CAN/CAN FD transfer, cycle selection, IgH integration, upgrade, and field troubleshooting. For the complete object dictionary, bit definitions, wire formats, and capabilities, see ECAN-Lite Technical Reference V3.0.

Find by task

[TOC]


1. Start here

You do not need to learn the full protocol before using the module. Complete one verifiable frame first, then add capacity, channels, CRC, DC, or diagnostics only when the project needs them.

Check supportfirmware 2.x / V2 bit Select PDOV2, CRC off Configure CANrate, sample point Send one framewrite RxPDO Add featureschannels / DC / CRC

Figure 1. Recommended path: build a minimal closed loop before adding features.

1.1 Choose a baseline

New project — recommendedV2 with CRC off: shorter header and simpler bring-up.
Maintain a legacy projectKeep V1 with CRC off so deployed parsing does not change.
High-integrity linkEnable CRC explicitly after the baseline is stable.
Item Recommended for new projects Why
PDO protocol V2 16-byte header on a 4-channel device
CRC Off Lowest processing cost; payload_crc16=0
PDO size 256 bytes each direction Simple and sufficient for common loads
Channels CAN0 only at first Smallest troubleshooting scope
CAN FD 1M + 5M, BRS, 8-byte data Baseline used throughout this manual
Cycle Start with SM; use DC for deterministic systems Validate data flow before timing optimization

!!! important "Capability is not the active default" Firmware 2.x means that V2 is supported; it does not automatically select V2. For legacy-master compatibility, the factory/reset baseline may still be V1 with CRC off (0x04). A new master should read capabilities, then explicitly select V2 with CRC off (0x24).

1.2 The five things that must be configured

Order Configure Minimum action Pass condition
1 PDO mapping and capacity Use the released ESI; keep 256 bytes SM2/SM3 equal the master domain sizes
2 PDO protocol 0x8010/0x8011:07=0x24 Both Apply Status values are 0
3 Channel scope :04=0x01 Only CAN0 is allowed
4 CAN bit timing Write 1M + 5M, then Apply 0x8001:02=0
5 Cyclic image Build V2 header and CAN_FRAME Stable WKC and a correct CAN frame

!!! note "Direction names" EtherCAT directions are named from the master. RxPDO goes from the master to ECAN-Lite and is transmitted on CAN. TxPDO returns from ECAN-Lite to the master and originates on CAN.

1.3 Preflight

  • The released ESI matches the product and the slave reaches PREOP.
  • CAN_H, CAN_L, ground, and termination are correct; the peer supports CAN FD ISO and BRS.
  • Configuration SDOs are written in PREOP/SAFEOP and every Apply Status is checked.
  • First bring-up uses one slave, one channel, and one fixed test frame.
  • In OP, observe WKC, a CAN analyzer, and module status together.

2. Send the first frame in ten minutes

This reproducible baseline uses slave 0, CAN0, V2, CRC off, standard ID 0x123, CAN FD+BRS, DLC 8, and data 11 22 33 44 55 66 77 88.

2.1 Follow the data

EtherCAT masterapplication / IgH domain ECAN-LitePDO parser and queuesMCAN0 CAN FD peeranalyzer / controller RxPDO: master → moduleTxPDO: module → master CAN transmitCAN receive

Figure 2. Write RxPDO to transmit CAN; read TxPDO to receive CAN.

2.2 Confirm V2 capability

Read in PREOP:

sh
sudo ethercat upload -p 0 -t uint16 0xF000 0x05
sudo ethercat upload -p 0 -t uint16 0xF000 0x09
sudo ethercat upload -p 0 -t uint32 0xF000 0x16

Use V2 only when all three checks pass:

Object Requirement
0xF000:05 firmware major normalized value is at least 0x0200
0xF000:09 header-version mask includes V2
0xF000:16 feature flags bit 13, HEADER_V2, is set

If any check fails, use V1 with CRC off (OptionFlags=0x04) and the V1 codec.

2.3 Select V2, disable CRC, and allow CAN0

0x8010 configures TxPDO, module to master. 0x8011 configures RxPDO, master to module. Write fields first and :01=1 Apply last.

sh
# TxPDO: V2 + NO_CRC16, CAN0
sudo ethercat download -p 0 -t uint8 0x8010 0x04 0x01
sudo ethercat download -p 0 -t uint8 0x8010 0x07 0x24
sudo ethercat download -p 0 -t uint8 0x8010 0x01 1

# RxPDO: V2 + NO_CRC16, CAN0
sudo ethercat download -p 0 -t uint8 0x8011 0x04 0x01
sudo ethercat download -p 0 -t uint8 0x8011 0x07 0x24
sudo ethercat download -p 0 -t uint8 0x8011 0x01 1

# Both must return 0
sudo ethercat upload -p 0 -t uint8 0x8010 0x02
sudo ethercat upload -p 0 -t uint8 0x8011 0x02

0x24 = HEADER_V2(bit5) + NO_CRC16(bit2). It is the recommended new-project selection, not an automatic V2 default.

2.4 Configure CAN0 for 1M + 5M

sh
sudo ethercat download -p 0 -t uint32 0x8001 0x13 1000000
sudo ethercat download -p 0 -t uint32 0x8001 0x14 5000000
sudo ethercat download -p 0 -t uint8  0x8001 0x01 1
sudo ethercat upload   -p 0 -t uint8  0x8001 0x02

0x8001:02 must return 0. The minimal path keeps Normal mode, CAN FD ISO, TDC enabled, and automatic timing. Configure exact sample points only when the peer requires them.

2.5 Build the V2 first frame

On a 4-channel device, V2 uses a 16-byte header followed by CAN_FRAME records. The first 28 bytes are shown below; fill the remainder of the PDO with zero.

text
# V2 header, 16 bytes
24 00 01 00 01 00 0C 00 00 00 A1 04 00 00 00 00

# CAN_FRAME, 12 bytes: CAN0, FD+BRS, DLC8, ID 0x123, 8-byte payload
40 03 23 01 11 22 33 44 55 66 77 88
Offset Bytes Meaning
0 24 V2, four-channel header
1 00 runtime flags
2..3 / 4..5 01 00 / 01 00 seq_begin / seq_end
6..7 0C 00 12-byte payload
8..9 00 00 CRC is disabled
10..11 A1 04 layout_id for 256B, CAN0, V2/no-CRC
12..15 00 00 00 00 compressed CAN0..3 status
16..27 CAN_FRAME control, CAN ID, and 8-byte data

!!! warning "Advance the sequence" For each new PDO image, seq_begin and seq_end must be equal and advance together. Unequal values mark an update in progress; an unchanged completed image is idempotent and is not transmitted again.

2.6 Prove that it worked

  1. The slave is OP and domain WKC remains stable.
  2. A CAN analyzer sees ID 0x123, FD, BRS, DLC 8, and exact payload.
  3. After the peer returns a frame, TxPDO payload and frame count change.
  4. 0x8001:02, 0x8010:02, and 0x8011:02 remain 0.
  5. Run at least ten minutes before adding channels or load.

In 0x24, bit 0 is reserved and must remain zero; firmware rejects 0x25. Confirm application completion through the CAN peer response, and diagnose local congestion or bus errors through PDO channel status and SDO diagnostics.

3. Add only what the project needs

Change one class of parameters at a time. Read Apply Status and save the active configuration after each change.

3.1 Add channels

Device family CAN channels V2 header Recommended progression
HPM5E family 4 16 bytes CAN0 → CAN0/1 → CAN0..3
HPM6E family 8 20 bytes Validate four channels, then expand to eight

Channel-mask bits 0..7 correspond to MCAN0..7. Change 0x8010/0x8011:04, then Apply. The CH field in each frame still chooses the output; a mask is not a broadcast command.

3.2 Set exact sample points

For nominal 1M at 76.5% and data 5M at 88.2%, disable automatic timing and set each minimum and maximum to the same value:

sh
sudo ethercat download -p 0 -t uint8  0x8001 0x07 0
sudo ethercat download -p 0 -t uint32 0x8001 0x13 1000000
sudo ethercat download -p 0 -t uint32 0x8001 0x14 5000000
sudo ethercat download -p 0 -t uint16 0x8001 0x15 765
sudo ethercat download -p 0 -t uint16 0x8001 0x16 765
sudo ethercat download -p 0 -t uint16 0x8001 0x17 882
sudo ethercat download -p 0 -t uint16 0x8001 0x18 882
sudo ethercat download -p 0 -t uint8  0x8001 0x01 1
sudo ethercat upload   -p 0 -t uint8  0x8001 0x02

An Apply Status of 0x04 is a failure, not a configured value of four. Typical causes are an unrealizable integer timing solution, wrong write order, Message RAM conflicts, or values that do not apply to the current MCU.

3.3 Adjust PDO size

V2-capable firmware encodes coarse and fine size in an existing 8-bit selector, so no new SDO or SSC regeneration is needed:

Bits Meaning Range
bit0..4 128-byte coarse multiplier 0..10; default 2 means 256 bytes
bit5..7 16-byte fine multiplier 0..7
text
PDO_bytes = coarse × 128 + fine × 16
selector  = (fine << 5) | coarse
Target coarse fine selector
256B 2 0 0x02
272B 2 1 0x22
384B 3 0 0x03
400B 3 1 0x23

!!! important "Three sizes must match" ESI PDO/SM size, registered master-domain size, and firmware Active PDO bytes must be identical. Check 0xF000:16 bit7 before using fine sizing. A legacy IgH master that writes only the low five bits still gets the original 128-byte multiples.

The total process image for multiple slaves must also fit the actual Ethernet/EtherCAT frame budget. Validate the generated frame length, WKC, and cycle jitter rather than summing nominal slave maxima.

3.4 Choose V1, V2, and CRC

Four-channel device V1 · 24 bytes 16-byte common header 2-byte status × 4 channels V2 · 16 bytes 12-byte common header 1 byte × 4 V2 removes redundant or derivable fields while retaining sequence, length, CRC value, layout ID, and channel status.

Figure 3. V2 lowers fixed overhead; V1 remains available for deployed masters.

Combination OptionFlags Use
V1, CRC off 0x04 legacy master and compatibility fallback
V1, CRC on 0x00 legacy protocol with payload CRC
V2, CRC off 0x24 recommended new-project baseline
V2, CRC on 0x20 V2 with payload CRC

With CRC off, incoming payload CRC is not checked and the reported value is 0. When CRC is enabled, both ends must use the same algorithm and coverage. EtherCAT FCS, CAN CRC, and PDO payload CRC are separate mechanisms.

3.5 Profiles, budgets, and results

Requirement Adjust Rule
Variable DLC, least overhead profile 0 recommended default
Fixed records or timing information corresponding profile both ends use the same codec
Frames per cycle RX/TX budget estimate from wire time, then measure
Confirm transmission and completion CAN peer response plus PDO/SDO diagnostics bit0 is reserved; no per-frame result packet
Four-byte alignment ALIGN4 padding changes capacity
Keep latest on overload drop-oldest suitable for feedback, not command queues

Always write fields, write Apply last, read Apply Status, read active values, then enter OP. Do not Apply repeatedly from the real-time loop.

4. Select cycle mode and load

4.1 Select by goal

Mode Best fit Direction behavior Key setting
SM 250 µs high-rate two-way exchange SM2 and SM3 in the cycle frame run every 250 µs without missed calls
DC 1 ms / Sync0 900 µs deterministic multi-slave system logical read/write separation 1 ms cycle, 900 µs phase, collect in a later cycle
DC 800 µs receive cycle throughput baseline time-separated transfer measure stable round trips per millisecond
SM: 250 µs subcycle SM2 write + SM3 readsubcycle 0 SM2 write + SM3 readsubcycle 1 SM2 write + SM3 readsubcycle 2 SM2 write + SM3 readsubcycle 3 DC: 1 ms, Sync0 = 900 µs process data, CAN service, and prepare next image Sync0 collect 900 µsnext cycle

Figure 4. SM exchanges both directions each subcycle; DC assigns a deterministic processing window.

4.2 Measure after estimating

CAN FD frame time includes arbitration, control, stuffing, CRC, ACK, and intermission. Do not calculate it as 8 bytes ÷ 5 Mbit/s. Two frames per channel in each 250 µs subcycle means eight frames per channel per millisecond, plus MCAN service, PDO parsing and packing, PDI access, multi-slave frame length, master jitter, peer latency, and retries.

Dimension Minimum test matrix
Slaves one; slaves 1+2; all three
Channels 1, 2, and 4 simultaneously
PDO actual 128/256/272/384/400-byte combinations
Protocol V2/no-CRC primary; V1/no-CRC and CRC-on regressions
Load rated; 120% overload; return to rated
Duration 10-minute smoke; 1-hour stability; field target
Evidence WKC, counts, loss, order, duplicates, bus-off, recovery time

4.3 Overload may drop frames but must recover

A passing overload test proves that the configured drop policy is visible, queues do not become permanently blocked, bus-off is recoverable, rated throughput returns within the limit, CAN overload does not leave EtherCAT WKC abnormal, and repeated overload/recovery runs behave consistently.

5. Integrate with IgH

5.1 Keep protocol details behind APIs

Layer Responsibility Typical API
Capability firmware and feature discovery capability decode
Configuration protocol, size, channel, CAN timing igh_mcan_port_select_pdo_protocol()
Codec V1/V2 header, sequence, layout, CRC codec API
Cycle domain receive/process/queue/send demo cycle API
Application CAN ID, flags, payload frame enqueue/dequeue

!!! important "Do not hand-code two layouts" One application may support V1 and V2, but a single codec should build the active format. Read capabilities and use the protocol-selection API; a version string beginning with 2 is not sufficient by itself.

5.2 Initialization and cyclic order

text
request master → create domain → create slave configs
→ read/validate capabilities → select V2 + CRC off (or V1 fallback)
→ configure PDO and MCAN → register PDO entries → configure SM/DC
→ activate master → start cyclic loop
text
receive → domain_process → read TxPDO → build/write RxPDO
        → domain_queue → sync clocks if DC → send

Do not perform SDO Apply, dynamic allocation, heavy logging, or blocking waits in the real-time loop.

5.3 SM, DC, and test peers

Use absolute-time scheduling for the 250 µs SM loop and monitor application latency, WKC, and missed cycles. In DC mode, update application time every cycle, synchronize reference/slave clocks at a fixed cadence, and keep the 1 ms period aligned with the 900 µs Sync0 phase.

  • First bring-up: one slave, SM, V2/no-CRC, CAN0.
  • Throughput: slaves 1+2 self-loop, then add slave 0 and UCAN.
  • Final system: validate the actual PDO combination and host load.
  • Use the project Rust UCAN driver as the default test peer; SocketCAN is not the reference baseline.

5.4 Coexistence and records

When CiA402 and ECAN-Lite share a loop, record each domain WKC separately, prevent CAN logging or replies from blocking the motion state machine, keep layouts fixed in OP, and test combined frame length, CPU use, and worst-case execution time.

Record firmware/build/capabilities, ESI and SM sizes, demo parameters, CPU affinity, scheduler, NIC/master version, peer-driver version, duration, and complete statistics for every reproducible run.

6. Troubleshoot, upgrade, and maintain

6.1 Separate fault layers first

Expected CAN data is missing WKC / EtherCAT faultcheck SM, PDO size, cycle Apply Status is nonzerocheck values, order, support EtherCAT is healthycontinue with CAN/content Retest after WKC repairdo not change CAN first Enter OP after status 0record failed field/code Direction/sequence/layoutthen wiring and bus-off

Figure 5. Separate WKC, configuration status, and CAN content before changing parameters.

6.2 Common symptoms

Symptom Check first Common cause
Cannot reach OP WKC, AL state, SM sizes ESI/domain/Active PDO mismatch
0x8001:02=0x04 timing and Message RAM unrealizable timing, conflict, wrong Apply order
WKC healthy, CAN silent RxPDO, sequence, layout_id wrong direction, unchanged sequence, V1/V2 mismatch
CAN transmitted, application has no response peer reply, channel state and SDO counters distinguish local queueing, bus transmission and peer processing
Loss at high rate budgets, queues, bus load wire limit, missed host cycle, PDI/packing overrun
No recovery after overload bus-off and ownership state auto-recovery disabled or queue state stuck
V2 parsed as V1 capabilities and flags firmware upgraded but master did not select V2
CRC errors flags and algorithm on both ends one side enabled or different coverage

6.3 WKC isolation

  1. Remove CAN pressure and keep a fixed PDO image.
  2. Compare master domain, SM2/SM3, and Active PDO bytes.
  3. Reproduce with one slave, 256-byte PDO, and a slower cycle.
  4. Confirm every receive/process/queue/send step runs each cycle.
  5. Add slaves, target period, and load one at a time.
  6. Investigate CAN loss only after WKC is stable.

Preparing the next image from the previous cycle does not eliminate ESC/PDI ownership, access-window, application-cycle, or worst-case execution constraints.

6.4 FoE upgrade

  1. Record old firmware, product, and configuration; use a packaged application image matching the bootloader and MCU family.
  2. Stop the cyclic application and enter the allowed upgrade state.
  3. Upgrade each slave separately and save complete logs.
  4. Power-cycle and read version, build, and capabilities.
  5. Run a V1/no-CRC compatibility smoke test, then explicitly enable V2/no-CRC.
  6. Regress PDO sizes, CRC on/off, single/multiple channels, SM/DC, and overload recovery.

6.5 Acceptance evidence

Category Record
Identity product code, serial, firmware/build, ESI
Configuration selector, Active bytes, protocol, CRC, channels, timing
EtherCAT period, DC phase, WKC, AL state, master/NIC
CAN bitrates, sample points, load, counts, errors, bus-off
Stability duration, loss/duplicates/order, maximum recovery time
Reproduction demo commit, config, commands, logs, captures

Appendix A: Minimal quick card

text
capability passes → 0x8010/0x8011:04 = 0x01
                  → 0x8010/0x8011:07 = 0x24
                  → Apply each; status must be 0
                  → CAN0 = 1M + 5M; Apply status must be 0
                  → write V2 first frame; advance both sequence fields

A.2 Legacy fallback

text
V1 + CRC off: OptionFlags = 0x04
Keep the legacy PDO size and codec
Do not auto-select V2 merely because firmware is 2.x

A.3 First frame

text
24 00 01 00 01 00 0C 00 00 00 A1 04 00 00 00 00
40 03 23 01 11 22 33 44 55 66 77 88

Appendix B: Key-object quick reference

Object Purpose When
0xF000:05/:09/:16 firmware/V2/features first initialization reads
0x8010 TxPDO profile module → master
0x8011 RxPDO profile master → module
0x8001..0x8008 MCAN0..7 configuration Apply per channel
:01 Apply command write last
:02 Apply Status read after every Apply
:03 PDO size selector five coarse bits + three fine bits
:04 channel mask allowed channels
:07 OptionFlags V1/V2, CRC, results, alignment

Search the Technical Reference global object index for complete subindices, types, ranges, error codes, and capability bits.

Appendix C: Compatibility matrix

Device/master V1 V2 16B fine size Strategy
Legacy firmware + legacy IgH yes no no keep 0x04
2.x firmware + legacy IgH yes not used low five bits remain compatible do not auto-switch
2.x firmware + current IgH yes yes when capability allows use 0x24 for new projects
Third-party master codec-dependent V2 implementation required synchronize ESI/SM prove one frame first

Appendix D: Document boundary and revision

This Application Manual answers how to configure and run the product quickly. The Technical Reference defines every field, valid value, and error. V1/V2 differences are concentrated in the PDO header and its selection; the rest of the product remains one functional system.

Document version Main change
V3.0 task-oriented structure; V2/no-CRC recommended for new projects; first-frame, cycle, overload, and compatibility workflows

Technical Reference

ECAN-Lite Technical Reference V3.0

This manual completely defines the product architecture, EtherCAT/CAN FD protocol, PDO byte layout, frame encoding, object dictionary, defaults, and diagnostics. For wiring, master configuration, IgH examples, FoE update, operation, troubleshooting, and acceptance, see the ECAN-Lite Application Manual V3.0.

Contents

[TOC]


1. Product positioning

ECAN-Lite is an EtherCAT-to-CAN/CAN FD real-time gateway slave. The master issues transmit requests through RxPDO and reads received frames, transmit results, and channel status through TxPDO.

Interface Scope defined by this manual
EtherCAT SM2/SM3, PDO mapping, CoE SDO, and FoE capability
CAN/CAN FD Channel configuration, bit timing, frame encoding, status, and diagnostics
Master software Continuous process image, field encoding, boundaries, and compatibility rules

Periodic data uses a fixed header followed by a continuous frame stream:

text
VersionedFixedPdoFrameHeader + FramePacketStream[ActivePDOBytes - HeaderBytes]

The fixed header self-describes its format and length through ver_ihl. CAN/CAN FD packets follow in the continuous frame area. Chapters 4 and 5 define PDO sizing, header formats, and capabilities.

!!! important "Normative language" Must identifies a protocol requirement, should identifies a recommended implementation, and may identifies an optional capability. Object definitions, bit fields, defaults, and limits are normative here; operational procedures are defined in the Application Manual.


2. Core features

Item Description
EtherCAT 2-port slave, 100Mbps, CoE, FoE
CAN channel 4 independent MCAN, 3 bits are reserved for the control word CH field, which can express 0..7
CAN Protocol CAN 2.0A / CAN 2.0B / CAN FD ISO
CAN data length Classic CAN 0..8B, CAN FD 0..64B, dynamic encoding by DLC
PDO size TxPDO/RxPDO are configured independently as 128B*base + 16B*fine; default encoding 0x02 is 256B; legacy integers 1..10 remain compatible
PDO upper limit 1392B/direction; actual frame capacity equals total PDO length minus fixed-header length; see Chapters 4 and 5
PDO structure Self-describing fixed header plus a continuous frame stream; see Chapter 5
Multi-channel multiplexing Multiple CAN channels share the same direction frame area and share the remaining space according to the budget strategy
Timestamp Optional per frame, supports off/delta16, delta32/full64 as capability extension
Reservation to send RxPDO TSF_FULL64 format=1 can reserve the CAN frame to the specified phase in the next SYNC0 cycle
TDC CAN FD is enabled by default; data segments of 5M and above are forced to be enabled; Offset/Filter defaults to 0 for automatic calculation, and non-0 supports manual override
Diagnosis PDO quick status + SDO detailed status; PDO parsing errors and overflows have count records
Configuration SDO online configuration, supports parameter persistence, device maintenance, FoE

3. Direction definition and system architecture

Name EtherCAT direction Master perspective Device semantics
TxPDO / Input PDO Slave -> Master Master reads input process data Upload CAN/CAN FD receive frames and compressed channel status
RxPDO / Output PDO Master -> Slave Master writes output process data Issues CAN/CAN FD send request

TxPDO and RxPDO are independent directions. PDO size, channel mask, encapsulation profile, budget policy, and direction options can be selected separately.

Channel enable and PDO length do not replace each other. Disabling a CAN channel changes only the active channel mask and scheduling budget; it does not change SM2/SM3 length.

It is useful to read the protocol in three layers:

Layer What the master does Manual Entry
EtherCAT mapping layer Select the first N 128B PDO chunks to obtain continuous RxPDO/TxPDO buffers Technical Reference Chapter 4
PDO frame-stream layer Read/write the versioned header at offset 0 and CAN_FRAME packets from HeaderBytes=4*(ver_ihl&0x0F) Technical Reference Chapters 5 through 11
Configuration and diagnostics layer Configure PDO profiles and MCAN channels, then read status through SDO Chapter 12

For first traffic, follow Application Manual Chapter 1. A custom PDO codec must implement Chapters 4 through 11 of this manual.

!!! warning "Direction mistakes can fail silently" RxPDO/SM2 is written by the master and read by the slave. TxPDO/SM3 is written by the slave and read by the master. Process-image registration, buffer names, and send/receive APIs must preserve this definition.

3.1 Document markup description

The following tables in this article use the following notation:

Mark Meaning
RO Read Only, read only. The master can only read via SDO, writes are invalid or rejected.
RW Read Write, read and write. The master can write configuration via SDO and can also read echo or current values.
WO Write Only, write only command. The master writes to trigger the action, and the read value is not used as a basis for status.
M2S Master to Slave, master to slave. Commonly seen in RxPDO/SM2 Output or configuration SDO writes.
S2M Slave to Master, slave to master. Commonly seen in TxPDO/SM3 Input or Status/Capability SDO reads.
CFG Configuration or command path, usually done through CoE SDO, is not part of the periodic PDO data flow.

Access in the PDO table refers to the master's access method for process data: RxPDO/SM2 is written by the master and read by the slave; TxPDO/SM3 is written by the slave and read by the master.


3.2 System architecture

text
EtherCAT Master
  |
  |  SM2 RxPDO: Fixed Header + FramePacketStream
  |  SM3 TxPDO: Fixed Header + FramePacketStream
  v
+------------------------------+
| ECAN-Lite EtherCAT Slave     |
|  SSC + CoE + FoE             |
|  Dynamic PDO Parser/Packer   |
|  Byte Budget Scheduler       |
+-----+-----+-----+-----+------+
      |     |     |     |
     CAN0  CAN1  CAN2  CAN3

4. EtherCAT PDO mapping and size

4.1 128B Chunk Mapping

PDO mapping is assembled from 128B chunks. Each chunk is split into 8 STRING(16) mapping units in the object dictionary to avoid the bit-length limit of a PDO mapping entry.

text
RxPDO chunk maps: 0x1600..0x1617
TxPDO chunk maps: 0x1A00..0x1A17
SM2 assignment: 0x1C12 selects the first N RxPDO chunks
SM3 assignment: 0x1C13 selects the first N TxPDO chunks

A chunk is an EtherCAT mapping and length-selection unit, not a protocol parsing layer. The base area uses complete 128B chunks. If fine sizing is requested, one tail mapping is appended and only its first fine 16B entries are enabled. FramePacketStream may span those boundaries; the receiver parses only the valid frame area described by payload_len.

!!! danger "PDO assignment must match the active length" The effective bytes mapped by 0x1C12/0x1C13 must equal ActivePDOBytes in the corresponding direction. A mismatch rejects the profile and may prevent OP. Never change the PDO length while the slave is in OP.

4.1.1 How the master assembles multiple chunks

On the master side, do not treat 0x1600..0x1617 / 0x1A00..0x1A17 as multiple independent protocols. They are only 128B mapping blocks used to satisfy EtherCAT PDO mapping limits. The application should combine the first N chunks in the same direction into one continuous byte buffer in assignment order:

text
RxPDO/SM2 output buffer:
  chunk0[128B] + chunk1[128B] + ... + chunkN-1[128B]
  "..." means the omitted chunks continue in the same order, 128B each

TxPDO/SM3 input buffer:
  chunk0[128B] + chunk1[128B] + ... + chunkN-1[128B]
  "..." means the omitted chunks continue in the same order, 128B each

Each 128B chunk contains 8 STRING(16) mapping units. If the master exposes them as separate variables, copy them in the following order:

text
for chunk = 0 .. N-1:
  for unit = 0 .. 7:
    dst_offset = chunk * 128 + unit * 16
    copy 16 bytes to/from process image entry

The following table expands the 8 mapping units of chunk=0 and shows the first unit of chunk=1. All later chunks follow the formula below.

Direction Data flow Master access Chunk Unit PDO map Data object Buffer offset
RxPDO / SM2 Output M2S Write 0 0 0x1600 0x7000 0
RxPDO / SM2 Output M2S Write 0 1 0x1600 0x7010 16
RxPDO / SM2 Output M2S Write 0 2 0x1600 0x7020 32
RxPDO / SM2 Output M2S Write 0 3 0x1600 0x7030 48
RxPDO / SM2 Output M2S Write 0 4 0x1600 0x7040 64
RxPDO / SM2 Output M2S Write 0 5 0x1600 0x7050 80
RxPDO / SM2 Output M2S Write 0 6 0x1600 0x7060 96
RxPDO / SM2 Output M2S Write 0 7 0x1600 0x7070 112
RxPDO / SM2 Output M2S Write 1 0 0x1601 0x7080 128
TxPDO / SM3 Input S2M Read 0 0 0x1A00 0x6000 0
TxPDO / SM3 Input S2M Read 0 1 0x1A00 0x6010 16
TxPDO / SM3 Input S2M Read 0 2 0x1A00 0x6020 32
TxPDO / SM3 Input S2M Read 0 3 0x1A00 0x6030 48
TxPDO / SM3 Input S2M Read 0 4 0x1A00 0x6040 64
TxPDO / SM3 Input S2M Read 0 5 0x1A00 0x6050 80
TxPDO / SM3 Input S2M Read 0 6 0x1A00 0x6060 96
TxPDO / SM3 Input S2M Read 0 7 0x1A00 0x6070 112
TxPDO / SM3 Input S2M Read 1 0 0x1A01 0x6080 128

Complete mapping rules:

Direction Data flow Master access Chunk c Unit u PDO map PDO map subindex Data object Buffer offset
RxPDO / SM2 Output M2S Write 0..N-1 0..7 0x1600 + c u + 1 0x7000 + c * 0x80 + u * 0x10 c * 128 + u * 16
TxPDO / SM3 Input S2M Read 0..N-1 0..7 0x1A00 + c u + 1 0x6000 + c * 0x80 + u * 0x10 c * 128 + u * 16

General formula:

text
unit_index = chunk * 8 + unit
offset     = unit_index * 16

RxPDO data object index = 0x7000 + unit_index * 0x10
TxPDO data object index = 0x6000 + unit_index * 0x10

So chunk=1 is not only unit=0. For example, RxPDO 0x1601 contains eight 16B units: 0x7080, 0x7090, ..., 0x70F0. TxPDO 0x1A01 contains 0x6080, 0x6090, ..., 0x60F0. In both examples, ... only omits the middle objects that increase by 0x10.

For example, when N=3, the continuous buffer in each direction is 384B:

text
chunk0: offset   0..127
chunk1: offset 128..255
chunk2: offset 256..383

The versioned header is located at offset 0 of the continuous buffer. The frame area starts at HeaderBytes=4*(ver_ihl&0x0F) and ends at ActivePDOBytes-1. The factory default is V1 (24B on HPM5E and 32B on HPM6E); explicitly selected V2 is 16B/20B. CAN_FRAME packets may cross a chunk or tail boundary. The master must use payload_len, the applied profile and the optional CRC field to determine the valid area.

In TwinCAT, CODESYS, or a custom master, if the tool can map PDO data to a continuous byte array, create ARRAY[0..ActivePDOBytes-1] OF BYTE. If the tool exposes each STRING(16) as a separate variable, assemble and split the data in the application layer using the offset formula above.

4.2 Relationship between total PDO length and header overhead

Total PDO length and fixed-header version are independent configuration dimensions, but together they determine the space available for CAN frames:

text
SIZE (0x8010/0x8011:03) --> ActivePDOBytes (total PDO length)
VERSION (0x8010/0x8011:07 bit5) --> HeaderBytes (header length)

ActivePDOBytes - HeaderBytes --> ActiveFrameAreaBytes (usable area)

ASSIGN (0x1C12/0x1C13) == ActivePDOBytes
IHL (ver_ihl.IHL) --> actual HeaderBytes at runtime

!!! important "Length and header version are independent" Changing the header version does not change SM2/SM3 length or require rebuilding the PDO assignment. It changes only the frame-stream offset and usable bytes. Changing total PDO length does not select another header version, but it does require matching EtherCAT mapping changes.

4.2.1 Size field: backward-compatible 5+3 encoding

text
base = PdoSizeEncoding & 0x1F
fine = PdoSizeEncoding >> 5
ActivePDOBytes = 128 * base + 16 * fine
ECAN-Lite: base=1..10, fine=0..7

The requested values at 0x8010/0x8011:03 both default to 0x02, or 256B. The low 5 bits select complete 128B base chunks. When capability-gated, the high 3 bits append 0..7 tail units of 16B. Legacy masters writing 1..10 keep a zero high field and therefore retain the original 128B steps.

Use a nonzero fine field only when 0xF000:16 bit7 FINE_SIZE_16=1. When fine>0, 0x1C12/0x1C13 must assign the first base complete chunks plus a tail mapping whose first fine 16B entries are enabled. This read-only capability is not a configuration switch.

4.2.2 Actual frame area for the same total PDO length

The table separates total process-image length from protocol overhead. Each frame-area value is ActivePDOBytes-HeaderBytes:

Size encoding Active PDO 5E default V1: header/frame 5E explicit V2: header/frame 6E default V1: header/frame 6E explicit V2: header/frame
0x01 128B 24B / 104B 16B / 112B 32B / 96B 20B / 108B
0x21 144B 24B / 120B 16B / 128B 32B / 112B 20B / 124B
0x02 256B 24B / 232B 16B / 240B 32B / 224B 20B / 236B
0x22 272B 24B / 248B 16B / 256B 32B / 240B 20B / 252B
0x03 384B 24B / 360B 16B / 368B 32B / 352B 20B / 364B
0x08 1024B 24B / 1000B 16B / 1008B 32B / 992B 20B / 1004B
0xEA 1392B 24B / 1368B 16B / 1376B 32B / 1360B 20B / 1372B

V2 gains frame space by compressing the fixed header: 8B per PDO image on 5E and 12B on 6E. The total EtherCAT PDO byte count does not change. Chapter 5 lists the removed fields and reduced status precision; do not switch versions only to gain a few bytes without confirming master-codec support.

4.2.3 Effect of each configuration change

Target change :03 size field :07 OptionFlags 0x1C12/0x1C13 and SM length Master PDO codec
Keep default 256B V1, CRC disabled 0x02 0x04 First two 128B chunks Parse frame stream at 24B on 5E or 32B on 6E
Change total PDO length only Target 5+3 encoding Keep 0x04 Rebuild to exactly ActivePDOBytes Header layout unchanged; capacity and tail mapping change
Switch same length from V1 to V2 Keep unchanged 0x04 -> 0x24 Keep unchanged Use ver_ihl and V2 fields/new frame offset
Return same length from V2 to V1 Keep unchanged 0x24 -> 0x04 Keep unchanged Restore V1 fields and header length; legacy IgH uses this path
Change size and version together Target encoding Explicitly write 0x24 Rebuild mapping Update buffer length, IHL, field layout, and capacity checks
Enable payload CRC only Keep unchanged V1=0x00; V2=0x20 Keep unchanged Header length unchanged; calculate and verify CRC16

4.2.4 Capability checks and active readback

Check the following objects before and after configuration; a successful requested-SDO write alone is not sufficient:

Search key Purpose Decision
0xF000:05/06 Firmware major/minor Enable V2 and 16B fine sizing only on the matching 2.x firmware
0xF000:09 PDO header version mask Must advertise the requested header version
0xF000:16 bit7 FINE_SIZE_16 Allows the high 3 size bits to represent 16B tail units
0xF000:16 bit13 HEADER_V2 Allows explicit OptionFlags.bit5 selection
0x8010/0x8011:09 Active PDO bytes Must equal the actual process-image mapping length
0x8010/0x8011:10 Active frame-area bytes Must equal ActivePDOBytes minus actual HeaderBytes
0x8010/0x8011:11 Active layout CRC Master and slave layout contracts must agree
0x8010/0x8011:12 Active profile word Echoes the effective base, fine, and OptionFlags combination

Recommended sequence:

  1. Read capabilities.
  2. Select total length and construct the mapping.
  3. Select the header version and apply.
  4. Read :02 and :09..12.
  5. In OP, calculate HeaderBytes from ver_ihl in every image.

!!! caution "Capacity is not real-time performance" A larger PDO increases process-image capacity, EtherCAT frame length, and PDI copy work. Validate WKC, cycle jitter, and drop counters with the target cycle, slave count, and CAN load.

4.3 ESI and PDO mapping requirements

Use the ESI file supplied with the product release and do not modify the device SII/EEPROM. The actual PDO length used by the master is determined by the first N chunks selected by the 0x1C12/0x1C13 assignment and must match the active profile at 0x8010/0x8011. If the ESI, device firmware, and master configuration versions do not match, restore the matching release package and contact technical support.


5. PDO fixed header

TxPDO and RxPDO use the same version rules. ver_ihl stores the version in the high nibble and the number of 4B words in the low nibble. OptionFlags.bit5=HEADER_V2 selects V2; clearing it selects V1. The factory, reset, and current IgH default is OptionFlags=0x04 (V1 plus NO_CRC16); the master must set bit5 explicitly for V2. HPM5E uses 0x24/16B for V2 and 0x16/24B for V1; HPM6E uses 0x25/20B and 0x18/32B.

The first 12 bytes are common: ver_ihl, flags, seq_begin, seq_end, payload_len, payload_crc16, and layout_id. V1 then carries channel_mask, frame_count, overflow_sat, crc_alg, and 16-bit channel status. V2 starts 8-bit per-channel status at offset 12; the removed fields are derived from the Active Profile or SDO diagnostics.

5.1 Version selection, byte layout, and compatibility boundary

ver_ihl is the final runtime authority: its high nibble is the header version and its low nibble is the number of 4B words. OptionFlags requests a version; ver_ihl confirms the version and length actually used by the current PDO image. Firmware 2.x indicates V2 capability, not a V2 default.

text
Common first 12 bytes
offset  0       1       2..3      4..5      6..7        8..9       10..11
       +-------+-------+----------+----------+------------+-----------+----------+
       |ver_ihl| flags |seq_begin | seq_end  |payload_len |payload_crc| layout_id|
       +-------+-------+----------+----------+------------+-----------+----------+

HPM5E / 4 channels
V1  +12: channel_mask/frame_count/overflow_sat/crc_alg +16: status[4]x2B -> payload@24
V2  +12: status[4]x1B                                           -> payload@16

HPM6E / 8 channels
V1  +12: channel_mask/frame_count/overflow_sat/crc_alg +16: status[8]x2B -> payload@32
V2  +12: status[8]x1B                                           -> payload@20
Comparison V1, compatibility default V2, explicit selection Master migration requirement
Selection OptionFlags.bit5=0 OptionFlags.bit5=1 Check 0xF000:09 and 0xF000:16 bit13 first
Common value without payload CRC 0x04 0x24 Preserve unrelated option bits with read-modify-write
Common value with payload CRC 0x00 0x20 CRC selection does not change HeaderBytes for that version
Common fields offsets 0..11 offsets 0..11 Double sequence, length, CRC field, and layout ID are shared
Channel status 16 bits per channel 8 bits per channel V2 does not retain every V1 status bit
In-header diagnostics channel_mask/frame_count/overflow_sat/crc_alg Omitted Derive from Active Profile, stream traversal, header flag, and SDO diagnostics
5E HeaderBytes 24B 16B V2 adds 8B frame capacity at the same total PDO length
6E HeaderBytes 32B 20B V2 adds 12B frame capacity at the same total PDO length
EtherCAT PDO mapping Determined by ActivePDOBytes Determined by ActivePDOBytes Mapping and SM length stay unchanged when only version changes
Frame-stream start 4*(ver_ihl&0x0F) 4*(ver_ihl&0x0F) Never hard-code 24/32 or 16/20 as the only valid offset

!!! danger "Never infer the header from firmware or PDO size" Firmware 2.x advertises V2 capability; it does not mean the current image uses V2. :03 selects total length, :07 bit5 requests the version, and active readback confirms the configuration. The actual image format and length must come from ver_ihl.

The fixed header is not an SDO object and does not have the RO/RW attribute; its master access direction follows the PDO direction: the RxPDO header is written by the master and parsed by the slave, and the TxPDO header is written by the slave and parsed by the master.

Common fields in both versions:

Offset Size Field Description
0 1 ver_ihl Version in the high nibble and 4B-word count in the low nibble
1 1 header_flags overflow, error, reserved bit, status change, sequence number wraparound
2 2 seq_begin Release starting sequence number
4 2 seq_end Release completion sequence number, must be equal to seq_begin to be valid
6 2 payload_len The number of valid bytes in the frame encapsulation area of this cycle
8 2 payload_crc16 Frame encapsulation area CRC-16/CCITT-FALSE when enabled; 0 by default
10 2 layout_id The current PDO layout ID, changes when the layout or profile changes

V1 carries channel_mask, frame_count, overflow_sat, and crc_alg at offsets 12..15, followed by 16-bit status per channel. V2 omits those four bytes and starts 8-bit status per channel at offset 12. In V2 the channel mask and CRC policy come from the applied Active Profile, frame count is derived while traversing the stream, and overflow is reported by header_flags.bit5.

Publishing rules: The sender first constructs the complete frame area and header, then writes seq_end = seq_begin last. The receiver parses only when the sequence and length are valid and the CRC field matches the applied direction option. Factory-default V1+NO_CRC16 requires payload_crc16=0; clearing NO_CRC16 enables CRC-16/CCITT-FALSE without changing the selected header version or length. This prevents either side from consuming a half-updated PDO.

5.2 Key field explanation and reception judgment

seq_begin, seq_end, and layout_id are common running fields rather than separately configured SDO parameters. V1 additionally carries crc_alg and overflow_sat; V2 derives the CRC mode from Active Profile and replaces overflow count with the header overflow flag.

Field How the sender fills in How the receiver determines
seq_begin The PDO image is incremented every time it is released, 16bit wraps When it is not equal to seq_end, it means that it is being updated or half a packet has been read, and the data in this cycle should be discarded
seq_end After all payload, CRC and header fields are written, they are finally written with the same value as seq_begin Only seq_begin == seq_end is allowed to continue to check the CRC and parse the payload
layout_id 16bit layout short identifier generated based on active PDO profile If there is a sudden change during continuous operation, it means that the PDO size, channel mask, profile or option flags have changed, and you need to re-analyse according to the active profile
CRC mode Default NO_CRC16 writes payload_crc16=0; clearing bit2 calculates CCITT-FALSE V1 checks crc_alg; V2 derives the policy from Active Profile
overflow V1 saturates overflow_sat; V2 sets header_flags.bit5 Either indication or STREAM_TRUNCATED=1 means that the cycle may be incomplete; use SDO counters for detail

Notes:

  • layout_id is a short identifier in the PDO header. It lets the master quickly detect whether the current PDO layout has changed. For full configuration readback, read 0x8010/0x8011:12 Active profile word and :11 Active layout CRC.
  • If overflow_set appears in the document or debugger, it corresponds to this header field overflow_sat: it is not a switch, but "the saturation count after overflow/truncation in this cycle."
  • When enabled, payload_crc16 covers PDO offset [HeaderBytes, HeaderBytes + payload_len) and never includes the versioned header. The factory default disables this CRC and requires the field to be 0.
  • payload_len is the actual number of valid frame encapsulation bytes in this cycle, not the total length of PDO.

!!! caution "Clear unused space and alignment padding" Unused frame-area bytes shall be zero. With ALIGN_4_ENABLE, padding bytes shall also be zero and shall be included in payload_len; the receiver shall advance by the aligned packet length.

Recommended judgment sequence for the receiving end:

text
1. Read fixed header A.
2. Check seq_begin == seq_end; if not equal, ignore the PDO of this cycle.
3. Derive the CRC policy from the applied profile.
   Under factory-default NO_CRC16, require payload_crc16 == 0.
   With CRC enabled, V1 also reports crc_alg == 1; V2 omits that field.
4. Check payload_len <= ActiveFrameAreaBytes.
5. When enabled, calculate CRC-16/CCITT-FALSE for payload_len bytes
   starting at HeaderBytes.
6. Read fixed header B again. If the key fields of A and B differ,
   the PDO changed during the read; ignore this cycle.
7. Parse CAN_FRAME packets; reject all reserved packet kinds.
8. If overflow_sat != 0 or STREAM_TRUNCATED=1, mark this cycle as incomplete data.

Configuration example: When the master wants both TxPDO/RxPDO to use the default N=2, CAN0..CAN3, profile 0, Balanced, V2 header and no payload CRC:

text
0x1C12 / 0x1C13: Select the first 2 128B chunks
0x8010:03 = 2     TxPDO PDO size multiplier
0x8010:04 = 0x0F  TxPDO channel mask
0x8010:05 = 0     TxPDO profile 0
0x8010:06 = 0     TxPDO Balanced budget
0x8010:07 = 0x24  TxPDO option flags: HEADER_V2 + NO_CRC16
0x8010:01 = 1     apply TxPDO profile

0x8011:03 = 2     RxPDO PDO size multiplier
0x8011:04 = 0x0F  RxPDO channel mask
0x8011:05 = 0     RxPDO profile 0
0x8011:06 = 0     RxPDO Balanced budget
0x8011:07 = 0x24  RxPDO option flags: HEADER_V2 + NO_CRC16
0x8011:01 = 1     apply RxPDO profile

Read 0x8010/0x8011:09..12 after apply. If Active PDO bytes, Active frame area bytes, Active layout CRC, Active profile word are as expected, layout_id in subsequent PDO headers should remain stable.

header_flags

Bit Name Description
0 STREAM_TRUNCATED The frame area of this cycle is insufficient and there are frames that are not packed
1 ANY_CHANNEL_ERROR Any channel is in error, BusOff, or congested
2 Reserved Must be 0; a set bit is a protocol error
3 STATUS_CHANGED Channel status changes compared to the previous cycle
4 SEQ_WRAP seq_begin Wraparound this cycle
5 OVERFLOW_SAT_VALID overflow_sat valid
6 reserved The sender writes 0 and the receiver ignores
7 reserved The sender writes 0 and the receiver ignores

6. Channel status word

Each channel status is compressed to 16 bits and placed in the PDO header. PDO only carries fast status, detailed reasons are read through SDO.

Bits Field Description
0..2 state 0=disabled,1=init,2=run,3=busoff,4=error,5=listen
3 fd_enabled Current channel enables CAN FD
4 warn error warning / error passive / bus degraded summary
5 bus_off BusOff
6 rx_pressure RX FIFO nearly full or overflow
7 tx_pressure TX FIFO/Queue congestion
8 detail_pending New detail snapshot available in SDO
9 counter_sat pending count saturated
10..12 rx_pending_sat RX pending 0..7 saturated
13..15 tx_pending_sat TX pending 0..7 saturated

When warn/bus_off/rx_pressure/tx_pressure/detail_pending is set, the master should read 0x9000..0x9003 to obtain a detailed register and count snapshot. If the error comes from the PDO encapsulation layer, LastPDOError / PDOErrorCounter / PDOOverflowCounter of 0x8010/0x8011 should be read.


7. Frame encapsulation package

Each frame encapsulation packet starts with a 2B control word, which determines the length of subsequent CAN ID, timestamp and data.

The frame encapsulation packet follows the PDO direction: CAN_FRAME in RxPDO is the master's request for the slave to send to the CAN bus; CAN_FRAME in TxPDO is received by the slave from the CAN bus and uploaded to the master.

Unless otherwise specified, multi-byte values in PDO fixed headers, frame packets and SDO use little-endian. On the master side, do not cast unaligned byte buffers directly to host structures. Read and write fields explicitly from the byte stream.

text
Byte0:
  bit0..2 CH CAN channel id, currently using 0..3
  bit3..6 DLC original CAN DLC, 0..15
  bit7     IDE      0=11bit standard id,1=29bit extended id

Byte1:
  bit0     FDF      0=classic CAN,1=CAN FD
  bit1     BRS      CAN FD bit rate switch
  bit2 X When FDF=0, it is RTR, when FDF=1, it is ESI
  bit3..4  TSF      0=no timestamp,1=delta16,2=delta32,3=full64
  bit5..6  KIND     0=CAN_FRAME, 1..3=reserved
  bit7     D64      0=data length by DLC,1=fixed 64B data window

The current protocol only accepts KIND=0 CAN_FRAME. KIND=1..3 are reserved and must be rejected by the receiver.

7.1 CAN_FRAME format

text
Standard ID:
  Ctrl[2] + StdIdField[2] + Timestamp[0/2/4/8] + Data[0..64] + Padding

Extended ID:
  Ctrl[2] + ExtIdField[4] + Timestamp[0/2/4/8] + Data[0..64] + Padding

StdIdField:

Bits Description
0..10 11bit STD_ID
11..13 ID_AUX
14 reserved, must be 0
15 reserved, must be 0

ExtIdField

Bits Description
0..28 29bit EXT_ID
29..31 ID_AUX

ID_AUX suggested semantics:

Directions Suggestions
TxPDO/CAN RX 0=FIFO0,1=FIFO1,2=RXBUF,3=HPMS/high priority
RxPDO/CAN TX 0=normal,1=high priority,2=dedicated buffer,3=queue hint

When not used, the sender must write 0 and the receiver ignores it.

7.2 DLC and data length

DLC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Bytes 0 1 2 3 4 5 6 7 8 12 16 20 24 32 48 64

DLC<=8, BRS=0, D64=0 in classic CAN. If FDF=0 && X=1, the frame is RTR, and the data length must be 0. X in CAN FD represents ESI, and there is no RTR.

7.3 Packet length calculation

text
id_bytes = IDE ? 4 : 2
ts_bytes = TSF == 0 ? 0 : (TSF == 1 ? 2 : (TSF == 2 ? 4 : 8))
data_bytes = (FDF == 0 && X == 1) ? 0 :
             (D64 ? 64 : can_dlc_to_len(DLC))
raw_packet_bytes = 2 + id_bytes + ts_bytes + data_bytes
packet_bytes = ALIGN_4_ENABLE ? align4(raw_packet_bytes) : raw_packet_bytes

!!! caution "Capacity is checked at complete-packet boundaries" The unused frame area must be filled with 0. If 4-byte alignment is enabled, padding bytes must be 0 and counted in payload_len. If the remaining area cannot contain a complete packet, the sender shall not write a partial packet.

7.3.1 Enable 4-byte alignment

4-byte alignment is controlled by the direction option ALIGN_4_ENABLE, not the 0xF000 read-only capability object that is turned on directly. 0xF000:15 (0x0F) is used to confirm whether the device claims to support this capability; the real switch is 0x8010/0x8011:07 (0x07) Option flags bit1.

Direction Control object bit1 meaning
TxPDO / SM3 Input / Upload from the slave 0x8010:07 (0x07) Each frame package uploaded by the slave is padded by 4 bytes. When the master parses, it jumps to the next packet according to the aligned length
RxPDO / SM2 Output / Sent by the master 0x8011:07 (0x07) Each frame packet sent by the master must be completed by 4 bytes, and the slave will parse the next packet according to the aligned length

Turn on steps:

text
1. Read 0xF000:15 and confirm that bit1 ALIGN4 option mask is 1.
   You can also read 0xF000:16 and confirm that bit5 ALIGN4 feature is 1.
2. Write 0x8010/0x8011 requested profile in PREOP/SAFEOP.
3. Set 0x8010:07 or 0x8011:07 bit1 of the target direction to 1.
4. Write 0x8010:01 = 1 or 0x8011:01 = 1 apply.
5. Read 0x8010/0x8011:02 and confirm Status = 0.
6. Read 0x8010/0x8011:12 and confirm that OptionFlags bit1
   is set in the Active profile word.

Example: Leave other direction options unchanged and only turn on RxPDO 4-byte alignment:

text
old = read_u8(0x8011:07)
write_u8(0x8011:07, old | 0x02)
write_u8(0x8011:01, 1)
check read_u8(0x8011:02) == 0

Example: Turn off TxPDO 4-byte alignment:

text
old = read_u8(0x8010:07)
write_u8(0x8010:07, old & ~0x02)
write_u8(0x8010:01, 1)
check read_u8(0x8010:02) == 0

After ALIGN4 is enabled, the sender must pad each frame packet to a 4-byte boundary. Padding bytes must be 0 and must be included in the fixed header payload_len. The receiver must also advance by the aligned packet_bytes when parsing the next packet, not by the raw CAN data length alone.

Length example:

CAN_FRAME raw_packet_bytes ALIGN4 post packet_bytes payload_len counts
Standard frame, DLC=8, no timestamp 2 + 2 + 8 = 12 12 12
Extended frame, DLC=8, no timestamp 2 + 4 + 8 = 14 16 16, the last 2B padding must be 0
Standard CAN FD, DLC=15, no timestamp 2 + 2 + 64 = 68 68 68
Extended CAN FD, DLC=15, delta16 2 + 4 + 2 + 64 = 72 72 72

7.4 Timestamp field

TSF determines whether CAN_FRAME carries the timestamp field. In the ordinary TxPDO upload direction, the timestamp is used to describe the time when the slave receives the CAN frame; in the RxPDO delivery direction, TSF_NONE means immediate transmission, and TSF_FULL64 can be multiplexed by the reserved transmission format.

TSF Number of bytes General semantics Description
0 0 No timestamp Default mode, lowest overhead
1 2 delta16 The lower 16 bit difference relative to the reference time within the same PDO cycle, suitable for short-cycle compressed timestamps
2 4 delta32 The lower 32 bit difference relative to the reference time; the capability bit exists but the current default profile is not actively enabled
3 8 full64 64 bit full timestamp, or RxPDO reservation sending extended format

delta16/delta32 within the same Packet sequence in TxPDO is referenced to the first available time base of the cycle. The master should handle wrap as an unsigned difference when used for sorting and diagnostics. If the master does not need timestamps, it is recommended to use profile 0/4 to reduce the overhead of each frame.

RxPDO reservation sending only uses the 8B field of TSF_FULL64, and the required format is as follows:

text
format:u8 = 1
flags:u8 = 0
tag:u16
offset_ns:u32

offset_ns represents the target phase relative to the starting point of the next SYNC0 cycle. This format is not an absolute timestamp; if the target phase has been missed, the firmware will not delay the frame until the next cycle and the master should reserve sufficient phase margin.


8. Encapsulation Profile and direction options

0x8010 controls the TxPDO profile, and 0x8011 controls the RxPDO profile. Currently, the following profiles are supported out of the factory:

Profile Default state Description
0 Enabled by default compact inline, variable DLC, no timestamp
1 Off by default, needs to be configured compact inline, variable DLC, allow delta16 timestamp
4 Off by default, needs to be configured compact inline, D64 allowed, no timestamp
5 Off by default, need to configure compact inline, allow D64, allow delta16 timestamp

Direction options are controlled by 0x8010/0x8011:07 Option flags. 0x8010 acts in the TxPDO/SM3/Input upload direction, and 0x8011 acts in the RxPDO/SM2/Output delivery direction.

8.1 Option flags bit table

Option flags is an 8-bit bitmap. Writing the requested value does not make it active.

!!! caution "Apply and read back" After writing options, issue 0x8010:01=1 or 0x8011:01=1. Use the new layout only when :02=0 and :12 Active profile word matches the request. Reserved bits must remain 0; use read-modify-write for a single-option change.

Bit Mask value Name Applicable direction Default state Description
0 0x01 Reserved TxPDO / RxPDO 0 Must be 0; writing 1 is rejected
1 0x02 ALIGN_4_ENABLE TxPDO / RxPDO Off Each CAN_FRAME packet is padded on a 4-byte boundary; padding must be 0 and counted towards payload_len
2 0x04 NO_CRC16_ENABLE TxPDO / RxPDO On Disable payload CRC16; clear this bit to restore CCITT-FALSE
3 0x08 APP_BYPASS_ENABLE TxPDO / RxPDO Off Bypass the real MCAN application path for data-path diagnostics only; never enable it for motor control or gateway traffic
4 0x10 PAYLOAD_ONLY_ENABLE TxPDO / RxPDO Off Update only the valid payload for a stable layout; the master codec must ignore bytes beyond payload_len
5 0x20 HEADER_V2_ENABLE TxPDO / RxPDO Off Select compact V2; clear for V1 compatibility
6..7 0xC0 reserved reserved Off Masters must write 0

Commonly written values:

Write value Function Typical scenarios
0x00 V1 header with CRC16 Legacy IgH compatibility
0x24 V2 header without CRC16 Explicit selection after capability check
0x01 Invalid reserved value Rejected by 0x8010/0x8011:07
0x02 Turn on 4-byte alignment 0x8010:07 (0x07) or 0x8011:07 (0x07), the customer master hopes that the frame packet is naturally 32bit aligned
0x03 Invalid reserved value bit0 is set, so the write is rejected
0x04 V1 header with CRC16 disabled Factory, reset, and current IgH compatibility default
0x08 Bypass the real MCAN application path Data-path diagnostics only; not for normal gateway traffic
0x10 Update only the valid payload Use when both the master and firmware use the current codec and the layout is stable

Ability judgment:

Ability object Judgment method Description
0xF000:15 PDO option flags mask Check whether the corresponding bit is 1 Indicates that the option flag can be written 0x8010/0x8011:07
0xF000:16 PDO feature flags Check the corresponding feature bit Indicates the device protocol capabilities, such as ALIGN4, scheduled sending, etc.

The current capability mask is based on 0xF000. The master should read the capability object first and then select the profile and option flags.

!!! important "Default CRC policy" Payload CRC16 is disabled by default for both V1 and V2. When disabled, TxPDO payload_crc16 shall be zero and the firmware skips the field in master RxPDO input. To enable CRC protection, the master shall explicitly clear NO_CRC16_ENABLE.

8.2 Default switch state when not configured

If the master does not write the profile-related SDO of 0x8010/0x8011, the default value of requested in the device object dictionary is as follows. Note: 0xF000 means "support capability" and does not mean enabled by default; the actual enabled status is determined by the requested profile of 0x8010/0x8011 and the active readback after apply.

Function Control object Default value Status when not configured Remarks
PDO size multiplier 0x8010/0x8011:03 2 Default request 256B/direction Master site mapping must also select the first 2 chunks, otherwise apply will return mapping reload required
Channel mask 0x8010/0x8011:04 0x0F CAN0..CAN3 default request to enable To close the channel, you need to explicitly change the mask and apply
Encapsulation profile 0x8010/0x8011:05 0 profile 0 on variable DLC, no timestamp
Budget policy 0x8010/0x8011:06 0 Balanced on Reserve the minimum budget for each enabled channel, and the remaining space is shared
Reserved option 0x8010/0x8011:07 bit0 0 Must remain 0 Writing 1 is rejected; use CAN peer response or bus diagnostics to confirm application-level completion
4-byte alignment 0x8010/0x8011:07 bit1 0 Close Supported but not padded by default. After opening, padding is included in payload_len
Disable CRC16 0x8010/0x8011:07 bit2 1 On payload_crc16=0; clear to enable CCITT-FALSE
Header V2 0x8010/0x8011:07 bit5 0 Off Explicit only; 16B on 5E, 20B on 6E
Application-path bypass 0x8010/0x8011:07 bit3 0 Off Data-path diagnostics only; keep disabled for normal gateway traffic
Valid-payload-only update 0x8010/0x8011:07 bit4 0 Off Requires matching payload_len handling in the master codec
delta16 timestamp 0x8010/0x8011:05=1/5 0 Off Select profile 1 or 5 before enabling
D64 data window 0x8010/0x8011:05=4/5 0 Close Select profile 4 or 5 before enabling
RxPDO scheduled transmission RxPDO CAN_FRAME TSF_FULL64 format=1 No ordinary default frame Close The master must actively send frames according to the scheduled format, and it is recommended to confirm 0xF000:16 bit8 first
CAN FD 0x8001..0x8004:15 1 Enable Each MCAN channel is configured according to CAN FD by default; classic CAN needs to write 0 and apply
TDC 0x8001..0x8004:16 1 Open Data segment 5M or above will be forced to open even if you write 0

It is recommended that masters not rely on the assumption that implicit defaults are in effect. When starting up, you should explicitly configure 0x1C12/0x1C13, write 0x8010/0x8011:03..07, then write 0x8010/0x8011:01=1 apply, and read :09..12 to confirm the active status.


9. Reserved protocol values

OptionFlags.bit0, header_flags.bit2, and packet KIND=1..3 are reserved. A master must transmit zero in reserved option and header bits and must reject reserved packet kinds. Firmware does not provide per-frame transmit-result packets. Confirm end-to-end completion through the CAN peer response; use PDO channel status and SDO diagnostics for local congestion and bus-state diagnosis.


10. CRC and integrity strategy

By default, CRC32 is not added to each CAN_FRAME.

Reason:

  • The CAN/CAN FD bus itself already has CAN CRC.
  • EtherCAT frame has link FCS and working counter.
  • per-frame CRC32 will increase 4B/frame, and the classic 8B standard frame overhead increases from 12B to 16B, about 33%.
  • Frame-by-frame CRC32 adds jitter to the packet calculation in 1ms periods.

By default, ActiveLayoutCrc, double sequence commit and length checks protect the layout and update boundary, while payload CRC16 is disabled for the hot path. Clear OptionFlags.bit2 to enable CRC-16/CCITT-FALSE without changing the selected header version or length.


11. Multi-channel shared budget

PDO no longer provides fixed slots for each CAN channel. The scheduler works on a frame area byte budget:

text
frame_area = ActivePDOBytes - HeaderBytes
reserved_bytes = enabled_channel_count * policy_reserved_bytes
shared_bytes = frame_area - reserved_bytes

Budget strategy:

value name description
0 Balanced Reserve a minimum packet budget for each enabled channel, and compete for remaining space sharing; Default
1 SharedOnly No channel reservation, all frames share contention
2 Deterministic Allocate the budget evenly according to the enabled channels, and do not borrow between channels
3 Reserved Reserved

A CAN_FRAME must be put into the frame area of this cycle as a whole, and splitting across cycles is not allowed. If there is insufficient space, set the device to STREAM_TRUNCATED, add overflow_sat and SDO PDOOverflowCounter.


12. SDO object dictionary

The previous chapters describe periodic PDO data, which is exchanged every EtherCAT cycle after OP. The SDO object dictionary is the configuration and diagnostics entry point: use it before OP to configure PDO profiles and MCAN channels, and use it during operation to read capabilities, error counters, and detailed status. If you only need to look up an object, start from this chapter. For bring-up, read 13.1, 13.2, 13.4, and 13.8 first.

This chapter lists only the public objects intended for customer integration. Objects not listed here are manufacturer-reserved, carry no compatibility commitment, and must not be accessed by customer applications. U8/U16/U32 denote unsigned 8/16/32-bit values.

12.1 Quick lookup by object index

In a PDF reader, start with the Bookmarks or Contents pane. If the address is known, search the complete hexadecimal token, such as 0x8010:07 or 0xF000:16. If only the function is known, search the English keywords below. Ranged objects also list each member address so a search for 0x8002 or 0x9023 lands directly in this index.

Exact index or range members Object/keywords Direction and purpose Detail section
0x1C12 RxPDO assignment, SM2, Output mapping Select continuous RxPDO chunks and optional 16B tail mapping 4.1, 4.3
0x1C13 TxPDO assignment, SM3, Input mapping Select continuous TxPDO chunks and optional 16B tail mapping 4.1, 4.3
0x1600..0x1617 RxPDO map, M2S Each object maps one 128B chunk 4.1
0x1A00..0x1A17 TxPDO map, S2M Each object maps one 128B chunk 4.1
0x6000.. TxPDO data, Input process image 16B slave-to-master process-image units 4.1
0x7000.. RxPDO data, Output process image 16B master-to-slave process-image units 4.1
0x8000 System Config, reboot, pin rotation System configuration, reboot, and CAN pin rotation 12.3
0x8001, 0x8002, 0x8003, 0x8004 MCAN Channel Config, bit timing, FIFO CAN0..CAN3 timing, mode, filters, and Message RAM 12.4
0x8010 TxPDO Profile Control, S2M TxPDO size, channels, profile, options, and active readback 12.2
0x8011 RxPDO Profile Control, M2S RxPDO size, channels, profile, options, and active readback 12.2
0x8021, 0x8022, 0x8023, 0x8024 MCAN Data Path Control, budget Per-channel receive/transmit service budgets and apply 12.2.1
0x9000, 0x9001, 0x9002, 0x9003 MCAN Channel Information, ECR, PSR Detailed channel status, error counters, and register snapshots 12.5
0x9011 Cycle Performance Diagnostics, PDI timing Worst-case PDI, Sync0, mapping, and hot-path timing 12.2.4
0x9020, 0x9021, 0x9022, 0x9023 MCAN Data Path Diagnostics, drop, cache Per-channel cache, drop, backpressure, BusOff, and service timing 12.2.5
0xF000 Device Objects, capability, version Firmware version, PDO limits, header versions, and feature capabilities 12.7

Frequently searched subindices:

Search key Name Typical use
0x8010:03, 0x8011:03 PDO size encoding Configure total length as 128B*base+16B*fine
0x8010:07, 0x8011:07 Option flags Select V1/V2, CRC, ALIGN4, and other supported options; bit0 is reserved
0x8010:02, 0x8011:02 Apply status Determine whether the profile applied and why it failed
0x8010:09..12, 0x8011:09..12 Active readback Read PDO bytes, frame area, layout CRC, and profile word
0x8001:07..24 MCAN mode and bit timing Automatic/manual timing, CAN FD, TDC, and sample points
0x8001:61..73 MCAN Message RAM FIFO/Buffer counts and element sizes; other channel objects are isomorphic
0xF000:05/06 Firmware version Read firmware major/minor
0xF000:09 PDO header version mask Discover V1/V2 header capability
0xF000:16 PDO feature flags Discover fine sizing, V2, scheduled transmit, and other features

12.1.1 Object overview

Object Name Access Overview Direction/Purpose Description
0x8000 System Config RW/RO CFG System clock, restart, CAN pin rotation
0x8001..0x8004 MCAN Channel Config RW/RO CFG Each CAN/CAN FD configuration
0x8010 TxPDO Profile Control RW/RO S2M profile Slave upload direction PDO profile
0x8011 RxPDO Profile Control RW/RO M2S profile Master sends direction PDO profile
0x8021..0x8024 MCAN Data Path Control RW/RO CFG Per-channel receive/transmit service budgets; written on demand by the advanced IgH API
0x9000..0x9003 MCAN Channel Information RO S2M diagnostic Channel state, error counters, and active configuration readback
0x9011 Cycle Performance Diagnostics RO/RW S2M diagnostic Cycle interrupt and critical-path timing statistics
0x9020..0x9023 MCAN Data Path Diagnostics RO S2M diagnostic Per-channel cache, drop, backpressure, and service timing statistics
0xF000 Device Objects RO S2M capability Capability, version, upper limit read-only objects

12.2 0x8010/0x8011 PDO Profile Control

0x8010 controls the TxPDO/Input direction, and the data flow is S2M; 0x8011 controls the RxPDO/Output direction, and the data flow is M2S. SI1/3/4/5/6/7/8 is the requested configuration or command written by the master, and SI2/9..16 is the status and active readback returned by the slave.

SI Name Type Access Default Description
1 Apply command U8 RW 0 Write 1 Apply requested profile
2 Status U8 RO 0 apply/parser Status
3 PDO size encoding U8 RW 0x02 low 5 bits=base, high 3 bits=fine; bytes=128*base+16*fine
4 Channel mask U8 RW 0x0F bit0..7 corresponds to CAN0..CAN7
5 Encapsulation profile U8 RW 0 Encapsulation profile; default profile 0, no timestamp, variable DLC
6 Budget policy U8 RW 0 Budget policy; default Balanced
7 Option flags U8 RW 0x04 Default V1 header with NO_CRC16; V2 requires explicit bit5
8 Command U8 RW 0 bit0 reset session, bit1 clear errors
9 Active PDO bytes U16 RO 0 Current PDO bytes
10 Active frame area bytes U16 RO 0 Current frame area bytes
11 Active layout CRC U32 RO 0 layout contract CRC
12 Active profile word U32 RO 0 active profile package echo
13 Packet sequence U16 RO 0 Recent direction sequence number
14 Last PDO error U16 RO 0 Last encapsulation layer error
15 PDO error counter U32 RO 0 Packaging layer error count
16 PDO overflow counter U32 RO 0 Overflow/backpressure count

Status Common values:

value description
0 OK
1 invalid state, usually the OP trying to change the layout
2 invalid PDO size multiplier
3 invalid channel mask
4 invalid encapsulation profile
5 master mapping reload required
7 PDO encapsulation error
8 PDO overflow/backpressure
9 requested profile pending apply
10 unsupported option flag

Active profile word packaging format:

Bits Field Description
0..4 base - 1 128B base count minus one
5..12 ChannelMask bit0..3 corresponds to CAN0..CAN3, the current product only uses the lower 4 bits
13..18 EncapsulationProfile See Chapter 9 profile table
19..20 BudgetPolicy See Chapter 12 Budgeting Strategies
21..28 OptionFlags Direction options, see Chapter 8
29..31 fine number of 16B fine units, 0..7

Command bit definition:

Bit Name Description
0 reset session Clear the running state serial number, error status and temporary session information in this direction
1 clear errors Clear LastPDOError, PDOErrorCounter and PDOOverflowCounter
2 reserved Must be 0
3 reserved Must be 0
4 reserved Must be 0
5 reserved Must be 0
6 reserved Must be 0
7 reserved Must be 0

Last PDO error common values:

value name description
0 OK No errors
2 frame overrun A single frame exceeds the encapsulation capability supported by the current profile
3 packet overrun frame packet exceeds this cycle frame area
4 unknown kind KIND is illegal or not currently supported
5 invalid DLC DLC does not match classic CAN/CAN FD rules
6 invalid channel The channel number exceeds the capability range or is not enabled in the channel mask
7 invalid TSF The timestamp format is not supported by the current profile or direction
8 truncated The payload length is insufficient and the frame packet is truncated
9 unsupported profile EncapsulationProfile is not in the capability mask
10 duplicate sequence Duplicate RxPDO images received, usually treated as idempotent no-op
11 unsupported option option flags contain unsupported bits
12 active area active PDO/frame area is inconsistent with the master mapping
13 reserved bit Control word or fixed header reserved bit is not 0
14 bad header Fixed header version, length or field illegal
15 bad CRC payload_crc16 verification failed
16 bad schedule The reservation sending format is illegal or the capability is not supported

PDO error counter counts encapsulation layer errors such as parsing, CRC, and illegal fields; PDO overflow counter counts overflow or discarding caused by insufficient frame area in this cycle and TX/RX back pressure. During on-site inspection, first check Status, and then check LastPDOError and whether the two counters continue to increase.

12.2.1 0x8021..0x8024 MCAN Data Path Control

0x8021..0x8024 correspond to MCAN0..MCAN3. Normal applications should keep the firmware defaults. Override these values only when measurements under real CAN/CAN FD load show that the per-service budget is insufficient. These objects do not change bit timing, filters, or Message RAM configuration.

Object Channel
0x8021 MCAN0
0x8022 MCAN1
0x8023 MCAN2
0x8024 MCAN3

The stable customer-facing subindices are listed below. Other subindices in these objects are advanced policies or reserved extensions and are not part of the customer interface contract.

SI Name Type Access Default Description
1 Enable U8 RW 1 0=disable the explicit data-path policy; 1=enable it
2 Apply command U8 RW 0 Write 1 after the requested fields; the command returns to 0 after processing
3 Apply status U8 RO 0 Result of the latest apply; 0=OK
5 RX drain budget max U8 RW 2 Maximum frames drained from the MCAN receive path per service, range 0..8; 0 selects the firmware limit
12 TX budget max U8 RW 4 Maximum frames written to the MCAN transmit path per service, range 0..8; 0 selects the firmware default
20 Active control word U32 RO 0 Packed readback of the active policy, used to confirm that apply took effect

The following IgH MCAN Port API calls use these indices:

API Startup SDO generated
igh_mcan_port_set_channel_rx_drain_budget() 0x8021 + channel : 0x05
igh_mcan_port_set_channel_tx_write_budget() 0x8021 + channel : 0x0C

After either budget setter is called, igh_mcan_port_apply_config() also writes SI1=1 for that channel and finally writes SI2=1. The default configuration does not write 0x8021..0x8024, preserving old-firmware compatibility and the factory policy. Raising a budget can increase instantaneous CAN bursts and CPU service load; always repeat loss-counter and latency-tail tests with real traffic.

12.2.2 Data-path budget configuration sequence

For manual configuration, use this order:

  1. Confirm that the target firmware provides the object. If old firmware reports “object does not exist,” retain its default policy instead of failing the entire startup.
  2. Write SI1=1.
  3. Write only the required SI5 and/or SI12 override, in the range 0..8.
  4. Write SI2=1 to apply.
  5. Read SI3 and SI20 to confirm success and the active value.

12.2.3 Manufacturer test and maintenance objects

Data-path bypass tests, direct-register access, persistent maintenance, and manufacturing objects are reserved for manufacturer support. Customer applications must not depend on or write them. For advanced troubleshooting, read 0x9011, 0x9020..0x9023, the standard status and error counters, and export the runtime log.

12.2.4 0x9011 Cycle Performance Diagnostics

0x9011 exposes interrupt counts, PDI/DC phase, and worst-case firmware critical-path timing. All fields below are read-only except Clear command. Timing values are CPU cycles and can be converted using the CPU clock returned by 0x8000:04. A field may remain zero when its corresponding measurement is not enabled in the firmware build.

SI Name Type Access Description
1 PDI IRQ count U32 RO PDI interrupt count
2 Sync0 IRQ count U32 RO Sync0 interrupt count
3 Sync1 IRQ count U32 RO Sync1 interrupt count
4 PDI to Sync0 phase min I32 RO Minimum PDI-to-Sync0 phase difference
5 PDI to Sync0 phase max I32 RO Maximum PDI-to-Sync0 phase difference
6 APPL OutputMapping max cycles U32 RO Maximum RxPDO/OutputMapping execution time
7 APPL InputMapping max cycles U32 RO Maximum TxPDO/InputMapping execution time
8 MCAN PDO service max cycles U32 RO Maximum MCAN PDO service time
10 RxPDO parse max cycles U32 RO Maximum RxPDO parse time
11 ESC read max cycles U32 RO Maximum PDI/ESC read-path time
12 ESC write max cycles U32 RO Maximum PDI/ESC write-path time
13 Schedule service max cycles U32 RO Maximum scheduled-transmit service time
14 Clear command U8 RW Write 1 to clear these statistics; firmware clears the command after processing

Unlisted subindices are compatibility or manufacturer diagnostic extensions. Customer software must not interpret their bit layouts.

12.2.5 0x9020..0x9023 MCAN Data Path Diagnostics

0x9020..0x9023 correspond to MCAN0..MCAN3. They distinguish CAN receive backlog, insufficient PDO capacity, MCAN TX backpressure, bus-off, and an insufficient channel service budget.

SI Name Type Access Description
1 RX cache count U16 RO Receive frames currently waiting to be packed
2 RX cache high watermark U16 RO Historical receive-cache high watermark
3 RX drain last U16 RO Receive frames drained by the latest service
4 RX drain max U16 RO Historical maximum frames drained by one service
5 RX dropped total U32 RO Total receive drops
6 RX dropped old U32 RO Old-frame drop count
7 RX dropped new U32 RO New-frame drop count
8 RX dropped critical U32 RO Drops associated with critical-frame protection
9 TxPDO consumed last U16 RO Frames consumed by the latest TxPDO pack operation
10 TxPDO consumed max U16 RO Historical maximum frames consumed by one TxPDO pack operation
11 TX FIFO full count U32 RO MCAN TX FIFO/queue full or unavailable count
12 TX stale dropped U32 RO Expired transmit-frame drop count
13 Bus-off count U32 RO Bus-off count
14 Recovery attempts U16 RO Automatic recovery attempts
15 Degraded state U16 RO 0=normal; nonzero=degraded or protected state
16 Last error U32 RO Latest data-path or low-level error code
17 Service max cycles U32 RO Maximum service time for this channel
18 Service last cycles U32 RO Latest service time for this channel

If RX cache high watermark stays near the cache limit while RX dropped total rises, CAN input or PDO packing is exceeding the configured capacity. A rising TX FIFO full count instead indicates insufficient CAN transmit capacity or a non-responsive downstream node. Interpret both together with the 0x8010/0x8011 overflow counters and the master's WKC.

12.3 0x8000 System Config

SI Name Type Access Default Description
1 Reboot command U8 WO 0 Write 1 to request software restart
4 CPU clock Hz U32 RO runtime CPU clock used to convert the cycle counts in 0x9011
10 Config version U32 RW 0 Master configuration version echo
11 Last apply result U32 RO 0 Last apply result of system configuration
12 CAN pin rotation U8 RW 0 Rotation of logical CAN channel to fixed pin group
13 Active CAN pin rotation U8 RO 0 Current active rotation
14 CAN pin rotation mask U8 RO 0x0F Supported rotation bit mask
15 CAN pin apply status U8 RO 0 Recent pin rotation application status

CAN pin rotation only allows rotation of logical channels between fixed sets of CAN pins at the chip/board level and does not provide arbitrary GPIO muxing configurations.

12.4 0x8001..0x8004 MCAN Channel Config

Each channel has the same structure. 0x8001 corresponds to CAN0, and 0x8004 corresponds to CAN3.

The subindices are grouped by function below. Most applications only need to configure SI15/16/19/20 and the required FIFO/Queue parameters; filters, TSU, and timeout settings are advanced options.

SI Name Type Access Default Description
1 Apply command U8 WO 0 Write 1 Apply channel configuration
2 Apply status U8 RO 0 Recent apply results
3 Flash command U8 WO 0 bit0 save, bit1 load, bit2 factory reset
4 Flash status U8 RO 0 Recent flash command results
5 Command sequence U32 RO 0 Command completion sequence number
6 Command Pad0 U32 RO 0 Reserved
7 Bit timing mode U8 RW 0 0=automatic baud rate solution, 1=manual bit timing
8 Node mode U8 RW 0 Normal / Loopback / Listen
9 Non-ISO enable U8 RW 0 CAN FD Non-ISO mode
10 Transmit pause U8 RW 0 MCAN transmit pause
11 Edge filter enable U8 RW 0 Edge filter
12 Protocol exception disable U8 RW 0 Disable protocol exception
13 Wide message marker enable U8 RW 0 Extended message marker
14 External timestamp use U8 RW 0 Use external timestamp source
15 FD enable U8 RW 1 1=CAN FD, 0=classic CAN
16 TDC enable U8 RW 1 CAN FD transmission delay compensation
17 Restricted mode disable U8 RW 0 restricted operation mode control
18 Disable auto retransmission U8 RW 0 1=Disable MCAN automatic retransmission
19 Nominal bitrate U32 RW 500000 Arbitration section baud rate
20 Data bitrate U32 RW 5000000 CAN FD data segment baud rate
21 Nominal SP min U16 RW 750 Nominal sample point lower bound, unit 0.1%; when the peer sample point is known, write the peer target value
22 Nominal SP max U16 RW 875 Nominal sample point upper bound, unit 0.1%; when the peer sample point is known, write the peer target value
23 Data SP min U16 RW 750 CAN FD data sample point lower bound, unit 0.1%; when the peer sample point is known, write the peer target value
24 Data SP max U16 RW 875 CAN FD data sample point upper bound, unit 0.1%; when the peer sample point is known, write the peer target value
25 Nominal BRP U16 RW 0 Manual nominal prescaler, valid only when SI7=1
26 Nominal TSEG1 U8 RW 0 Manual nominal TSEG1, valid only when SI7=1
27 Nominal TSEG2 U8 RW 0 Manual nominal TSEG2, valid only when SI7=1
28 Nominal SJW U8 RW 0 Manual nominal SJW, valid only when SI7=1
29 Data BRP U16 RW 0 Manual CAN FD data prescaler, valid only when SI7=1
30 Data TSEG1 U8 RW 0 Manual CAN FD data TSEG1, valid only when SI7=1
31 Data TSEG2 U8 RW 0 Manual CAN FD data TSEG2, valid only when SI7=1
32 Data SJW U8 RW 0 Manual CAN FD data SJW, valid only when SI7=1
33 TDC offset U8 RW 0 0=automatic, not 0=manual TDCO
34 TDC filter U8 RW 0 0=automatic, not 0=manual TDCF
36 Accept non-match std U8 RW 0 Standard-frame action when no filter matches
37 Accept non-match ext U8 RW 0 Extended-frame action when no filter matches
38 Reject remote std U8 RW 0 Whether to reject standard remote frames
39 Reject remote ext U8 RW 0 Whether to reject extended remote frames
40 Ext ID mask U32 RW 0x1FFFFFFF Extended ID global AND mask
41 Std list max U8 RO 64 Maximum number of standard filters
42 Ext list max U8 RO 24 Maximum number of extended filters
43 Std current index U8 RW 0 Current standard filter index
44 Ext current index U8 RW 0 Current extended filter index
45 Std entry cmd U8 RW 0 Standard filter edit command
46 Ext entry cmd U8 RW 0 Extended filter edit command
47 Std entry status U8 RO 0 Standard filter command result
48 Ext entry status U8 RO 0 Extended filter command result
49 Std filter count U8 RW 0 Number of valid standard filters
50 Std filter type U8 RW 0 Standard filter type
51 Std filter action U8 RW 0 Action after a standard-frame filter hit
52 Std filter sync U8 RW 0 Standard-frame sync message tag
53 Std ID1 U32 RW 0 Standard filter ID1
54 Std ID2 U32 RW 0 Standard filter ID2
55 Ext filter count U8 RW 0 Number of valid extended filters
56 Ext filter type U8 RW 0 Extended filter type
57 Ext filter action U8 RW 0 Action after an extended-frame filter hit
58 Ext filter sync U8 RW 0 Extended-frame sync message tag
59 Ext ID1 U32 RW 0 Extended filter ID1
60 Ext ID2 U32 RW 0 Extended filter ID2
61 RX FIFO0 op mode U8 RW 0 FIFO0 operation mode
62 RX FIFO0 size U8 RW 48 Number of FIFO0 elements
63 RX FIFO1 op mode U8 RW 0 FIFO1 operation mode
64 RX FIFO1 size U8 RW 12 Number of FIFO1 elements
65 RX FIFO0 data size U8 RW 7 FIFO0 element data size enumeration
66 RX FIFO1 data size U8 RW 7 FIFO1 element data size enumeration
67 RX buffer count U8 RW 12 Number of RX buffer elements
68 RX buffer data size U8 RW 7 RX buffer element data size enumeration
69 TX FIFO queue mode U8 RW 0 0=FIFO, 1=Queue
70 TX FIFO queue size U8 RW 32 Number of TX FIFO/Queue elements
71 TX dedicated buffer count U8 RW 0 Number of dedicated TX buffers
72 TX buffer data size U8 RW 7 TX element data size enumeration
73 TX event FIFO size U8 RW 32 Number of TX Event FIFO elements
74 Timestamp selection U8 RW 0 MCAN timestamp selection
75 Timestamp prescaler U8 RW 0 MCAN timestamp prescaler
76 TSU enable U8 RW 0 Enable TSU
77 TSU use external timebase U8 RW 0 Use external timebase
78 TSU capture on SOF U8 RW 0 SOF capture
79 TSU enable 64-bit U8 RW 0 64 bit TSU
80 Pad2 U8 RO 0 Reserved
81 TSU prescaler U16 RW 1 TSU prescaler, min 1
82 TSU external timebase source U8 RW 0 External timebase source
83 TSU TBSEL option U8 RW 0 TBSEL option
84 Timeout enable U8 RW 0 Enable MCAN timeout
85 Timeout select U8 RW 0 Timeout selection, 0..3
86 Pad3 U16 RO 0 Reserved
87 Timeout period U16 RW 0 Timeout period

Channel commands and status:

Field Value Description
Apply command 0 no-op
Apply command 1 Apply the current SDO configuration to the runtime MCAN channel
Apply status / Flash status 0 OK
Apply status / Flash status 1 fail
Apply status / Flash status 3 build fail, configuration conversion failed
Apply status / Flash status 4 apply runtime fail, MCAN restart or driver application failed
Flash command bit0 1 Save current channel configuration to Flash
Flash command bit1 1 Load channel configuration from Flash
Flash command bit2 1 Restore the channel to factory default configuration

Node mode value:

value description
0 Normal, normal sending and receiving
1 Restricted/monitor debugging mode, valid according to chip driver support
2 Internal loopback, internal loopback test
3 External loopback/listen debugging mode, valid according to chip driver support

Manual bit timing only takes effect at SI7 Bit timing mode = 1. In automatic mode, the master configures Nominal/Data bitrate and the sample point range, and the firmware solves BRP/TSEG/SJW according to the MCAN source clock. The sample point range should follow the peer device configuration: when the peer sample point is known, set both min and max to the target sample point; otherwise start from the peer documentation recommendation and verify frame exchange quality. In manual mode, SI25..32 is used.

Filter global fields:

SI Name Type Access Description
36 Accept non-match std U8 RW Processing strategy when the standard frame misses the filter
37 Accept non-match ext U8 RW Processing strategy when the extended frame misses the filter
38 Reject remote std U8 RW Whether to reject standard remote frames
39 Reject remote ext U8 RW Whether to reject extended remote frames
40 Ext ID mask U32 RW Extended ID global mask
41 Std list max U8 RO Maximum number of standard filters, currently 64
42 Ext list max U8 RO Maximum number of extended filters, currently 24

Filter editing window:

SI Name Type Access Description
43 Std current index U8 RW Current standard filter index
44 Ext current index U8 RW Current extended filter index
45 Std entry cmd U8 RW Execute command on the current standard filter index
46 Ext entry cmd U8 RW Execute command on the current extended filter index
47 Std entry status U8 RO Standard filter command result
48 Ext entry status U8 RO Extended filter command result
49 Std filter count U8 RW Number of valid standard filters
50 Std filter type U8 RW Standard filter type
51 Std filter action U8 RW Action after a standard-frame filter hit
52 Std filter sync U8 RW Standard-frame sync message tag
53 Std ID1 U32 RW Standard filter ID1
54 Std ID2 U32 RW Standard filter ID2
55 Ext filter count U8 RW Number of valid extended filters
56 Ext filter type U8 RW Extended filter type
57 Ext filter action U8 RW Action after an extended-frame filter hit
58 Ext filter sync U8 RW Extended-frame sync message tag
59 Ext ID1 U32 RW Extended filter ID1
60 Ext ID2 U32 RW Extended filter ID2

Entry cmd

value description
0 no-op
1 load current, read the current index entry into the editing window
2 save current, write the editing window to the current index
3 clear current, disable the current index entry
4 flash current, reserved; currently it is recommended to use channel Flash command to save uniformly

Entry status

value description
0 OK
1 index is invalid
2 command invalid

Typical filter configuration process:

  1. Read Std list max / Ext list max to confirm the capacity.
  2. Write Std filter count or Ext filter count.
  3. Write current index.
  4. Write filter type/action/sync/id1/id2.
  5. Write entry cmd = 2 to save the current index.
  6. Repeat to configure multiple entries.
  7. Write Apply command = 1 to make the channel configuration take effect.
  8. If you need to save when power off, write Flash command bit0 = 1.

RAM/FIFO/Buffer fields:

Note: the SI column below is decimal. Many master tools display subindices in hexadecimal. The commonly mentioned 0x41/0x42/0x44 are decimal 65/66/68, corresponding to the RX FIFO0, RX FIFO1, and RX Buffer element data sizes. These fields only define the maximum data bytes stored in one MCAN Message RAM element. They do not define the CAN FD DLC inside a PDO packet; the actual DLC is still carried by the frame packet in RxPDO/TxPDO.

SI decimal SI hex Name Type Access Recommended default Description
61 0x3D RX FIFO0 op mode U8 RW 0 FIFO0 operation mode, 0=blocking. When full, new frames do not overwrite old frames; observe diagnostics counters
62 0x3E RX FIFO0 size U8 RW 48 Number of FIFO0 elements; normally used for common receive frames
63 0x3F RX FIFO1 op mode U8 RW 0 FIFO1 operation mode, 0=blocking
64 0x40 RX FIFO1 size U8 RW 12 Number of FIFO1 elements; can be used with filters for selected frames
65 0x41 RX FIFO0 data size U8 RW 7 FIFO0 element data size enumeration; use 7 for 64B CAN FD
66 0x42 RX FIFO1 data size U8 RW 7 FIFO1 element data size enumeration; use 7 for 64B CAN FD
67 0x43 RX buffer count U8 RW 12 Number of RX buffer elements; used directly only when filters route to RXBUF
68 0x44 RX buffer data size U8 RW 7 RX buffer element data size enumeration; use 7 for 64B CAN FD
69 0x45 TX FIFO queue mode U8 RW 0 0=FIFO, 1=Queue; Queue is sorted by CAN ID arbitration priority
70 0x46 TX FIFO queue size U8 RW 32 Number of TX FIFO/Queue elements; current recommendation is to use TX FIFO for all TX resources
71 0x47 TX dedicated buffer count U8 RW 0 Number of dedicated TX buffers; current recommendation is 0 to avoid mixing with the FIFO path
72 0x48 TX buffer data size U8 RW 7 TX FIFO/Buffer element data size enumeration; use 7 for 64B CAN FD
73 0x49 TX event FIFO size U8 RW 32 Number of TX Event FIFO elements; recommended not less than TX FIFO/Queue count

data size uses the HPM MCAN driver enumeration and is not the byte value itself. Common values are:

Enum Maximum data bytes Typical use
0 8B Classic CAN, or minimal RAM setup for 8B CAN FD only
1 12B CAN FD 12B
2 16B CAN FD 16B
3 20B CAN FD 20B
4 24B CAN FD 24B
5 32B CAN FD 32B
6 48B CAN FD 48B
7 64B CAN FD 64B, current recommended default

The Message RAM budget is determined by both element counts and data size. The general CAN FD default is RXFIFO0=48, RXFIFO1=12, RXBUF=12, TXFIFO=32, TXBUF=0, TXEVENT=32, data size=7. Classic CAN may reduce data size to 0 to save RAM for more elements. If the configuration is illegal or exceeds the per-channel Message RAM budget, Apply status reports an error and the runtime channel does not switch to the new layout.

Timestamp/TSU/Timeout fields:

SI Name Type Access Description
74 Timestamp selection U8 RW MCAN timestamp selection, 0..2
75 Timestamp prescaler U8 RW MCAN timestamp prescaler
76 TSU enable U8 RW Enable TSU
77 TSU use external timebase U8 RW Use external timebase
78 TSU capture on SOF U8 RW SOF capture
79 TSU enable 64-bit U8 RW 64 bit TSU
80 Pad2 U8 RO Reserved
81 TSU prescaler U16 RW TSU prescaler, min 1
82 TSU external timebase source U8 RW External time base source
83 TSU TBSEL option U8 RW TBSEL option
84 Timeout enable U8 RW Enable MCAN timeout
85 Timeout select U8 RW timeout select, 0..3
86 Pad3 U16 RO Reserved
87 Timeout period U16 RW timeout period

TDC Strategy:

  • CAN FD default TDC enable=1.
  • When the data segment is less than 5M, the master can turn off TDC through SDO.
  • When the data segment reaches 5M or more, the firmware ignores TDC enable=0 and forcibly turns on TDC.
  • TDC offset/filter defaults to 0, which means it is automatically calculated by the HPM MCAN driver according to the actual data segment timing.
  • TDC offset/filter that is not 0 is still retained by the firmware and distributed to the MCAN driver for debugging by on-site experts.
  • It is recommended to configure offset/filter in pairs when manually overwriting.

12.5 0x9000..0x9003 MCAN Channel Information

These objects are RO and use the S2M direction. The master reads them when it needs detailed channel status beyond the compact PDO header state.

SI Name Type Access Description
1 ECR raw U32 RO Error count register
2 PSR raw U32 RO Protocol status register
3 IR raw U32 RO Interrupt bit snapshot
4 RXF0S raw U32 RO RX FIFO0 status
5 RXF1S raw U32 RO RX FIFO1 status
6 TXFQS raw U32 RO TX FIFO/Queue status
7 TXEFS raw U32 RO TX Event FIFO status
8 HPMS raw U32 RO High priority message status
9 PDO channel status U16 RO Status word with the same semantics as the PDO header
10 RX pending count U16 RO Not saturated RX pending
11 TX pending count U16 RO Not saturated TX pending
12 Channel event flags U16 RO latched warning/busoff/pressure/state-change
13 RX dropped counter U32 RO PDO frame dropped count before packaging
14 TX backpressure counter U32 RO TX queue full/backpressure count
15 Bus off counter U32 RO BusOff migration count
16 Detail sequence U32 RO Detail snapshot change sequence number

12.6 Manufacturer maintenance interfaces

!!! danger "Non-public interfaces" Register access, factory maintenance, and persistent-storage repair are not public product APIs. Never modify controller registers or device storage through SDO at a customer site. Use the official service process for recovery or advanced diagnosis.

12.7 0xF000 Device Objects

The master must read the 0xF000 capability object before selecting the PDO profile.

The object is RO and the direction is S2M. It is used by the master to identify the device capabilities, version and protocol upper limit.

SI Name Type Access Default Description
1 Device type U8 RO runtime Product type: 0=ECAN-Lite; other values identify customized models
2 Channel count U8 RO 4 MCAN channel count
3 Capability version U16 RO 0x0001 Capability object version
4 Hardware revision U32 RO runtime Device hardware revision; returns 0 when unavailable
5 Firmware version major U16 RO runtime Firmware major-version field
6 Firmware version minor U16 RO runtime Firmware minor/build field
7 Serial number low U32 RO runtime Low 32 bits of the device serial number; returns 0 when unavailable
8 Serial number high U32 RO runtime High 32 bits of the device serial number; returns 0 when unavailable
9 PDO header version mask U16 RO 0x0006 Support header versions 1 and 2

PDO capabilities and upper limits:

SI Name Type Access Default Description
10 PDO size base min U8 RO 1 Minimum low-5-bit 128B base count
11 PDO size base max U8 RO 10 Maximum low-5-bit 128B base count, not the maximum encoded U8 value
12 Encapsulation profile mask U32 RO 0x00000033 Support profile 0/1/4/5
13 Max PDO bytes U16 RO 1392 Maximum PDO in one direction: 10*128 + 7*16
14 Max CAN channels U8 RO 4 Maximum number of CAN channels
15 PDO option flags mask U8 RO 0x3F Supported option bits 0..5
16 PDO feature flags U32 RO runtime Customer-visible PDO capabilities; bit13 advertises HEADER_V2
17 PDO size base unit bytes U16 RO 128 Base chunk size; bit7 capability enables 16B fine adjustment
18 PDO default fixed header bytes U16 RO 24/32 Default V1 length on 5E/6E; explicit V2 is 16/20
19 Device service flags U32 RO runtime Customer-visible device service capabilities

Encapsulation profile mask

Bit Profile Description
0 0 compact inline, variable DLC, no timestamp
1 1 compact inline, variable DLC, allow delta16
4 4 compact inline, D64 allowed, no timestamps
5 5 compact inline, D64 allowed, delta16 allowed

PDO option flags mask

Bit Name Description
0 Reserved Must be 0; writes that set it are rejected
1 ALIGN_4_ENABLE Frame packets are aligned by 4 bytes
2 NO_CRC16_ENABLE Set by default, therefore fixed-header payload CRC16 is disabled
3 APP_BYPASS_ENABLE Bypass the real MCAN application path for data-path diagnostics only; do not use for motor control
4 PAYLOAD_ONLY_ENABLE Update only the valid payload for a stable layout; receivers must ignore bytes beyond payload_len
5 HEADER_V2_ENABLE Supports explicit compact-V2 selection; not set by the factory default

PDO feature flags

Bit Name Description
0 Reserved Always reports 0
1 TSF_DELTA16 Supports 16 bit delta timestamp
2 TSF_DELTA32 The ability bit definition is reserved; the current default ability value is not set
3 TSF_FULL64 Support 64 bit timestamp field
4 D64 Support fixed 64B data window
5 ALIGN4 Supports 4-byte alignment
6 STREAM_CRC32 Capability bit is defined but not set in the current default value
7 FINE_SIZE_16 High 3 bits of the existing size field add 16B units; capability declaration, not a configuration switch
8 RX_TSF_SCHEDULE_TX Support RxPDO TSF_FULL64 format=1 scheduled sending
9 NO_CRC16 Support disabling fixed-header payload CRC16
10 APP_BYPASS Supports application-path bypass diagnostics
11 PAYLOAD_ONLY Supports valid-payload-only data-path optimization
12 FINE_BYPASS Supports fine-grained data-path bypass diagnostics; not for normal applications
13 HEADER_V2 Supports the compact V2 PDO header

Device service flags

Bit Description
0 Support FoE firmware update
2 Support configuration persistence saving/loading
4 Support maintenance access-level status

RxPDO reserves the TSF_FULL64 field of the multiplexed dynamic frame and does not change the ordinary CAN frame packet structure:

text
format:u8 = 1
flags:u8 = 0
tag:u16
offset_ns:u32

TSF_NONE is still sent immediately; TSF_FULL64 format=1 means offset_ns phase sending is reserved for the next SYNC0 cycle. The same phase is queued in PDO frame order.

Reservation delivery implementation constraints:

  • The master must first confirm that bit 8 (mask 0x00000100) is set in 0xF000:16, indicating RxPDO TSF scheduled-transmit support.
  • offset_ns takes the current EtherCAT DC/SYNC0 cycle as a reference. It is recommended to use 100000ns or a larger conservative phase for bring-up first.
  • The device schedules reserved frames according to the SYNC0 phase; frames that have exceeded the target phase will not be retransmitted across cycles, and the master should reserve sufficient offset_ns margin.
  • Scheduled sending and direct sending share the CAN sending path; when the channel is congested or sending is abnormal, feedback is provided through PDO status and SDO diagnostic count.
  • When the master is stopped, the ESC process data area may keep the last frame of RxPDO image; the firmware treats the exact same repeated image as idempotent no-op and does not record it as a real parsing error.

12.8 Comparison of real-time performance between scheduled delivery and direct delivery

Method Characteristics Recommended use
Direct sending Submits a CAN frame as soon as possible after a valid RxPDO arrives; the phase follows the master's PDO arrival time Normal control, functional validation, and communication without a fixed-phase requirement
Scheduled sending Releases a CAN frame at offset_ns within a DC/SYNC0 cycle A stable master cycle that requires a fixed CAN transmit phase

Scheduled sending cannot compensate for an unstable master cycle. Before enabling it, verify a stable EtherCAT cycle, DC state, and WKC, then validate the transmit phase with a CAN analyzer under the actual cabling and load.


13. Technical specifications

Parameters Specifications
Main Control HPMicro HPM5E00 Series RISC-V MCU
EtherCAT 2-port, 100Mbps, CoE/FoE
CAN 4-channel MCAN
CAN Protocol CAN 2.0A/B, CAN FD ISO
CAN FD data field Maximum 64B
Recommended real-time PDO SM: 128B RxPDO and 256B TxPDO; DC: 384B in each direction; revalidate the target cycle when using a larger PDO
Max PDO 1392B/direction
PDO size unit 128B base blocks with optional 16B fine adjustment
PDO fixed header Default V1: 24B on HPM5E, 32B on HPM6E; explicit V2: 16B/20B
PDO package 2B control word + CAN ID + optional timestamp + Data
Standard ID Field 2B
Extended ID field 4B
timestamp/reservation packaging off / delta16, delta32/full64; RxPDO full64 format=1 for SYNC0 phase reservation
TDC turned on by default, forced to turn on for 5M and above
Parameter persistence Flash configuration image, CRC32
Firmware Maintenance FoE Support
CPU/mchtmr CPU 400MHz, mchtmr 24MHz
Validated master profiles sm_250us_1ms (default, 250us subcycle/1ms per channel) and dc_1ms_cross_cycle (1ms, Sync0 shift 900us)

14. Revision history

Version Date Description
V3.0 2026-08 Split the combined manual into a technical reference and an application workflow without dropping protocol, object-dictionary, or diagnostic detail; unified the default as V1 with CRC disabled (OptionFlags=0x04), with V2 described in the PDO-header chapter and selected explicitly by the master