<?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>topic Re: Re S32K146 Transmit Delay in S32K</title>
    <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2172770#M52851</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am not exactly able to explain the cause of this behavior without knowing the exact settings and code used. Seems the arbitration can be stopped or is pending for some reason, could be for example writing to any MB CS word before arbitration scans whole MBs.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;The arbitration process scans the MBs, searching for the transmission MB that holds the message to be sent at the next opportunity. The scan starts from the lowest number MB and continues to the higher ones. If MB0 is used for transmission, upon writing to this MB, arbitration process starts and winner can be found immediately.&lt;/P&gt;
&lt;P&gt;BR, Petr&lt;/P&gt;</description>
    <pubDate>Fri, 19 Sep 2025 11:19:26 GMT</pubDate>
    <dc:creator>PetrS</dc:creator>
    <dc:date>2025-09-19T11:19:26Z</dc:date>
    <item>
      <title>S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166246#M52549</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;/P&gt;&lt;P&gt;We are developing the bootloader software base on S32K146 MCU with CANFD communication.&amp;nbsp;But we encounter an issue which really confuzed us, that is ECU transmit the message with a flexible delay, some times it transmit the positive response onto CAN bus within 1ms after receiving the request from test, some times those delay is really 'big' which is neally 224ms which exceeds the CAN_TP transmit timer&amp;nbsp; limit(As). Could some one please help me fix this issue?&amp;nbsp;&lt;/P&gt;&lt;P&gt;Information about our ECU is shown as below and also the attached picture:&lt;/P&gt;&lt;P&gt;1. 2 MB should be used to recceive 2 messages(ID: 0x714 for physical address, ID: 0x7DF for functional address );&lt;/P&gt;&lt;P&gt;2. 1 MB should be used to transmit 1 messgae(ID:0x794)&lt;/P&gt;&lt;P&gt;3. CANFD arbitration baudrate is 500K/s while data field baudrate is 2MB/s&lt;/P&gt;&lt;P&gt;4. Frame DLC is 64 bytes.&lt;/P&gt;&lt;P&gt;5. We don't use interrupt to receive or transmit in our bootloader software, but use polling type insteadlly.&lt;/P&gt;&lt;P&gt;6. Our Transceiver is TLE9263&lt;/P&gt;&lt;P&gt;7. Our CAN Clocksource is SYS_CLK(80MHZ)&lt;/P&gt;&lt;P&gt;8. I put a monitor point in Can_write function just before writing the MB. and measure the duration bewteen the monitor point and the message was transmitted onto CANTx PIN using logic analyzer, the result is that: it will take nearly 223.95ms to transmit the positve response onto CAN Tx PIN&amp;nbsp; &amp;nbsp;after writing the MB.(Please refer to the attached picture ).&amp;nbsp;&lt;/P&gt;&lt;P&gt;It seems that this huge delay is not raised from arbitration because total MB used&amp;nbsp; is only 7, and there is no other node in CAN loop except our ECU and Tester(CANOE VIN1640)&lt;/P&gt;&lt;P&gt;My CAN_init() function posted as below:&lt;/P&gt;&lt;P&gt;void Can_Init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /**&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* GPIO&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* CAN_RX &amp;nbsp; U4_9_CAN0_RX &amp;nbsp; &amp;nbsp;PE4 &amp;nbsp; &amp;nbsp; ALT5&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* CAN_TX &amp;nbsp; U4_8_CAN0_TX &amp;nbsp; &amp;nbsp;PE5 &amp;nbsp; &amp;nbsp; ALT5&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; PORTE-&amp;gt;PCR[4] = PORT_PCR_MUX(5);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; PORTE-&amp;gt;PCR[5] = PORT_PCR_MUX(5);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#if CAN_FD == CAN_FD_TYPE_EN&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint32_t i = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint32_t tempECR;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint32_t WaitCounter = 0;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* Clock */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; PCC-&amp;gt;PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK; /* CGC=1: enable clock to FlexCAN0 */&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* CAN */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;MCR |= CAN_MCR_SOFTRST_MASK;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: Disable module before selecting clock */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; WaitCounter = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; while(!((CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_SOFTRST_MASK) &amp;gt;&amp;gt; CAN_MCR_SOFTRST_SHIFT)) {WaitCounter++;}&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;IMASK1 = 0x00000000ul;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;ESR1 &amp;amp;= ~CAN_ESR1_BOFFINT_MASK;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;CTRL1 |= (CAN_CTRL1_CLKSRC(1) &amp;nbsp; &amp;nbsp; /* CLKsrc=1: Clock Source = SYS_CLK (80 MHz) */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CTRL1_BOFFMSK(0) &amp;nbsp; &amp;nbsp;/* Busoff interrupt enable */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CTRL1_BOFFREC(0)); &amp;nbsp;/* Busoff auto recovery enable. */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;MCR &amp;amp;= ~CAN_MCR_MDIS_MASK; /* MDIS=0; Enable module config. (Sets FRZ, HALT)*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;MCR |= (CAN_MCR_FRZ_MASK | CAN_MCR_HALT_MASK);&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; WaitCounter = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; while(!((CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_FRZACK_MASK) &amp;gt;&amp;gt; CAN_MCR_FRZACK_SHIFT)) {WaitCounter++;}&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /* Good practice: wait for FRZACK=1 on freeze mode entry/exit */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; tempECR = CAN0-&amp;gt;ECR;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;ECR = 0x00000000UL;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; tempECR = tempECR;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* Configure nominal phase: 500 KHz bit time, 80 MHz Sclock */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;CBT = CAN_CBT_BTF(1) /* Bit time define enable. */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPRESDIV(1) /* EPRESDIV = Prescaler + 1 = 2 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPSEG2(15) /* EPSEG2 = 15 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPSEG1(15) /* EPSEG1 = 15 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPROPSEG(46)/* EPROPSEG = 46 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_ERJW(15);/* ERJW = 15 */ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* BITRATEn =Fcanclk /( [(1 + (EPSEG1+1) + (EPSEG2+1) + (EPROPSEG + 1)] x (EPRESDIV+1))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 80 MHz /( [(1 + ( 15 &amp;nbsp; +1) + ( 15 &amp;nbsp; +1) + ( &amp;nbsp; &amp;nbsp; &amp;nbsp;46 &amp;nbsp; &amp;nbsp; + 1)] x ( &amp;nbsp; 1 &amp;nbsp; &amp;nbsp;+1))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = 80 MHz /( [1+16+16+47] x 2) = 80 MHz /(80x2) = 500 Kz&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Sample &amp;nbsp;Point = &amp;nbsp; (3 + PSEG1 + PROPSEG) /(4+ PSEG1 + PSEG2 + PROPSEG)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (17 + &amp;nbsp; &amp;nbsp; &amp;nbsp; 15 + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 46) /(18 + &amp;nbsp; &amp;nbsp; &amp;nbsp;15 + &amp;nbsp; &amp;nbsp; &amp;nbsp; 15 + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;46) = &amp;nbsp;80% */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /* Configure data phase: 2 MHz bit time, 80 MHz Sclock */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;FDCBT = CAN_CBT_EPSEG2(3) /* FPSEG2 = 3 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPSEG1(7) /* EPSEG1 = 7 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_EPROPSEG(7) /* FPROPSEG = 7 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_CBT_ERJW(3) /* FRJW = 3 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|CAN_FDCBT_FPRESDIV(1);/* FPRESDIV = Prescaler + 1 = 2 */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* BITRATEf = Fcanclk /( [(1 + (FPSEG1+1) + (FPSEG2+1) + (FPROPSEG)] x (FPRESDIV+1))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= 80 MHz /( [(1 + ( &amp;nbsp;7 &amp;nbsp; +1) + ( &amp;nbsp;3 &amp;nbsp; +1) + ( &amp;nbsp; 7 &amp;nbsp; )] &amp;nbsp;x ( &amp;nbsp; &amp;nbsp;1 &amp;nbsp; +1))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= 80 MHz /( [1+8+4+7] x 2) = 80 MHz /(20x2) = 80 MHz / 40 = 2 MHz&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sample &amp;nbsp;Point &amp;nbsp;= &amp;nbsp; (2 + PSEG1 + PROPSEG) /(3 &amp;nbsp;+ &amp;nbsp;PSEG1 + PSEG2 + PROPSEG)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(4+ &amp;nbsp; 7 &amp;nbsp;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7) /(5 &amp;nbsp;+ &amp;nbsp; 7 &amp;nbsp; &amp;nbsp;+ &amp;nbsp; &amp;nbsp;3 &amp;nbsp;+ &amp;nbsp; 7) &amp;nbsp;= 80% &amp;nbsp;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;FDCTRL = CAN_FDCTRL_FDRATE(1) /* BRS=1: enable Bit Rate Swtich in frame's header, Configure bit rate switch, data size, transcv'r delay &amp;nbsp;*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_FDCTRL_MBDSR0(3) /* MBDSR0=3: Region 0 has 64bytes data in frame's payload, 7Mb */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_FDCTRL_TDCEN(1) &amp;nbsp;/* MBDSR1: Not applicable */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_FDCTRL_TDCOFF(31); /* Transceiver Delay Compensation Offset 15 */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /* PRIO = 0: CANFD is used, Enable CRC fix for ISO CAN FD */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;CTRL2 |= CAN_CTRL2_TASD(30) | CAN_CTRL2_ISOCANFDEN(1);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* TDCEN=1: enable Transceiver Delay Compensation */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* TDCOFF=5: 5 CAN clocks (300us) offset used */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for(i = 0; i &amp;lt; 128u; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; { &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* CAN0: clear 128 words RAM in FlexCAN 0&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Clear msg buf words. All buffers CODE=0 (inactive) */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RAMn[i] = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; for(i=0; i &amp;lt; 16u; i++ )&lt;BR /&gt;&amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* In FRZ mode, init CAN0 16 msg buf filters&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Check all ID bits for incoming messages*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RXIMR[i] = 0x1ffffffful;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /* Global acceptance mask: check all ID bits */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RXMGMASK = 0xFFFFFFFFul; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RX14MASK = 0xFFFFFFFFul;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RX15MASK = 0xFFFFFFFFul;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; /* Message Buffer 0 - receive setup: */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* Msg Buf 0, word 0: Enable for reception */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* EDL = 1: Extended Data Length for CAN FD */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* BRS = 1: Bit Rate Switch enabled */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* ESI = 0: Error state */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* CODE = 4: MB set to RX inactive */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* IDE = 0: Standard ID */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* SRR, RTR, TIME STAMP = 0: not applicable */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RAMn[0 * CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_BRS(1) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_ESI(0) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_CODE(CAN_MSG_BUF_RX_EMPTY) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_IDE(0) + &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_SRR(0) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_RTR(0);&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RAMn[0 * CAN_MSG_BUF_SIZE + 1] = ((uint32_t)ID_REQUEST_PHY) &amp;lt;&amp;lt; 18u;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; // CAN0-&amp;gt;RXIMR[0] = (((uint32_t)(~(ID_REQUEST_PHY ^ ID_REQUEST_FUN))) &amp;lt;&amp;lt; 18u) &amp;amp; 0x1ffffffful;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RXIMR[0] = 0x1ffffffful;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RAMn[1 * CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_BRS(1) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_ESI(0) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_CODE(CAN_MSG_BUF_RX_EMPTY) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_IDE(0) + &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_SRR(0) +&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CAN_RAMn_RTR(0);&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RAMn[1 * CAN_MSG_BUF_SIZE + 1] = ((uint32_t)ID_REQUEST_FUN) &amp;lt;&amp;lt; 18u;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;RXIMR[1] = 0x1ffffffful;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN0-&amp;gt;MCR = 0x00030806ul; &amp;nbsp; &amp;nbsp; /* Negate FlexCAN 0 halt state &amp;amp; enable CAN FD for 7 MBs */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; gs_CanControllerStatus[0] = CAN_STATUS_IDLE;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; WaitCounter = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; while ((CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_FRZACK_MASK) &amp;gt;&amp;gt; CAN_MCR_FRZACK_SHIFT){WaitCounter++;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; /* Good practice: wait for FRZACK to clear (not in freeze mode) */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; WaitCounter = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; while ((CAN0-&amp;gt;MCR &amp;amp; CAN_MCR_NOTRDY_MASK) &amp;gt;&amp;gt; CAN_MCR_NOTRDY_SHIFT){WaitCounter++;}&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;And My Can_write()function posted as below:&lt;BR /&gt;bl_Error_t Can_Write(bl_CanHandle_t handle, const bl_Buffer_t *buffer, bl_Size_t size)&lt;BR /&gt;{&lt;BR /&gt;#if CAN_FD == CAN_FD_TYPE_EN&lt;BR /&gt;&amp;nbsp; &amp;nbsp; bl_Error_t ret = BL_ERR_NOT_OK;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint32_t Can_ID = 0x0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint8_t Tx_handle = 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; uint8_t dlc;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; CAN_message_t msg_tx;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; dlc = Can__SizeToDlc(size);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; if (handle &amp;gt; CAN_TXHANDLE_NUM)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Tx_handle = g_CanTxHandleCfg[handle].controller;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; if (gs_CanControllerStatus[Tx_handle] != CAN_STATUS_IDLE)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = BL_ERR_CAN_BUSY;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Can_ID = g_CanTxHandleCfg[handle].id &amp;lt;&amp;lt; 18;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; do&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (uint8_t i = 0; i &amp;lt; CAN_MAX_NUMBER_OF_CONTROLLER; i++)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (gs_CanControllerCfg[i].usage == CAN_CONTROLLER_UNUSED)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( &amp;nbsp; (Tx_handle == gs_CanControllerCfg[i].phyId)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; (CAN_STATUS_IDLE == gs_CanControllerStatus[i]))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg_tx.id = Can_ID;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Can__CopyData(msg_tx.data.bytes,buffer,size);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg_tx.length = dlc;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TLE9261_Write(0x40, 0x5F);/*This is software monitor point which I put here*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 17] = SWAP_UINT32(msg_tx.data.longs[15]);//((uint32_t)buffer[60]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[61]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[62]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[63]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 16] = SWAP_UINT32(msg_tx.data.longs[14]);//((uint32_t)buffer[56]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[57]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[58]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[59]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 15] = SWAP_UINT32(msg_tx.data.longs[13]);//((uint32_t)buffer[52]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[53]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[53]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[55]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 14] = SWAP_UINT32(msg_tx.data.longs[12]);//((uint32_t)buffer[48]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[49]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[50]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[51]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 13] = SWAP_UINT32(msg_tx.data.longs[11]);//((uint32_t)buffer[44]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[45]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[46]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[47]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 12] = SWAP_UINT32(msg_tx.data.longs[10]);//((uint32_t)buffer[40]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[41]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[42]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[43]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 11] = SWAP_UINT32(msg_tx.data.longs[9]);//((uint32_t)buffer[36]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[37]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[38]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[39]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 10] = SWAP_UINT32(msg_tx.data.longs[8]);//((uint32_t)buffer[32]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[33]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[34]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[35]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 9] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[7]);//((uint32_t)buffer[28]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[29]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[30]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[31]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 8] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[6]);//((uint32_t)buffer[24]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[25]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[26]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[27]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 7] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[5]);//((uint32_t)buffer[20]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[21]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[22]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[23]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 6] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[4]);//((uint32_t)buffer[16]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[17]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[18]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[19]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 5] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[3]);//((uint32_t)buffer[12]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[13]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[14]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[15]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 4] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[2]);//((uint32_t)buffer[8]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[9]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[10]) &amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[11]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 3] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[1]);//((uint32_t)buffer[4]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[5]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[6]) &amp;nbsp;&amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[7]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 2] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[0]);//((uint32_t)buffer[0]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[1]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[2]) &amp;nbsp;&amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[3]);&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 1] &amp;nbsp;= Can_ID; /* MB8 word 1: Tx msg with given ID */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 0] &amp;nbsp;= CAN_RAMn_EDL(1) &amp;nbsp;/* EDL=1 CAN FD format frame*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_BRS(1) &amp;nbsp;/* BRS=1: Bit rate is switched inside msg */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_ESI(0) &amp;nbsp;/* ESI=0: ??? */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_CODE(CAN_TX_MB_CODE_TRANS) &amp;nbsp;/* CODE=0xC: Activate msg buf to transmit */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_SRR(0) &amp;nbsp;/* SRR=1 Tx frame (not req'd for std ID) */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_IDE(0) &amp;nbsp;/* IDE=0: Standard ID */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_RTR(0) &amp;nbsp;/* RTR = 0: data, not remote tx request frame*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_DLC(dlc); /* DLC=x; 1,2,3,4,5,6,7,8, 9-12,10-16, 11-20, 12-24, 13-32, 14-48, 15-64bytes &amp;nbsp;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // while (!(S32K_CAN(Tx_handle).IFLAG1 &amp;amp; 0x100)) {}; &amp;nbsp;/* Wait for CAN 0 MB 8 flag */&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // S32K_CAN(Tx_handle).IFLAG1 = 0x00000100; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Clear CAN 0 MB 8 flag without clearing others*/&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs_CanControllerStatus[i] = CAN_STATUS_TRANSMITTING;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = BL_ERR_OK;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &amp;nbsp; } while(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;</description>
      <pubDate>Wed, 10 Sep 2025 02:53:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166246#M52549</guid>
      <dc:creator>Kofi_Wang1</dc:creator>
      <dc:date>2025-09-10T02:53:45Z</dc:date>
    </item>
    <item>
      <title>Re: S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166592#M52564</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;your CAN init looks normal. Only TDC is not needed at 2Mbit at all, anyway TDCOFF looks configured properly. You can try to keep default TASD value as well, but I do not expect difference.&lt;BR /&gt;So from description just single MB is used for transmission, from your code it is&amp;nbsp;&lt;SPAN&gt;CAN_USED_HRH_NUM (value?).&amp;nbsp; If this message buffer CS word is written, the MB starts to&amp;nbsp; participate in arbitration process, should be selected as winner and moved out to TX SMB waiting for first opportunity on the bus to be really transmitted. Here the delay can appear due to bus arbitration, if there is any other message on the bus with lower ID. So check that, you wrote no other node is connected but one of RX message has higher arbitration value (lower ID).&lt;BR /&gt;Another source of delay could be the code itself. There is some code between&amp;nbsp;&amp;nbsp;TLE9261_Write and&amp;nbsp;CAN_USED_HRH_NUM MB CS word writing. Are you sure this cannot be interrupted by other code/task, so adding more SW delay here?&lt;BR /&gt;Also error detected during transmission will delay actual transmit, but you can see wrong message and error messages on the bus/can tool.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;BR, Petr&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 10 Sep 2025 10:48:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166592#M52564</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2025-09-10T10:48:42Z</dc:date>
    </item>
    <item>
      <title>Re: S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166641#M52566</link>
      <description>&lt;P&gt;Hello PetrS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Thank you so much for your kind reply. Let me clarify some points first.&lt;/P&gt;&lt;P&gt;1. For TDCOFF, I refer to the RF manual and calculate it using the parameters which is defined in customer CAN Spec, so I think it is OK here.&lt;/P&gt;&lt;P&gt;2. In my code, MB0 used to receive physical address ID(0x714) message, MB1 used to receive function address ID(0x7DF)message; MB2-MB5 is reserved, MB6 is used for transmit. Since S32K146 Flex CAN0 has 7 MBs for those messages with payload 64 bytes, so&amp;nbsp;CAN_USED_HRH_NUM in my code is 6.&lt;/P&gt;&lt;P&gt;3. For the bus arbitration, I understand what you mean, and sorry for missing some snapshot from my picture. I added them here, please refer to them in the attachment. There is only 1 node in my test bench, that is my ECU, no other node to arbitrate with my ECU except the tester(Vector CANOE VIN1640). In order to wake my ECU after finishing the flashing, I send a NM message with 100ms period. So from my point of view, this delay should not due to the bus arbitration.&lt;/P&gt;&lt;P&gt;4. In order to capture where the delay happens, I put a monitor point in my code, that is&amp;nbsp;&amp;nbsp;TLE9261_Write&amp;nbsp;(which you also mentioned in your reply). By doing this, I can capture the SPI signal which is triggered by calling&amp;nbsp;TLE9261_Write(),&amp;nbsp; This is names measurement start point in my logic analyzer project,&amp;nbsp;which means this point is just before transmitting the message(write data into the transmitting MB also update the CS code of the MB); And I also measure the data in CANRx and CANTx PIN; By doing this, I find the delay between I call&amp;nbsp;TLE9261_Write()and&amp;nbsp; the message was transmitted onto the CAN Tx PIN is nearlly 223ms!!! That is really long. You can see my measurement result in the attachments.&lt;/P&gt;&lt;P&gt;5. So I guess the delay may com from the&amp;nbsp;&amp;nbsp;code between&amp;nbsp;&amp;nbsp;TLE9261_Write and&amp;nbsp;CAN_USED_HRH_NUM MB CS word writing, just as you saied in your reply. But the only interrupts I used in my bootloader code is system tick which I use it to count time and hardfault, which I use it to cope with some fault scenarios. This should not cause so big delay I think.&amp;nbsp;&lt;/P&gt;&lt;P&gt;So could you please check these information again and help me to figure out where the delay come from?&lt;/P&gt;&lt;P&gt;Thank you so much.&lt;/P&gt;</description>
      <pubDate>Wed, 10 Sep 2025 11:34:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2166641#M52566</guid>
      <dc:creator>Kofi_Wang1</dc:creator>
      <dc:date>2025-09-10T11:34:24Z</dc:date>
    </item>
    <item>
      <title>Re: S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2167856#M52601</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;so from MeasurementStartPoint,jpg I see 0x714 message is received, after cca 150us 0x5FC0 is sent on SPI SOUT, is this frame equivalent to&amp;nbsp;&lt;SPAN&gt;TLE9261_Write(0x40,0x5F) used in code?&lt;BR /&gt;Do you have a zoom on stop time when TX message is sent?&amp;nbsp;&lt;BR /&gt;Are you able to get screenshots for normal response (within 1ms)?&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;What is periodic (30us) SPI transfer between CAN messages? How this is handled in code?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If you want to test the code between&amp;nbsp;&amp;nbsp;TLE9261_Write(0x40,0x5F) and MB6 CS word writing is not interrupted, simply disable/enable interrupts before/after.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;BR, Petr&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 11 Sep 2025 12:10:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2167856#M52601</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2025-09-11T12:10:37Z</dc:date>
    </item>
    <item>
      <title>Re S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2168963#M52642</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;thank you so much for your reply. I'd like to answer your first question which I quoted here "so from MeasurementStartPoint,jpg I see 0x714 message is received, after cca 150us 0x5FC0 is sent on SPI SOUT, is this frame equivalent to&amp;nbsp;TLE9261_Write(0x40,0x5F) used in code?"&lt;/P&gt;&lt;P&gt;yes , it is equivalent to&amp;nbsp;TLE9261_Write(0x40,0x5F) used in code.&lt;/P&gt;&lt;P&gt;For the measurement stop point, I introduced another 2&amp;nbsp;&amp;nbsp;TLE9261_Write(0x40,0x5F) function in my code, you can see them in attached picture named 'Monitor point', I also post my code here:&lt;/P&gt;&lt;P&gt;bl_Error_t Can_Write(bl_CanHandle_t handle, const bl_Buffer_t *buffer, bl_Size_t size)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; bl_Error_t ret = BL_ERR_NOT_OK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; uint32_t Can_ID = 0x0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; uint8_t Tx_handle = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; uint8_t dlc;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; CAN_message_t msg_tx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; dlc = Can__SizeToDlc(size);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; if (handle &amp;gt; CAN_TXHANDLE_NUM)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; Tx_handle = g_CanTxHandleCfg[handle].controller;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; if (gs_CanControllerStatus[Tx_handle] != CAN_STATUS_IDLE)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = BL_ERR_CAN_BUSY;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; Can_ID = g_CanTxHandleCfg[handle].id &amp;lt;&amp;lt; 18;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; do&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (uint8_t i = 0; i &amp;lt; CAN_MAX_NUMBER_OF_CONTROLLER; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (gs_CanControllerCfg[i].usage == CAN_CONTROLLER_UNUSED)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; continue;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( &amp;nbsp; (Tx_handle == gs_CanControllerCfg[i].phyId)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;amp;&amp;amp; (CAN_STATUS_IDLE == gs_CanControllerStatus[i]))&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg_tx.id = Can_ID;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Can__CopyData(msg_tx.data.bytes,buffer,size);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg_tx.length = dlc;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TLE9261_Write(0x40, 0x5F);/*Monitor Point 1*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 17] = SWAP_UINT32(msg_tx.data.longs[15]);//((uint32_t)buffer[60]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[61]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[62]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[63]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 16] = SWAP_UINT32(msg_tx.data.longs[14]);//((uint32_t)buffer[56]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[57]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[58]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[59]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 15] = SWAP_UINT32(msg_tx.data.longs[13]);//((uint32_t)buffer[52]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[53]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[53]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[55]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 14] = SWAP_UINT32(msg_tx.data.longs[12]);//((uint32_t)buffer[48]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[49]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[50]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[51]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 13] = SWAP_UINT32(msg_tx.data.longs[11]);//((uint32_t)buffer[44]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[45]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[46]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[47]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 12] = SWAP_UINT32(msg_tx.data.longs[10]);//((uint32_t)buffer[40]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[41]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[42]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[43]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 11] = SWAP_UINT32(msg_tx.data.longs[9]);//((uint32_t)buffer[36]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[37]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[38]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[39]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 10] = SWAP_UINT32(msg_tx.data.longs[8]);//((uint32_t)buffer[32]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[33]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[34]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[35]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 9] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[7]);//((uint32_t)buffer[28]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[29]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[30]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[31]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 8] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[6]);//((uint32_t)buffer[24]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[25]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[26]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[27]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 7] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[5]);//((uint32_t)buffer[20]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[21]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[22]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[23]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 6] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[4]);//((uint32_t)buffer[16]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[17]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[18]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[19]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 5] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[3]);//((uint32_t)buffer[12]) &amp;lt;&amp;lt; 24 | ((uint32_t)buffer[13]) &amp;lt;&amp;lt; 16 | ((uint32_t)buffer[14]) &amp;lt;&amp;lt; 8 | ((uint32_t)buffer[15]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 4] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[2]);//((uint32_t)buffer[8]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[9]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[10]) &amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[11]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 3] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[1]);//((uint32_t)buffer[4]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[5]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[6]) &amp;nbsp;&amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[7]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 2] &amp;nbsp;= SWAP_UINT32(msg_tx.data.longs[0]);//((uint32_t)buffer[0]) &amp;nbsp;&amp;lt;&amp;lt; 24 | ((uint32_t)buffer[1]) &amp;nbsp;&amp;lt;&amp;lt; 16 | ((uint32_t)buffer[2]) &amp;nbsp;&amp;lt;&amp;lt; 8 &amp;nbsp;| ((uint32_t)buffer[3]);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 1] &amp;nbsp;= Can_ID; /* MB8 word 1: Tx msg with given ID */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TLE9261_Write(0x40, 0x5F);/*Monitor Point 2*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 0] &amp;nbsp;= CAN_RAMn_EDL(1) &amp;nbsp;/* EDL=1 CAN FD format frame*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_BRS(1) &amp;nbsp;/* BRS=1: Bit rate is switched inside msg */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_ESI(0) &amp;nbsp;/* ESI=0: ??? */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_CODE(CAN_TX_MB_CODE_TRANS) &amp;nbsp;/* CODE=0xC: Activate msg buf to transmit */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_SRR(0) &amp;nbsp;/* SRR=1 Tx frame (not req'd for std ID) */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_IDE(0) &amp;nbsp;/* IDE=0: Standard ID */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_RTR(0) &amp;nbsp;/* RTR = 0: data, not remote tx request frame*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_RAMn_DLC(dlc); /* DLC=x; 1,2,3,4,5,6,7,8, 9-12,10-16, 11-20, 12-24, 13-32, 14-48, 15-64bytes &amp;nbsp;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TLE9261_Write(0x40, 0x5F);/*Monitor Point 3*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;// while (!(S32K_CAN(Tx_handle).IFLAG1 &amp;amp; 0x100)) {}; &amp;nbsp;/* Wait for CAN 0 MB 8 flag */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;// S32K_CAN(Tx_handle).IFLAG1 = 0x00000100; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Clear CAN 0 MB 8 flag without clearing others*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gs_CanControllerStatus[i] = CAN_STATUS_TRANSMITTING;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ret = BL_ERR_OK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; } while(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The 1st monitor point is put before set ID for MB, 2nd monitor code is put just before update the&amp;nbsp; code of MB to 0xC(transmit), 3rd monitor point is put just after update the code of MB to transmit.&lt;/P&gt;&lt;P&gt;I debug the code, and find the 2 phenomenons which I will describe as below:&lt;/P&gt;&lt;P&gt;1. Firstly I send a diag request service to read DID, test send 0x22 F1 87 on bus, but ECU not response. From the attached picture named 'Received request but no response' you can see ECU actually received the request message, and it is going to send the response and update the MB(monitor point 1 ,2 and 3 are captured in this snapshot), but no response message was monitored on CAN Tx PIN;&lt;/P&gt;&lt;P&gt;2. Then I monitor the ESR1, IFALG1 and RAM registor, and find that the code of transmit MB has been updated to 0xC(transmit) successfully, and the CAN bus is IDLE and no other error in ESR1 registor， But the message was not transmitted on CANTx, it seems flexCAN0 not ready to start to transmit which cause the message was stuck in SMB;&lt;/P&gt;&lt;P&gt;3. Thirdly I try to send another diag request, so I send 0x10 01 service, then ECU response rapidly with 0x62 F1 87....&amp;nbsp; you can see in the attached picture named 'New received request triggered the transmit of the reponse of last request.'.&amp;nbsp; the message was transmitted before the code of&amp;nbsp; monitor point 1, 2, 3, was executed. So It seems a newly request message trigger ECU to transmit the response of last request!!! which seems so unreasonable..&lt;/P&gt;&lt;P&gt;I really need your kind support to figure out this issue, thanks a lot.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 12 Sep 2025 13:25:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2168963#M52642</guid>
      <dc:creator>Kofi_Wang1</dc:creator>
      <dc:date>2025-09-12T13:25:53Z</dc:date>
    </item>
    <item>
      <title>Re: Re S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2170485#M52722</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;it looks that for some reason after MB is written, the arbitration is not started or not finished and message is not moved-out to TX SMB. As the bus is idle, it should be performed normally.&lt;BR /&gt;Then if another message is received, new arbitration is started during CRC part, winner (out of single TX MB) selected and moved-out to SMB. Finally transmitted on first opportunity.&lt;BR /&gt;But also picture&amp;nbsp;&lt;SPAN&gt;'New received request triggered the transmit of the response of last request.' shows you actually update the TX MB before it is successfully transmitted. You should not get to Monitor point 1 if checking for MB transfer/availability is done properly.&lt;BR /&gt;Not sure what to suggest more. Check system and module clocking. Check the code to be sure TX is written when previous transfer was finished. Do you inactivation/abort of the MB in code?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;BR, Petr&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 16 Sep 2025 13:37:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2170485#M52722</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2025-09-16T13:37:35Z</dc:date>
    </item>
    <item>
      <title>Re: Re S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2171067#M52771</link>
      <description>&lt;P&gt;Hello Petrs&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I tried to adjust the MB sequence, it can transmit normally, But I still can't understand the deep logic why it is OK? Let me describe my method briefly:&lt;/P&gt;&lt;P&gt;I adjust the MB index used to receive or transmit, that is, originally MB0 is used to receive physical address diag message(ID:0x714), MB1 is used to receive functional address diag message(ID:0x7DF) , MB6 is used to transmit the ECU response message(ID:0x794).&lt;/P&gt;&lt;P&gt;The new one is: MB0 is used to&amp;nbsp; transmit the ECU response message(ID:0x794), MB1 is used to receive physical address diag message(ID:0x714), MB2 is used to receive functional address diag message(ID:0x7DF).&lt;/P&gt;&lt;P&gt;After this adjustion, my ECU can receive or transmit normally. So I guess is it because MB6 fails to win the arbitration within flexCAN0, so ECU will not move the message to SMB? Since I only have 1 message to transmit, so it seems no other MB to arbitrate with MB6.&lt;/P&gt;&lt;P&gt;Also I will try to abort the MB if it is still transmitting when it need to start a new transmission.&lt;/P&gt;&lt;P&gt;Thanks alot.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 17 Sep 2025 10:29:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2171067#M52771</guid>
      <dc:creator>Kofi_Wang1</dc:creator>
      <dc:date>2025-09-17T10:29:17Z</dc:date>
    </item>
    <item>
      <title>Re: Re S32K146 Transmit Delay</title>
      <link>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2172770#M52851</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am not exactly able to explain the cause of this behavior without knowing the exact settings and code used. Seems the arbitration can be stopped or is pending for some reason, could be for example writing to any MB CS word before arbitration scans whole MBs.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;The arbitration process scans the MBs, searching for the transmission MB that holds the message to be sent at the next opportunity. The scan starts from the lowest number MB and continues to the higher ones. If MB0 is used for transmission, upon writing to this MB, arbitration process starts and winner can be found immediately.&lt;/P&gt;
&lt;P&gt;BR, Petr&lt;/P&gt;</description>
      <pubDate>Fri, 19 Sep 2025 11:19:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/S32K146-Transmit-Delay/m-p/2172770#M52851</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2025-09-19T11:19:26Z</dc:date>
    </item>
  </channel>
</rss>

