RM46L852: DCAN node initialization for recovery

Part Number: RM46L852

Dear Champs,

Is there any way to initialize the specific node of DCAN only to recover it when there was an issue in that node?

My customer tried to implement node initialize API by extracting it from caninit() function, but it was not recovered.

To test their implementation, they generated issue by connecting CAN_H with CAN_L and found the register values of can2GetConfigValue function are

0x21403 0x000fd 0x0070a 0x00080 0x00000, 0x00000 0x00000 0x00000 0x00000 0x4000f 0x40009

In this case, they extracted CAN2 Node initialization part from canInit() function and run it to recover CAN2, but it seemed it did not worked and the register values are still as below.

0x21402 0x00005 0x0070a 0x00080 0x00000, 0x00000 0x00000 0x00000 0x00000 0x4000f 0x40009

My customer is trying to find out the way to recover CAN by initialize issued node only.

Please check this and let me know if there is an API to recover specific node only.

Thanks and Best Regards,

SI.

  • Hello,

    DCAN is a differential protocol. The dominant (0) and recessive (1) is decided on the basis of the difference between voltages on the CANH and CANL lines. When you short CANH and CANL lines, there will not be any voltage difference and that falls under the voltage range of recessive bits. In other words, shorting two lines will be considered as a continuous transmission of recessive bits. When you transmit 6 or more consecutive recessive bits, it is considered as an error! And when this error count goes more than 255, the DCAN controller goes into the BUS_OFF state.

    Per default, after the DCAN has entered Bus-Off state, the CPU can start a Bus-Off-Recovery sequence by resetting Init bit. If this is not done, the module will stay in Bus-Off state

    The DCAN provides an automatic Auto-Bus-On feature that is enabled by bit ABO in CAN Control Register. If set, the DCAN will automatically start the Bus-Off-Recovery sequence.