SPRZ452I july 2018 – may 2023 AM6526 , AM6528 , AM6546 , AM6548
MCAN: Message Transmitted with Wrong Arbitration and Control Fields (Early Start of Frame)
The erratum is limited to the case when MCAN is in state "Receiver" (MCAN_PSR[4:3] ACT = "10") with no pending transmission (no MCAN_TXBRP bit set) and a new transmission is requested before the 3rd bit of Intermission is reached and this 3rd bit of intermission is seen dominant. This issue occurs only with disturbed CAN bus.
Under the following conditions, a message with wrong ID, format, and DLC is transmitted:
Under the conditions listed above, it may happen, that:
Workaround 1:
Request a new transmission only if another transmission is already pending or when the MCAN is not in state "Receiver" (when MCAN_PSR[4:3] ACT !=‚ "10").
To avoid activating the transmission request in the critical time window between the sample points of the 2nd and 3rd bit of Intermission, following can be done:
Workaround 2:
A checksum covering arbitration and control fields can be added to the data field of the message to be transmitted, to detect frames transmitted with wrong arbitration and control fields.
Workaround 3:
Set MCAN_CCCR[0] INIT bit, add transmission request for the message and then clear MCAN_CCCR[0] INIT bit. This needs to be done for each message to be transmitted.
Workaround 4:
Keep the number of pending transmissions always at ">0" by frequently requesting a message so that the condition "no pending transmission" is never met. The frequently requested message may be given a low priority, losing arbitration to all other messages.
In case, where all the nodes present on the CAN bus have this workaround implemented, at least two nodes shall have this frequently sent low priority message with different priorities/identifiers. Rest of the nodes can have one of these priorities/identifiers (same) as the priority of this frequently sent message.
Comparison within available Workarounds is shown in Table 3-1.
Workaround (WA) # | Advantages | Disadvantages |
---|---|---|
1 |
• Easy to implement. • Fix is only limited to a local node with the erratum. |
• Only viable in interrupt context. • Effectiveness is vastly dependent on interrupt service latency. • Application becomes complicated. |
2 | • Simple and easy to implement. | • All nodes on the bus must implement this WA. Restricting use of device for end points and all the existing nodes needs to be updated to support this WA. |
3 | • Simple and easy to implement. |
• Node will miss any messages received during this sequence. • System (including existing nodes) needs to be updated for detecting the dropped/missed message. |
4 |
• DMA can be used to send the frequently sent low priority message to reduce CPU load. • Most effective and viable amongst available workarounds. • Fix is only limited to a local node with the erratum. |
• 100% CAN Bus utilization at all times. • Increased CPU load in case CPU is used to send the message. |