<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>S32KのトピックS32K144 CANFD BUSOFF</title>
    <link>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2263393#M55441</link>
    <description>&lt;P&gt;I configured the CANFD application for S32K144. To handle the busoff situation, the following code was added. It was found that the sending status could be restored after a single short circuit. However, if there were multiple consecutive short circuits, it was eventually discovered that the message sending stopped. What is the reason for this?&lt;/P&gt;&lt;P&gt;it is my code&amp;nbsp;&lt;/P&gt;&lt;P&gt;CANFD_BUSOFF = (CAN0-&amp;gt;ESR1 &amp;amp; CAN_ESR1_FLTCONF_MASK) &amp;gt;&amp;gt; CAN_ESR1_FLTCONF_SHIFT;&lt;/P&gt;&lt;P&gt;//BUSOFF STATE&lt;BR /&gt;if(CANFD_BUSOFF == 0x03)&lt;BR /&gt;{&lt;BR /&gt;// 置位软件复位位&lt;BR /&gt;CAN0-&amp;gt;MCR |= CAN_MCR_SOFTRST_MASK;&lt;/P&gt;&lt;P&gt;//等待复位完成（硬件自动清除此位&lt;BR /&gt;while(CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_SOFTRST_MASK) {}&lt;/P&gt;&lt;P&gt;//写1清除所有错误标志&lt;BR /&gt;CAN0-&amp;gt;ESR1 = 0xFFFFFFFF;&lt;/P&gt;&lt;P&gt;//反初始化驱动&lt;BR /&gt;FLEXCAN_DRV_Deinit(INST_FLEXCAN_CONFIG_1);&lt;/P&gt;&lt;P&gt;//重新初始化驱动和邮箱（完全重现启动配置）&lt;BR /&gt;HAL_setupCAN();&lt;BR /&gt;}&lt;BR /&gt;else//NORMAL STATE&lt;BR /&gt;{&lt;BR /&gt;//数据接收&lt;BR /&gt;HAL_readCAN_Message(&amp;amp;canMsg_handle-&amp;gt;RX_0x0101); //调用驱动接收报文&lt;/P&gt;&lt;P&gt;//数据发送&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[0] = canMsg_handle-&amp;gt;RX_0x0101.msgData[0];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[1] = canMsg_handle-&amp;gt;RX_0x0101.msgData[1];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[2] = canMsg_handle-&amp;gt;RX_0x0101.msgData[2];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[3] = canMsg_handle-&amp;gt;RX_0x0101.msgData[3];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[4] = canMsg_handle-&amp;gt;RX_0x0101.msgData[4];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[5] = canMsg_handle-&amp;gt;RX_0x0101.msgData[5];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[6] = canMsg_handle-&amp;gt;RX_0x0101.msgData[6];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[7] = canMsg_handle-&amp;gt;RX_0x0101.msgData[7];&lt;/P&gt;&lt;P&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[21] = canMsg_handle-&amp;gt;RX_0x0101.msgData[21];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[22] = canMsg_handle-&amp;gt;RX_0x0101.msgData[22];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[23] = canMsg_handle-&amp;gt;RX_0x0101.msgData[23];&lt;/P&gt;&lt;P&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[61] = canMsg_handle-&amp;gt;RX_0x0101.msgData[61];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[62] = canMsg_handle-&amp;gt;RX_0x0101.msgData[62];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[63] = canMsg_handle-&amp;gt;RX_0x0101.msgData[63];&lt;BR /&gt;HAL_sendCAN_Message(canMsg_handle-&amp;gt;TX_0x0201); //调用驱动发送报文&lt;BR /&gt;}&lt;/P&gt;</description>
    <pubDate>Tue, 16 Dec 2025 07:33:03 GMT</pubDate>
    <dc:creator>NanMo1</dc:creator>
    <dc:date>2025-12-16T07:33:03Z</dc:date>
    <item>
      <title>S32K144 CANFD BUSOFF</title>
      <link>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2263393#M55441</link>
      <description>&lt;P&gt;I configured the CANFD application for S32K144. To handle the busoff situation, the following code was added. It was found that the sending status could be restored after a single short circuit. However, if there were multiple consecutive short circuits, it was eventually discovered that the message sending stopped. What is the reason for this?&lt;/P&gt;&lt;P&gt;it is my code&amp;nbsp;&lt;/P&gt;&lt;P&gt;CANFD_BUSOFF = (CAN0-&amp;gt;ESR1 &amp;amp; CAN_ESR1_FLTCONF_MASK) &amp;gt;&amp;gt; CAN_ESR1_FLTCONF_SHIFT;&lt;/P&gt;&lt;P&gt;//BUSOFF STATE&lt;BR /&gt;if(CANFD_BUSOFF == 0x03)&lt;BR /&gt;{&lt;BR /&gt;// 置位软件复位位&lt;BR /&gt;CAN0-&amp;gt;MCR |= CAN_MCR_SOFTRST_MASK;&lt;/P&gt;&lt;P&gt;//等待复位完成（硬件自动清除此位&lt;BR /&gt;while(CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_SOFTRST_MASK) {}&lt;/P&gt;&lt;P&gt;//写1清除所有错误标志&lt;BR /&gt;CAN0-&amp;gt;ESR1 = 0xFFFFFFFF;&lt;/P&gt;&lt;P&gt;//反初始化驱动&lt;BR /&gt;FLEXCAN_DRV_Deinit(INST_FLEXCAN_CONFIG_1);&lt;/P&gt;&lt;P&gt;//重新初始化驱动和邮箱（完全重现启动配置）&lt;BR /&gt;HAL_setupCAN();&lt;BR /&gt;}&lt;BR /&gt;else//NORMAL STATE&lt;BR /&gt;{&lt;BR /&gt;//数据接收&lt;BR /&gt;HAL_readCAN_Message(&amp;amp;canMsg_handle-&amp;gt;RX_0x0101); //调用驱动接收报文&lt;/P&gt;&lt;P&gt;//数据发送&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[0] = canMsg_handle-&amp;gt;RX_0x0101.msgData[0];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[1] = canMsg_handle-&amp;gt;RX_0x0101.msgData[1];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[2] = canMsg_handle-&amp;gt;RX_0x0101.msgData[2];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[3] = canMsg_handle-&amp;gt;RX_0x0101.msgData[3];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[4] = canMsg_handle-&amp;gt;RX_0x0101.msgData[4];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[5] = canMsg_handle-&amp;gt;RX_0x0101.msgData[5];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[6] = canMsg_handle-&amp;gt;RX_0x0101.msgData[6];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[7] = canMsg_handle-&amp;gt;RX_0x0101.msgData[7];&lt;/P&gt;&lt;P&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[21] = canMsg_handle-&amp;gt;RX_0x0101.msgData[21];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[22] = canMsg_handle-&amp;gt;RX_0x0101.msgData[22];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[23] = canMsg_handle-&amp;gt;RX_0x0101.msgData[23];&lt;/P&gt;&lt;P&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[61] = canMsg_handle-&amp;gt;RX_0x0101.msgData[61];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[62] = canMsg_handle-&amp;gt;RX_0x0101.msgData[62];&lt;BR /&gt;canMsg_handle-&amp;gt;TX_0x0201.msgData[63] = canMsg_handle-&amp;gt;RX_0x0101.msgData[63];&lt;BR /&gt;HAL_sendCAN_Message(canMsg_handle-&amp;gt;TX_0x0201); //调用驱动发送报文&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Tue, 16 Dec 2025 07:33:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2263393#M55441</guid>
      <dc:creator>NanMo1</dc:creator>
      <dc:date>2025-12-16T07:33:03Z</dc:date>
    </item>
    <item>
      <title>Re: S32K144 CANFD BUSOFF</title>
      <link>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2263958#M55483</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;it’s not entirely clear how frequently you are checking the fault state or what the HAL functions are doing internally.&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV&gt;
