<?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>Kinetis MicrocontrollersのトピックRe: FlexCan Transmit MB issue</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483746#M29633</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JingJing,&lt;/P&gt;&lt;P&gt;Interrupt is working. I think there is a bug in my original code. Please ignore my previous post.&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 17 Mar 2016 20:48:59 GMT</pubDate>
    <dc:creator>davidzhou</dc:creator>
    <dc:date>2016-03-17T20:48:59Z</dc:date>
    <item>
      <title>FlexCan Transmit MB issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483742#M29629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have two MBs setup for transmit CAN IDs. MB[8] and MB[10].&lt;/P&gt;&lt;P&gt;I copied TX task here:&lt;/P&gt;&lt;P&gt;while (1) { &lt;/P&gt;&lt;P&gt;//1. Check MB is Active or not, if so abort process&lt;/P&gt;&lt;P&gt;if (iBuffer==0) {//Use MB[8] for ID=0x0C20FF00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; iBuffer=1;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if ((g_pCanReg1-&amp;gt;MB[8].CS &amp;amp; CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE))== CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE)) { // check if mailbox is set for transmit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; //2. write ID and Data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].CS; // |= CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE); // Locking mailbox &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].CS = CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].CS |= (DEFAULT_DLC_8 &amp;lt;&amp;lt; CAN_CS_DLC_SHIFT);&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].CS &amp;amp;= ~CAN_CS_SRR_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; g_pCanReg1-&amp;gt;MB[8].CS |= CAN_CS_IDE_MASK;&amp;nbsp;&amp;nbsp;&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; g_pCanReg1-&amp;gt;MB[8].ID &amp;amp;= ~(0x1FFFFFFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].ID |= (0x0C20FF00L &amp;amp; 0x1FFFFFFF); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].WORD0++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].WORD1++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[8].CS |= (CAN_CS_CODE(CAN_MESSAGE_TRANSMIT_ONCE) | TX_DLC); //transmit data &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else {&amp;nbsp; //NOT ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iTxError0++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;else {&amp;nbsp; //Use MB[8] for ID=0x0C21FF00&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; iBuffer=0; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if ((g_pCanReg1-&amp;gt;MB[10].CS &amp;amp; CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE))==&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE)) { // check if mailbox is set for transmit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; g_pCanReg1-&amp;gt;MB[10].CS;&amp;nbsp; // |= CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE); // Locking mailbox &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].CS = CAN_CS_CODE(CAN_TX_MSG_BUFFER_NOT_ACTIVE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Initialize CODE Status&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].CS |= (DEFAULT_DLC_8 &amp;lt;&amp;lt; CAN_CS_DLC_SHIFT);&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].CS &amp;amp;= ~CAN_CS_SRR_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; g_pCanReg1-&amp;gt;MB[10].CS |= CAN_CS_IDE_MASK;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; g_pCanReg1-&amp;gt;MB[10].ID &amp;amp;= ~(0x1FFFFFFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].ID |= (0x0C21FF00L &amp;amp; 0x1FFFFFFF); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].WORD0 ++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].WORD1 ++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g_pCanReg1-&amp;gt;MB[10].CS |= (CAN_CS_CODE(CAN_MESSAGE_TRANSMIT_ONCE) | TX_DLC); // transmit data &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else {//NOT ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iTxError1++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;if ((iTxError0!=0 || iTxError1 !=0)) {&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;} //end while &lt;/P&gt;&lt;P&gt;_time_delay(1);&lt;/P&gt;&lt;P&gt;// end of the task&lt;/P&gt;&lt;P&gt;The code runs ok without error.&amp;nbsp; But if the last line _time_delay(1) is commented out, it causes a problem. &lt;/P&gt;&lt;P&gt;The transmit doesn't use interrupt. interrupt mask is not enable and interrupt ISR is not installed.&lt;/P&gt;&lt;P&gt;The logic is simple:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; check the MB for TX is not active, then setup data, status, and transmit once.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if is active, skip it. ErrorCount++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; two MBs alternatively to transmit each ID.&lt;/P&gt;&lt;P&gt;Run results:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; no error counter is logged.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Both IDs are transmitted.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; But from CAN capture problem, it also transmitted another Standard ID=0x308 periodically. I don't know where this ID come from. If I transmit just one MB, either of the both, it will receive the above 0x308 ID. &lt;/P&gt;&lt;P&gt;&amp;nbsp; it seems that transmit has error. I though the transmit arbitration process shall take care of the MBs transmit. What's the best way to resolve it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It runs on K60 tower.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 Mar 2016 19:16:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483742#M29629</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-03-16T19:16:24Z</dc:date>
    </item>
    <item>
      <title>Re: FlexCan Transmit MB issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483743#M29630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David zhou,&lt;/P&gt;&lt;P&gt;&amp;nbsp; Actually, the function of _time_delay(1); in your code it is just wait the transmit is finished.&lt;/P&gt;&lt;P&gt;&amp;nbsp; If the first FlexCAN transfer is not finished, then you do anther transfer, it will have problem, because you are not use the interrupt, just use the polling, then after you transfer the CAN data, you need to wait the transmit is finished, but in your code, I didn't find the according code, please add the wait the transfer finished code, you can check register CANx_ESR1[TX] bit, or use the delay.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; About the different ID your are sending, you should check your code and combine with the debug, check which code send the other ID which you don't want to have.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Wish it helps you!&lt;/P&gt;&lt;P&gt;If you still have question, please contact with me!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Jingjing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Mar 2016 06:21:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483743#M29630</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-03-17T06:21:09Z</dc:date>
    </item>
    <item>
      <title>Re: FlexCan Transmit MB issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483744#M29631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It works. Thank you, JingJing!&lt;/P&gt;&lt;P&gt;David Zhou&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Mar 2016 13:02:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483744#M29631</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-03-17T13:02:44Z</dc:date>
    </item>
    <item>
      <title>Re: FlexCan Transmit MB issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483745#M29632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JingJing,&lt;/P&gt;&lt;P&gt;Although it works, by checking ESR1 register, I still have two questions. And you can help me to clarify them:&lt;/P&gt;&lt;P&gt;According to document K60P144M150SF3RM (page 1672):&lt;/P&gt;&lt;P&gt;When the MB is activated, it will participate into the arbitration process and eventually&lt;/P&gt;&lt;P&gt;be transmitted according to its priority. At the end of the successful transmission, the&lt;/P&gt;&lt;P&gt;value of the Free Running Timer is written into the Time Stamp field, the CODE field in&lt;/P&gt;&lt;P&gt;the Control and Status word is updated, the CRC Register is updated, a status flag is set&lt;/P&gt;&lt;P&gt;in the Interrupt Flag Register and an interrupt is generated if allowed by the&lt;/P&gt;&lt;P&gt;corresponding Interrupt Mask Register bit. The new CODE field after transmission&lt;/P&gt;&lt;P&gt;depends on the code that was used to activate the MB (see Table 52-103 and Table&lt;/P&gt;&lt;P&gt;52-104 in Message buffer structure).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;0b1100: DATA — MB is a Tx Data Frame (MB RTR must be 0) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DATA 0 INACTIVE Transmit data frame unconditionally once.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; After transmission, the MB automatically returns to the&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INACTIVE state.&lt;/P&gt;&lt;P&gt;1. In my code, it checks the CS Code field to be INACTIVE state, then it sets up another transmit. Logically, if frame has been transmitted, why it causes the problem?&lt;/P&gt;&lt;P&gt;2. I enabled Interrupt, after TX interrupt is received, then it starts another TX. It has the some problem. It transmits an extra frame with a wrong ID 0x0308. But according to the document, the transmit is done after interrupt is generated. Why it can not be setup immediately to another TX?&lt;/P&gt;&lt;P&gt;3. The only way to transmit as fast as it can is to check ESR1. After ESR1 indicates transmit is done, it can be setup for another TX immediately.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David Zhou&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Mar 2016 16:40:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483745#M29632</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-03-17T16:40:00Z</dc:date>
    </item>
    <item>
      <title>Re: FlexCan Transmit MB issue</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483746#M29633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi JingJing,&lt;/P&gt;&lt;P&gt;Interrupt is working. I think there is a bug in my original code. Please ignore my previous post.&lt;/P&gt;&lt;P&gt;Thank you,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Mar 2016 20:48:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FlexCan-Transmit-MB-issue/m-p/483746#M29633</guid>
      <dc:creator>davidzhou</dc:creator>
      <dc:date>2016-03-17T20:48:59Z</dc:date>
    </item>
  </channel>
</rss>

