<?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 CAN Multiframe in S32K</title>
    <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789209#M30682</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm using S32K148 Microcontroller. I've enabled the CAN (not CAN FD) able to send and receive 1 frame (8 bytes) properly.&lt;/P&gt;&lt;P&gt;The issue is when we try to receive CAN multiframe we are missing some frames. It is implemented for UDS.&lt;/P&gt;&lt;P&gt;The logic we implemented is shown below:&lt;/P&gt;&lt;P&gt;Gen_CAN0_write( ID , Buffer, 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Request frame&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Response frame&lt;BR /&gt;}&lt;BR /&gt;Gen_CAN0_write( 0x782 , fc , 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Flow control frame&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff1);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Read remaining frame 1&lt;BR /&gt;}&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; Gen_CAN0_read(buff2);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 2&lt;BR /&gt;}&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;Gen_CAN0_read(buff3);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 3&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Is this the correct way to implement the logic. Please suggest.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Rak&lt;/P&gt;</description>
    <pubDate>Tue, 16 Jan 2024 07:13:39 GMT</pubDate>
    <dc:creator>rak14</dc:creator>
    <dc:date>2024-01-16T07:13:39Z</dc:date>
    <item>
      <title>CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789209#M30682</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'm using S32K148 Microcontroller. I've enabled the CAN (not CAN FD) able to send and receive 1 frame (8 bytes) properly.&lt;/P&gt;&lt;P&gt;The issue is when we try to receive CAN multiframe we are missing some frames. It is implemented for UDS.&lt;/P&gt;&lt;P&gt;The logic we implemented is shown below:&lt;/P&gt;&lt;P&gt;Gen_CAN0_write( ID , Buffer, 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Request frame&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Response frame&lt;BR /&gt;}&lt;BR /&gt;Gen_CAN0_write( 0x782 , fc , 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Flow control frame&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff1);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Read remaining frame 1&lt;BR /&gt;}&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; Gen_CAN0_read(buff2);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 2&lt;BR /&gt;}&lt;BR /&gt;if ((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;Gen_CAN0_read(buff3);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 3&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Is this the correct way to implement the logic. Please suggest.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Rak&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jan 2024 07:13:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789209#M30682</guid>
      <dc:creator>rak14</dc:creator>
      <dc:date>2024-01-16T07:13:39Z</dc:date>
    </item>
    <item>
      <title>Re: CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789505#M30708</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;from this code it is hard to comment, if it will work or not. It is not clear what write/read functions do. It is not clear how many MBs are used for TX and RX operation. I can guess you have one TX MB and one RX MB. Then a logic for RX process is simple. The MB flag indicates message was successfully received into the RX MB and its content can be read. You should read it before new message will come and will be moved into this MB, if it is free to receive, means it is not locked. If you do not ensure that you may lost some messages.&lt;BR /&gt;I assume using while loop will work better, but depends on application&lt;/P&gt;
