This post builds on
EthTrcv Part 2 — API & Initialization Sequence.
That post covered EthTrcv_Init and the runtime state machine. But before the
API can even be called, something else has to be right: the ARXML configuration
from which the configuration generator produces the EthTrcv_ConfigType structure.
Every container and parameter name in this post is taken 1:1 from the official AUTOSAR CP SWS EthernetTransceiverDriver (Release R25-11) and the AUTOSAR CP SWS EthernetInterface (Release R25-11) — not reconstructed from memory. Both documents are publicly available on autosar.org if you want to verify them yourself.
BSW stacks differ in details (vendor extensions, naming variants for post-build configuration), but the container and parameter names shown here are the ones defined in the standard. If your concrete project shows different names, you’re either looking at an older AUTOSAR release or a vendor-specific extension. |
EthTrcv in the AUTOSAR Configuration Model
Like every Basic Software module, EthTrcv is configured through the AUTOSAR
ECU Configuration metamodel (ECUC). The configuration generator reads the
ARXML and produces C structures from it — typically EthTrcv_ConfigType with
a list of transceiver descriptions, one per physical PHY.
The real container hierarchy looks like this:
EcucModuleDef "EthTrcv"
│
├── EthTrcvGeneral (1x, module-wide — ONE instance for the whole module)
│ ├── EthTrcvIndex [0..255] Instance ID of the module itself
│ ├── EthTrcvDevErrorDetect [bool]
│ ├── EthTrcvMaxTrcvsSupported [uint]
│ ├── EthTrcvWakeUpSupport [enum] applies to ALL transceivers of this module instance
│ ├── EthTrcvMainFunctionPeriod [0..1]
│ ├── EthTrcv...Api (several bool) which API functions get generated
│ └── EthTrcvEcucPartitionRef [0..*]
│
└── EthTrcvConfigSet (1x)
│
└── EthTrcvConfig (1..*) ── one container per transceiver/PHY
├── EthTrcvIdx [0..255] mandatory
├── EthTrcvSpeed [enum] mandatory
├── EthTrcvDuplexMode [enum] mandatory
├── EthTrcvConnNeg [enum] mandatory (Auto/Master/Slave/PLCA)
├── EthTrcvEnablePLCA [bool] mandatory
├── EthTrcvPhysLayerType [enum] optional (0..1)
├── ... (MACsec, PLCA detail, OA TC10 WakeUp parameters, optional)
│
├── EthTrcvDemEventParameterRefs (0..1)
│ └── ETHTRCV_E_ACCESS ──► ref to DemEventParameter
│
├── EthTrcvMgmtInterface (0..1) ── CHOICE container: either/or
│ ├── EthTrcvMiiInterface (0..1)
│ │ ├── EthTrcvCtrlIdx [0..255] which Eth controller for MII access
│ │ └── EthTrcvMiiIdx [0..255] transceiver index for EthIf_ReadMii/EthIf_WriteMii
│ └── EthTrcvSwitchInterface (0..1)
│ ├── EthTrcvSwitchPortRef ──► EthSwtPort
│ └── EthTrcvSwitchRef ──► EthSwtConfig
│
└── EthTrcvWakeupMap (0..7)
├── EthTrcvWakeupReason [enum] e.g. ETHTRCV_WUR_PIN
└── EthTrcvWakeupSourceRef ──► EcuMWakeupSourceEach EthTrcvConfig container corresponds to exactly one physical PHY chip on
the PCB. An ECU with three Ethernet ports (e.g. a gateway with a 100BASE-T1
backbone to three domain controllers) accordingly has three EthTrcvConfig
instances — all underneath the same EthTrcvConfigSet.
|
Mandatory Parameters Step by Step
EthTrcvConfig — the per-transceiver container — defines five parameters
with multiplicity 1 (i.e. mandatory).
EthTrcvIdx — Transceiver Index
EthTrcvIdx is the symbolic index under which the transceiver is addressed
in the API — every API call like EthTrcv_GetLinkState(TrcvIdx, …) takes
this value as its first parameter. The configuration generator automatically
produces a symbolic name for it (withAuto = true in the spec).
| Property | Description |
|---|---|
Type |
|
Meaning | Instance ID of the configured transceiver — unique within the EthTrcv module instance |
Multiplicity |
|
|
EthTrcvSpeed — Link Speed
Specifies the transceiver link speed in Mbit/s. If
EthTrcvConnNeg = TRCV_CONN_NEG_AUTO is set, this is the maximum speed
advertised for Auto-Negotiation.
| Enum literal | Meaning |
|---|---|
| 10 Mbit/s |
| 100 Mbit/s |
| 1000 Mbit/s |
| 2500 Mbit/s |
| 5000 Mbit/s |
| 10000 Mbit/s |
EthTrcvDuplexMode — Duplex Mode
Specifies full or half duplex, provided Auto-Negotiation is not running. If
EthTrcvConnNeg = TRCV_CONN_NEG_AUTO, this value is ignored.
| Enum literal | Meaning |
|---|---|
| Full duplex |
| Half duplex |
EthTrcvConnNeg — Connection Negotiation
Specifies how the transceiver link negotiates — including the Master/Slave role for 100BASE-T1-style single-pair PHYs.
| Enum literal | Meaning |
|---|---|
| Automatic negotiation |
| Fixed master (e.g. for 100BASE-T1/1000BASE-T1) |
| Fixed slave |
| PLCA (Physical Layer Collision Avoidance, relevant for 10BASE-T1S) |
If |
EthTrcvEnablePLCA — Physical Layer Collision Avoidance
Boolean switch for PLCA, relevant for TRCV_PHYS_LAYER_TYPE_10BASE_T1S. If
PLCA is enabled, the PLCA detail parameters
(EthTrcvPhysLayerPlcaLocalNodeId, ..NodeCount, ..TransmitOpportunityTimer,
..MaxBurstCount, ..MaxBurstTimer) must also be configured.
Optional Parameters at a Glance
Beyond the five mandatory parameters, EthTrcvConfig defines a large number
of optional (0..1) parameters — among them:
| Parameter | Purpose |
|---|---|
| Physical layer type of the link: |
| Baud rate and type at the MAC level, independent of the transceiver link |
| MACsec activation and bypass lists (destination MAC, EtherType, VLAN) for unencrypted traffic |
| OA TC10-compliant sleep/wakeup over the data line (100BASE-T1) — including
|
| Name of a callout function, only valid if |
| Reference to an Icu channel, if wakeup detection runs via an interrupt-capture channel |
| Assigns this specific transceiver configuration to an ECUC partition |
This is deliberately not a complete list — the MACsec and PLCA parameters alone add another dozen optional fields. The full reference is chapter 10.2.3 of the SWS EthernetTransceiverDriver. |
Error Referencing: EthTrcvDemEventParameterRefs
Contrary to what one might expect, the spec only defines one standardized DEM event here:
| Parameter | Meaning |
|---|---|
| Reference to a |
There is no standardized |
MDIO vs. Switch Access: EthTrcvMgmtInterface
One of the most commonly misunderstood parts of the configuration: there is
no standalone MDIO PHY address parameter at the EthTrcvConfig level.
Instead, the choice container EthTrcvMgmtInterface selects how the
transceiver is addressed at all:
| Sub-container | Meaning |
|---|---|
| MII access between the Ethernet controller and the transceiver. If this
container is configured, EthTrcv synchronously calls |
| Access through an Ethernet switch. If this container is configured,
EthTrcv instead calls |
EthTrcvMiiInterface contains exactly two parameters:
| Parameter | Meaning |
|---|---|
| Which Eth controller is used for MII access to this transceiver |
| Transceiver index passed along with every |
The actual MDIO PHY address (the 5-bit hardware address per IEEE 802.3, set
via pin strapping on the chip) is not modeled as its own parameter in the
EthTrcv ECUC model. It’s part of how the Eth driver — the one EthIf forwards
the |
EthTrcvSwitchInterface instead references switch configuration directly:
| Parameter | Meaning |
|---|---|
| Reference to the |
| Reference to the matching |
WakeUp Mapping: EthTrcvWakeupMap
Up to seven EthTrcvWakeupMap instances per transceiver map a wakeup reason
to an EcuM wakeup source:
| Parameter | Meaning |
|---|---|
| One of |
| Reference to the matching |
At least one EthTrcvWakeupMap instance is required as soon as
EthTrcvWakeUpSupport (in EthTrcvGeneral) is not ETHTRCV_WAKEUP_NOT_SUPPORTED.
The interplay with EcuM, wakeup validation, and diagnosing wakeup problems are covered in detail in Part 4 of the series. |
Referencing in EthIf
EthTrcv only configures the transceiver itself. The link to the MAC
controller runs exclusively through EthIf — and through two reference
hops, not a direct one:
EthIf
│
├── EthIfConfigSet
│ ├── EthIfController (1..*) ── one container per Eth controller
│ │ ├── EthIfCtrlIdx
│ │ ├── EthIfCtrlMtu
│ │ ├── EthIfPhysControllerRef ──► EthIfPhysController (mandatory)
│ │ ├── EthIfEthTrcvRef (0..1) ──► EthIfTransceiver ★ Step 1
│ │ └── EthIfSwitchRefOrPortGroupRef (0..1) ──► EthIfSwitch | EthIfSwitchPortGroup
│ │
│ └── EthIfTransceiver (0..*)
│ ├── EthIfTransceiverIdx
│ ├── EthIfEthTrcvRef (0..1) ──► EthTrcvConfig ★ Step 2
│ ├── EthIfCanXLTrcvRef (0..1) (alternative: CAN XL transceiver)
│ └── EthIfWEthTrcvRef (0..1) (alternative: wireless Ethernet transceiver)EthIfController.EthIfEthTrcvRef does not point directly at
EthTrcvConfig — it points at a standalone EthIfTransceiver container
inside EthIf. Only that container’s own EthIfEthTrcvRef (same parameter
name, different ECUC ID, different parent container) finally points at the
real EthTrcvConfig container in the EthTrcv module.
The duplicate name is not a typo in this post: in the official spec, the
parameter really is called |
The reason for this detour through EthIfTransceiver instead of a direct
EthIfController → EthTrcvConfig link: an EthIfTransceiver container can
stand independently of any particular controller and carries its own
parameters like EthIfQualifiedUnexpectedLinkDownTime — relevant when the
ECU acts as a passive communication slave per
EthTrcvActAsSlavePassiveEnabled.
Complete ARXML Example
The following example shows a minimal but realistic configuration for a
single 100BASE-T1 PHY in MII mode, including the two-step EthIf referencing.
It’s simplified for illustration (not every mandatory metadata field like
VARIANT annotations is spelled out), but follows the real container and
parameter names from the spec.
<?xml version="1.0" encoding="UTF-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0">
<AR-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>EcuC</SHORT-NAME>
<ELEMENTS>
<!-- ================= EthTrcv ================= -->
<ECUC-MODULE-CONFIGURATION-VALUES>
<SHORT-NAME>EthTrcv</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EthTrcv</DEFINITION-REF>
<CONTAINERS>
<!-- Module-wide configuration -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvGeneral</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvGeneral
</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvGeneral/EthTrcvIndex
</DEFINITION-REF>
<VALUE>0</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvGeneral/EthTrcvDevErrorDetect
</DEFINITION-REF>
<VALUE>true</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<!-- Applies to ALL EthTrcvConfig instances of this module instance -->
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvGeneral/EthTrcvWakeUpSupport
</DEFINITION-REF>
<VALUE>ETHTRCV_WAKEUP_BY_POLLING</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
<!-- One transceiver == one PHY chip on the PCB -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvConfigSet</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet
</DEFINITION-REF>
<SUB-CONTAINERS>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvConfig_Gateway_Port0</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig
</DEFINITION-REF>
<PARAMETER-VALUES>
<!-- Mandatory 1: transceiver index -->
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvIdx
</DEFINITION-REF>
<VALUE>0</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<!-- Mandatory 2: speed -->
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvSpeed
</DEFINITION-REF>
<VALUE>TRCV_SPEED_100</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<!-- Mandatory 3: duplex -->
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvDuplexMode
</DEFINITION-REF>
<VALUE>ETHTRCV_DUPLEX_MODE_FULL</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<!-- Mandatory 4: connection negotiation -- 100BASE-T1 master -->
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvConnNeg
</DEFINITION-REF>
<VALUE>TRCV_CONN_NEG_MASTER</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<!-- Mandatory 5: PLCA disabled (100BASE-T1, not 10BASE-T1S) -->
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-BOOLEAN-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvEnablePLCA
</DEFINITION-REF>
<VALUE>false</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<!-- Optional, but practically relevant: physical layer type -->
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvPhysLayerType
</DEFINITION-REF>
<VALUE>TRCV_PHYS_LAYER_TYPE_100BASE_T1</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
</PARAMETER-VALUES>
<SUB-CONTAINERS>
<!-- DEM error referencing -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvDemEventParameterRefs</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvDemEventParameterRefs
</DEFINITION-REF>
<REFERENCE-VALUES>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvDemEventParameterRefs/ETHTRCV_E_ACCESS
</DEFINITION-REF>
<VALUE-REF DEST="DEM-EVENT-PARAMETER">/Dem/DemConfigSet/DEM_EVENT_ETHTRCV_ACCESS</VALUE-REF>
</ECUC-REFERENCE-VALUE>
</REFERENCE-VALUES>
</ECUC-CONTAINER-VALUE>
<!-- Choice: MII access (the alternative would be EthTrcvSwitchInterface) -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvMgmtInterface</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-CHOICE-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvMgmtInterface
</DEFINITION-REF>
<SUB-CONTAINERS>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvMiiInterface</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvMgmtInterface/EthTrcvMiiInterface
</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvMgmtInterface/EthTrcvMiiInterface/EthTrcvCtrlIdx
</DEFINITION-REF>
<VALUE>0</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvMgmtInterface/EthTrcvMiiInterface/EthTrcvMiiIdx
</DEFINITION-REF>
<VALUE>1</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
</SUB-CONTAINERS>
</ECUC-CONTAINER-VALUE>
<!-- WakeUp mapping: pin wakeup -> EcuM source -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthTrcvWakeupMap_Pin</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvWakeupMap
</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-ENUMERATION-PARAM-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvWakeupMap/EthTrcvWakeupReason
</DEFINITION-REF>
<VALUE>ETHTRCV_WUR_PIN</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
</PARAMETER-VALUES>
<REFERENCE-VALUES>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">
/AUTOSAR/EthTrcv/EthTrcvConfigSet/EthTrcvConfig/EthTrcvWakeupMap/EthTrcvWakeupSourceRef
</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/EcuC/EcuM/EcuMConfiguration/EcuMWakeupSource_EthTrcv0</VALUE-REF>
</ECUC-REFERENCE-VALUE>
</REFERENCE-VALUES>
</ECUC-CONTAINER-VALUE>
</SUB-CONTAINERS>
</ECUC-CONTAINER-VALUE>
</SUB-CONTAINERS>
</ECUC-CONTAINER-VALUE>
</CONTAINERS>
</ECUC-MODULE-CONFIGURATION-VALUES>
<!-- ================= EthIf ================= -->
<ECUC-MODULE-CONFIGURATION-VALUES>
<SHORT-NAME>EthIf</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EthIf</DEFINITION-REF>
<CONTAINERS>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthIfConfigSet</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthIf/EthIfConfigSet
</DEFINITION-REF>
<SUB-CONTAINERS>
<!-- Step 1: controller -> EthIfTransceiver -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthIfController_Port0</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfController
</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfController/EthIfCtrlIdx
</DEFINITION-REF>
<VALUE>0</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfController/EthIfCtrlMtu
</DEFINITION-REF>
<VALUE>1500</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
<REFERENCE-VALUES>
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfController/EthIfPhysControllerRef
</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/EcuC/EthIf/EthIfConfigSet/EthIfPhysController_Port0</VALUE-REF>
</ECUC-REFERENCE-VALUE>
<!-- Step 1: points to EthIfTransceiver, NOT directly to EthTrcvConfig -->
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfController/EthIfEthTrcvRef
</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">/EcuC/EthIf/EthIfConfigSet/EthIfTransceiver_Port0</VALUE-REF>
</ECUC-REFERENCE-VALUE>
</REFERENCE-VALUES>
</ECUC-CONTAINER-VALUE>
<!-- Step 2: EthIfTransceiver -> EthTrcvConfig -->
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>EthIfTransceiver_Port0</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfTransceiver
</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfTransceiver/EthIfTransceiverIdx
</DEFINITION-REF>
<VALUE>0</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
<REFERENCE-VALUES>
<!-- The actual link into the EthTrcv module -->
<ECUC-REFERENCE-VALUE>
<DEFINITION-REF DEST="ECUC-REFERENCE-DEF">
/AUTOSAR/EthIf/EthIfConfigSet/EthIfTransceiver/EthIfEthTrcvRef
</DEFINITION-REF>
<VALUE-REF DEST="ECUC-CONTAINER-VALUE">
/EcuC/EthTrcv/EthTrcvConfigSet/EthTrcvConfig_Gateway_Port0
</VALUE-REF>
</ECUC-REFERENCE-VALUE>
</REFERENCE-VALUES>
</ECUC-CONTAINER-VALUE>
</SUB-CONTAINERS>
</ECUC-CONTAINER-VALUE>
</CONTAINERS>
</ECUC-MODULE-CONFIGURATION-VALUES>
</ELEMENTS>
</AR-PACKAGE>
</AR-PACKAGES>
</AUTOSAR>Every |
Common Configuration Mistakes
| Mistake | Symptom | Cause |
|---|---|---|
Wrong |
| Values don’t match the actual wiring/board variant, or a copy-paste error from a different configuration |
| No link on 100BASE-T1, because both sides are master or both are slave | Missing coordination between the |
Only | EthIf initializes the controller, but the link to the actual | The two-step reference chain was only followed halfway — a classic mistake when you expect the (often simplified-in-diagrams) direct reference |
| EcuM expects wakeup capability for all transceivers of the module instance that a single installed PHY doesn’t actually have (or vice versa) | Overlooked that this parameter is module-wide, not per transceiver |
Duplicate | Configuration generator reports an error, or — worse — accepts it and the first matching entry "wins" at runtime | Manually adding a new |
None of these mistakes causes a compile or link error. All of them only show up at runtime — often only on the real board, not in a HIL test with substitute hardware. Reviewing the ARXML values against the PHY datasheet and the schematic is therefore not an optional step. |
Series
| Part | Title | Status |
|---|---|---|
1 | ✅ published | |
2 | ✅ published | |
3 | EthTrcv Part 3 — ARXML Configuration in Practice | 📍 this post |
4 | ⏭ next part |
Summary
| Topic | Key takeaway for practice |
|---|---|
Container structure | One |
Mandatory parameters |
|
MDIO/switch access | Runs through the choice container |
| Lives in |
EthIf referencing | Two-step: |
Failure pattern | Nearly all configuration mistakes in this module only show up at runtime on real hardware — never at compile time |
Next in the EthTrcv series: EthTrcv Part 4 — WakeUp Handling & Diagnostics