I discovered while working on the SAMV7 mcan driver that the implementation of...
I discovered while working on the SAMV7 mcan driver that the implementation of the CAN error handling is suboptimal. In the current implementation the following errors are implemented as pending errors: * Receiving * MCAN_INT_STE (Stuff Error) More than 5 equal bits in a sequence occurred. * MCAN_INT_CRCE (CRC Error) Received CRC did not match the calculated CRC. * MCAN_INT_RF0L (Receive FIFO 0 Message Lost) Receive FIFO 0 message lost, also set after write attempt to Receive FIFO 0 of size zero. * MCAN_INT_RF1L (Receive FIFO 1 Message Lost) Receive FIFO 1 message lost, also set after write attempt to Receive FIFO 1 of size zero. * Sending * MCAN_INT_BE (Bit Error) Device wanted to send a rec / dom level, but monitored bus level was dominant / recessive. * MCAN_INT_TEFL (Tx Event FIFO Element Lost) Tx Event FIFO element lost, also set after write attempt to Tx Event FIFO of size zero. * General * MCAN_INT_MRAF (Message RAM Access Failure) The flag is set, when the Rx Handler * has not completed acceptance filtering or storage of an accepted message until the arbitration field of the following message has been received. In this case acceptance filtering or message storage is aborted and the Rx Handler starts processing of the following message. * was not able to write a message to the Message RAM. In this case message storage is aborted. In both cases the FIFO put index is not updated resp. the New Data flag for a dedicated Receive Buffer is not set, a partly stored message is overwritten when the next message is stored to this location. The flag is also set when the Tx Handler was not able to read a message from the Message RAM in time. In this case message transmission is aborted. In case of a Tx Handler access failure the MCAN is switched into Restricted Operation mode (see Section 47.5.1.5). To leave Restricted Operation mode, the processor has to reset MCAN_CCCR.ASM. * MCAN_INT_ELO (Error Logging Overflow) Overflow of CAN Error Logging Counter occurred. The listed errors are not pending, the errors occurred and are gone directly afterwards. This commit changes the described behavior and simplifies the handling of CAN errors.
parent
4cbde229
Please register or sign in to comment