&lt;P&gt;Gen_CAN0_write( ID , Buffer, 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Request frame&lt;BR /&gt;while (!((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)) {}; //wait till RX MB receive message, MB flag is set&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Read Response frame&lt;BR /&gt;Gen_CAN0_write( 0x782 , fc , 8);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Flow control frame&lt;BR /&gt;while (!((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)) {};&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Gen_CAN0_read(buff1);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//Read remaining frame 1&lt;BR /&gt;while (!((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)) {};&lt;BR /&gt;&amp;nbsp; Gen_CAN0_read(buff2);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 2&lt;BR /&gt;while (!((IP_FLEXCAN0-&amp;gt;IFLAG1 &amp;gt;&amp;gt; 4) &amp;amp; 1)) {};&lt;BR /&gt;&amp;nbsp; &amp;nbsp;Gen_CAN0_read(buff3);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;//Read remaining frame 3&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;BR, Petr&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jan 2024 13:05:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789505#M30708</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2024-01-16T13:05:58Z</dc:date>
    </item>
    <item>
      <title>Re: CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789996#M30735</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/52961"&gt;@PetrS&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;Thanks for the quick response.&lt;/P&gt;&lt;P&gt;Replacing while in place of if condition didn't work.&lt;/P&gt;&lt;P&gt;Please find the code of init, read and write functions.&lt;/P&gt;&lt;P&gt;Is there any code for implementing &lt;STRONG&gt;UDS over CAN&lt;/STRONG&gt; in S32K148?&lt;/P&gt;&lt;DIV&gt;void &lt;STRONG&gt;Gen_FLEXCAN0_init&lt;/STRONG&gt;(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;#define MSG_BUF_SIZE&amp;nbsp; 4 /* Msg Buffer Size. (CAN 2.0AB: 2 hdr +&amp;nbsp; 2 data= 4 words) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; uint32_t&amp;nbsp; &amp;nbsp;i=0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_PCC-&amp;gt;PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK; /* CGC=1: enable clock to FlexCAN0 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;MCR |= FLEXCAN_MCR_MDIS_MASK;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* MDIS=1: Disable module before selecting clock */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;CTRL1 &amp;amp;= ~FLEXCAN_CTRL1_CLKSRC_MASK;&amp;nbsp; /* CLKsrc=0: Clock Source = SOSCDIV2 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;MCR &amp;amp;= ~FLEXCAN_MCR_MDIS_MASK;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* MDIS=0; Enable module config. (Sets FRZ, HALT) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; //CAN0-&amp;gt;MCR |= CAN_MCR_FRZ_MASK | CAN_MCR_HALT_MASK;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; while (!((IP_FLEXCAN0-&amp;gt;MCR &amp;amp; FLEXCAN_MCR_FRZACK_MASK) &amp;gt;&amp;gt; FLEXCAN_MCR_FRZACK_SHIFT))&amp;nbsp; {}&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/*!&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;* Good practice:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;* ===================================================&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;* wait for FRZACK=1 on freeze mode entry/exit&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;CTRL1 = 0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; #if defined(S32K11x_SERIES)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; |CAN_CTRL1_PRESDIV(4)&amp;nbsp; &amp;nbsp;/* PRESDIV=4: Sclock=PEclock/(PRESDIV+1) = 40MHz/5 = 8MHz&amp;nbsp; &amp;nbsp; */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; #endif&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; |FLEXCAN_CTRL1_PSEG2(3) &amp;nbsp; &amp;nbsp; /* Configure for 500 KHz bit time */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; |FLEXCAN_CTRL1_PSEG1(3) /* Time quanta freq = 16 time quanta x 500 KHz bit time= 8MHz */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; |FLEXCAN_CTRL1_PROPSEG(6) /* PRESDIV+1 = Fclksrc/Ftq = 8 MHz/8 MHz = 1 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; |FLEXCAN_CTRL1_RJW(3) /*&amp;nbsp; &amp;nbsp; so PRESDIV = 0 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; |FLEXCAN_CTRL1_SMP(1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; //|CAN_CTRL1_ERRMSK(1) ; /* Enaable error interrupt mask in CTRL1 register */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&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; /* PSEG2 = Phase_Seg2 - 1 = 4 - 1 = 3 */&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* PSEG1 = PSEG2 = 3 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* PROPSEG= Prop_Seg - 1 = 7 - 1 = 6 */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* RJW: since Phase_Seg2 &amp;gt;=4, RJW+1=4 so RJW=3. */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* SMP = 1: use 3 bits per CAN sample */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* CLKsrc=0 (unchanged): Fcanclk= Fosc= 8 MHz */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; for(i=0; i&amp;lt;128; i++ )&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; {&amp;nbsp; &amp;nbsp; /* IP_FLEXCAN0: clear 32 msg bufs x 4 words/msg buf = 128 words */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[i] = 0;&amp;nbsp; /* Clear msg buf word */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; for(i=0; i&amp;lt;16; i++ )&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* In FRZ mode, init IP_FLEXCAN0 16 msg buf filters */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; IP_FLEXCAN0-&amp;gt;RXIMR[i] = 0xFFFFFFFF;&amp;nbsp; /* Check all ID bits for incoming messages */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;//&amp;nbsp; IP_FLEXCAN0-&amp;gt;RXMGMASK = 0x1FFFFFFF;&amp;nbsp; /* Global acceptance mask: check all ID bits */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RXMGMASK = 0x00;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 0] = 0x04000000; /* Msg Buf 4, word 0: Enable for reception */&lt;/DIV&gt;&lt;DIV&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; /* EDL,BRS,ESI=0: CANFD not used */&lt;/DIV&gt;&lt;DIV&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; /* CODE=4: MB set to RX inactive */&lt;/DIV&gt;&lt;DIV&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; /* IDE=0: Standard ID */&lt;/DIV&gt;&lt;DIV&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; /* SRR, RTR, TIME STAMP = 0: not applicable */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; /*0x04000000*/&lt;/DIV&gt;&lt;DIV&gt;#ifdef NODE_A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Node A receives msg with std ID 0x511 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; //IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 1] = 0x14440000; /* Msg Buf 4, word 1: Standard ID = 0x111 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; for(i=4;i&amp;lt;7;i++)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ i*MSG_BUF_SIZE + 0] = 0x04 &amp;lt;&amp;lt; 24;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;#else&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Node B to receive msg with std ID 0x555 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 1] = 0x15540000; /* Msg Buf 4, word 1: Standard ID = 0x555 */&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&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; /* PRIO = 0: CANFD not used */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;MCR = 0x0000041F;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* Negate FlexCAN 1 halt state for 32 MBs */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; while ((IP_FLEXCAN0-&amp;gt;MCR &amp;amp;&amp;amp; FLEXCAN_MCR_FRZACK_MASK) &amp;gt;&amp;gt; FLEXCAN_MCR_FRZACK_SHIFT)&amp;nbsp; {}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; /* Good practice: wait for FRZACK to clear (not in freeze mode) */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; while ((IP_FLEXCAN0-&amp;gt;MCR &amp;amp;&amp;amp; FLEXCAN_MCR_NOTRDY_MASK) &amp;gt;&amp;gt; FLEXCAN_MCR_NOTRDY_SHIFT)&amp;nbsp; {}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; /* Good practice: wait for NOTRDY to clear (module ready) */&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void &lt;STRONG&gt;Gen_FLEXCAN0_transmit_msg&lt;/STRONG&gt;(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/*! Assumption:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;* =================================&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;* Message buffer CODE is INACTIVE&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;IP_FLEXCAN0-&amp;gt;IFLAG1 = 0x00000001; /* Clear CAN 0 MB 0 flag without clearing others*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 2] = 0xA5112233; /* MB0 word 2: data word 0 */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 3] = 0x44556677; /* MB0 word 3: data word 1 */&lt;/DIV&gt;&lt;DIV&gt;#ifdef NODE_A&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 1] = 0x15540000; /* MB0 word 1: Tx msg with STD ID 0x555 */&lt;/DIV&gt;&lt;DIV&gt;#else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 1] = 0x14440000; /* MB0 word 1: Tx msg with STD ID 0x511 */&lt;/DIV&gt;&lt;DIV&gt;#endif&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 0] = 0x0C400000 | 8 &amp;lt;&amp;lt; FLEXCAN_WMBn_CS_DLC_SHIFT;&lt;/DIV&gt;&lt;DIV&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; /* MB0 word 0: */&lt;/DIV&gt;&lt;DIV&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; /* EDL,BRS,ESI=0: CANFD not used */&lt;/DIV&gt;&lt;DIV&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; /* CODE=0xC: Activate msg buf to transmit */&lt;/DIV&gt;&lt;DIV&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; /* IDE=0: Standard ID */&lt;/DIV&gt;&lt;DIV&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; /* SRR=1 Tx frame (not req'd for std ID) */&lt;/DIV&gt;&lt;DIV&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; /* RTR = 0: data, not remote tx request frame */&lt;/DIV&gt;&lt;DIV&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; /* DLC = 8 bytes */&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void &lt;STRONG&gt;Gen_FLEXCAN0_receive_msg&lt;/STRONG&gt;(void)&lt;BR /&gt;{&lt;BR /&gt;/*! Receive msg from ID 0x556 using msg buffer 4&lt;BR /&gt;* =============================================&lt;BR /&gt;*/&lt;BR /&gt;uint8_t j;&lt;BR /&gt;uint32_t dummy;&lt;/P&gt;&lt;P&gt;RxCODE = (IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 0] &amp;amp; 0x07000000) &amp;gt;&amp;gt; 24; /* Read CODE field */&lt;BR /&gt;RxID = (IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 1] &amp;amp; FLEXCAN_WMBn_ID_ID_MASK) &amp;gt;&amp;gt; FLEXCAN_WMBn_ID_ID_SHIFT; /* Read ID */&lt;BR /&gt;RxLENGTH = (IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 0] &amp;amp; FLEXCAN_WMBn_CS_DLC_MASK) &amp;gt;&amp;gt; FLEXCAN_WMBn_CS_DLC_SHIFT; /* Read Message Length */&lt;/P&gt;&lt;P&gt;for (j=0; j&amp;lt;2; j++)&lt;BR /&gt;{ /* Read two words of data (8 bytes) */&lt;BR /&gt;RxDATA[j] = IP_FLEXCAN0-&amp;gt;RAMn[ 4*MSG_BUF_SIZE + 2 + j];&lt;BR /&gt;}&lt;BR /&gt;RxTIMESTAMP = (IP_FLEXCAN0-&amp;gt;RAMn[ 0*MSG_BUF_SIZE + 0] &amp;amp; 0x000FFFF);&lt;BR /&gt;dummy = IP_FLEXCAN0-&amp;gt;TIMER; /* Read TIMER to unlock message buffers */&lt;BR /&gt;IP_FLEXCAN0-&amp;gt;IFLAG1 = 0x00000010; /* Clear CAN 0 MB 4 flag without clearing others*/&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jan 2024 06:10:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1789996#M30735</guid>
      <dc:creator>rak14</dc:creator>
      <dc:date>2024-01-17T06:10:16Z</dc:date>
    </item>
    <item>
      <title>Re: CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1790184#M30756</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;code looks normal, even if different functions are used in previous. I do not see cause why it does not work. An UDS demo is available in&amp;nbsp;&lt;A href="https://community.nxp.com/t5/S32K-Knowledge-Base/Unified-bootloader-Demo/ta-p/1423099" target="_blank"&gt;https://community.nxp.com/t5/S32K-Knowledge-Base/Unified-bootloader-Demo/ta-p/1423099&lt;/A&gt;&lt;/P&gt;&lt;P&gt;BR, Petr&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jan 2024 09:38:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1790184#M30756</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2024-01-17T09:38:40Z</dc:date>
    </item>
    <item>
      <title>Re: CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1791080#M30821</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/52961"&gt;@PetrS&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;The flexcan example is working fine but can I get the flexcan implementation with FreeRTOS as the available example is for baremetal which uses Osif.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 18 Jan 2024 12:57:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1791080#M30821</guid>
      <dc:creator>rak14</dc:creator>
      <dc:date>2024-01-18T12:57:53Z</dc:date>
    </item>
    <item>
      <title>Re: CAN Multiframe</title>
      <link>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1791688#M30857</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am not aware of such demo for S32K1. There is some for MPC5748G;&amp;nbsp;&lt;A href="https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/Example-MPC5748G-FlexCAN-TX-RX-FreeRTOS-S32DS2-1/ta-p/1277762" target="_blank"&gt;https://community.nxp.com/t5/MPC5xxx-Knowledge-Base/Example-MPC5748G-FlexCAN-TX-RX-FreeRTOS-S32DS2-1/ta-p/1277762&lt;/A&gt;&lt;/P&gt;&lt;P&gt;BR, Petr&lt;/P&gt;</description>
      <pubDate>Fri, 19 Jan 2024 07:42:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S32K/CAN-Multiframe/m-p/1791688#M30857</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2024-01-19T07:42:41Z</dc:date>
    </item>
  </channel>
</rss>