&lt;P&gt;In general, I recommend relying on the Bus-Off flag instead of the FLTCONF field, and enabling the Error/Bus-Off interrupt for better handling.&lt;/P&gt;
&lt;P&gt;You can refer to the following example for a simple implementation:&lt;BR /&gt;&lt;A href="https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K144-FlexCAN-TX-RX-Error-ISR-test-S32DS2-2/ta-p/1278224" target="_blank"&gt;https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K144-FlexCAN-TX-RX-Error-ISR-test-S32DS2-2/ta-p/1278224&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;After Bus-Off is detected, it’s not always necessary to perform a SOFT reset followed by deinit/init of the module. If your application requires reinitialization, just use deinit/init.&lt;BR /&gt;Alternatively, you may simply abort the message as shown in the example.&lt;/P&gt;
&lt;P&gt;BR, Petr&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 16 Dec 2025 13:18:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2263958#M55483</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2025-12-16T13:18:58Z</dc:date>
    </item>
    <item>
      <title>Re: S32K144 CANFD BUSOFF</title>
      <link>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2264301#M55500</link>
      <description>&lt;P&gt;I reviewed the sample code and found that it only stops sending the message to mailbox 1 when there is a failure. The description states that the sending of messages resumed after the short circuit fault was removed. The main reason for adding the reset was that if I didn't handle the sending status, the system would freeze and no more messages would be sent. Even if I added this reset processing, the message sending status would stop and not recover after a certain CANH and CANL short circuit occurred.&lt;/P&gt;</description>
      <pubDate>Wed, 17 Dec 2025 01:50:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2264301#M55500</guid>
      <dc:creator>NanMo1</dc:creator>
      <dc:date>2025-12-17T01:50:58Z</dc:date>
    </item>
    <item>
      <title>Re: S32K144 CANFD BUSOFF</title>
      <link>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2264408#M55511</link>
      <description>&lt;P&gt;I've identified the problem. My colleague initially registered the callback function and then cleared some flags after the busoff operation. This caused the SDK state machine to be unable to handle the state by itself.&lt;/P&gt;</description>
      <pubDate>Wed, 17 Dec 2025 05:31:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K144-CANFD-BUSOFF/m-p/2264408#M55511</guid>
      <dc:creator>NanMo1</dc:creator>
      <dc:date>2025-12-17T05:31:45Z</dc:date>
    </item>
  </channel>
</rss>

