This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28069: CAN behavior in Low temperature

Part Number: TMS320F28069
Other Parts Discussed in Thread: TCAN1042-Q1

Dear Experts,

I have noticed a strange behavior of the CAN module in my application when the temperature drops to very low levels (-30 ~ -40°C). The CAN viewer shows a burst of CAN Tx messages with uncontrolled intervals. At room temperature, the CAN Tx is monitored to be normal with a transmit interval of 1 second. Recently, I checked the Tx signal on the scope and found that there are continuous CAN Tx messages.

The signal is similar to when the CAN node is not connected to anything (open node) and ACK is not received. I have found that when ACK is not received, the eCAN module will keep doing retransmissions, as mentioned in this post, and I have confirmed this by probing the CAN-Tx pin when the MCU node is open.

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1010550/tms320f28069-can-transmit-acknowledgement-isr-is-not-receive/3740382?tisearch=e2e-sitesearch&keymatch=can%25252520transmit%25252520no%25252520acknowledgement#3740382

The CAN circuit consists of an MCU F28069, Transceiver TCAN1042-Q1, and TVS diode NUP2105L, all of which have operating temperature up to -55.
I have two questions:

1. Why does the CAN module behave like this in low temperatures?

2. Is there any way to cancel the retransmission, such as setting the CANTRR bit or CANTA bit?

Thank you for your assistance.

Best regards,
Luiz

  • Luiz,

             You have not attached any waveforms. Please attach good and “bad” waveforms. The “bad” waveforms may not be valid CAN frames.

    The CAN circuit consists of an MCU F28069, Transceiver TCAN1042-Q1, and TVS diode NUP2105L, all of which have operating temperature up to -55.

    What you say is true for NUP2105L, but not for the F28069 and TCAN1042-Q1 which are only rated until -40'C.

    1. Why does the CAN module behave like this in low temperatures?

    What is the exact low temperature at which you start to see this issue? Are you using INTOSC as the device clock source? If so, are you performing oscillator compensation as outlined in www.ti.com/lit/SPRABI7?

    2. Is there any way to cancel the retransmission, such as setting the CANTRR bit or CANTA bit?

    You can try CANTRR. If that doesn't work, you can do a soft reset of the module. But, you need to understand the root-cause of the issue first.

  • Hi Hareesh,
    Thank you for your response.

    You have not attached any waveforms. Please attach good and “bad” waveforms. The “bad” waveforms may not be valid CAN frames.

    Please check the attached file below. Signal and CAN log are captured at -23 degC. The CAN routine is 1-second Tx with 8 bytes of data. Good signal shows consistent 1-second intervals. Bad signal shows very dense intervals. CAN log shows a similar pattern. Good signal shows uniform 1-second interval. bad signal interval is around 500usec.

    What you say is true for NUP2105L, but not for the F28069 and TCAN1042-Q1 which are only rated until -40'C.

    yes. Agree. the symptoms start to arise when the temperature is around -20degC and become worse at -30degC and below where i can not find any good signal.

    What is the exact low temperature at which you start to see this issue? Are you using INTOSC as the device clock source? If so, are you performing oscillator compensation as outlined in www.ti.com/lit/SPRABI7?

    I use INTOSC and do not perform osc compensation. To check on the clock matter, I put a counter on the CAN_Tx function and a timer. the counter is still running as normal, only increasing 1-time in 1 second. So, I confirm that the CAN_Tx function is called every 1 second.

    The timer value (in seconds) is also consistent when it is compared to a stopwatch.

    In fact, the MCU is running a SCI too, which has no problem in the same condition.

    You can try CANTRR. If that doesn't work, you can do a soft reset of the module. But, you need to understand the root-cause of the issue first.

    I did try using CANTRR method. Checking 10ms after transmission and CANTA, if no CANTA is received then trigger TRR. Theoretically, the bad signal can only last for 10ms. in reality, the bad signal can still last more than 10ms, with almost no improvement whatsoever.

    bool check_can_ack(uint16_t mbox_num){
        struct ECAN_REGS ECanaShadow;
        uint32_t ack_bit;
    
        ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
        ack_bit = (ECanaShadow.CANTA.all >> mbox_num) & 0x01;
        if(ack_bit == 0){
            return true;
        }
        else{
            return false;
        }
    }
    void clear_can_ack(uint16_t mbox_num){
        ECanaRegs.CANTRR.all = ((uint32_t)0x00000001) << (mbox_num);
    }
    
    main(){
    ...
        if(systemTime.usec - time > 10000 && check_can_ack(CAN_TX.MBox_Num)){
            clear_can_ack(CAN_TX.MBox_Num);
        }
    ...
    }

    The problem when Bad signals appear continuously, the CAN module cannot receive messages so I lose control of the device.

    .TI-CAN-Issue-20230503.pptx

    Hope my problem statement is clear.

    Best regards,
    Luiz

  • I use INTOSC and do not perform osc compensation.

    That is the root-cuase of your problem. INTOSC is not designed to be used across the device operating temperature without oscillator compensation.

    To check on the clock matter, I put a counter on the CAN_Tx function and a timer. the counter is still running as normal, only increasing 1-time in 1 second. So, I confirm that the CAN_Tx function is called every 1 second.

    All that doesn't matter. Your device is not running exactly at 90 MHz anymore. 

    In fact, the MCU is running a SCI too, which has no problem in the same condition.

    SCI does not have the same strict timing requirment like CAN. Either you need to run your device using an external crystal or you need to periodically perform temp compensation as pointed to in the app.note I referred.

  • I did try to use INTOSC compensation. From a quick test, I didn't see any bad signal on CAN so far.

    Thanks for the suggestion.

    best regards,
    Luiz

  • OK, I thought as much. Using compensation is a must. Best would be to use an external crystal (or a ceramic resonator), for tighter tolerance.