<?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 Error in AN11238: LPC11Cxx CANopen network demo in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Error-in-AN11238-LPC11Cxx-CANopen-network-demo/m-p/528335#M9588</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Sat Feb 28 15:21:23 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;AN11238: LPC11Cxx CANopen network demo&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fnxpfile%2Fan11238-lpc11cxx-canopen-network-demo-0" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.lpcware.com/content/nxpfile/an11238-lpc11cxx-canopen-network-demo-0&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;is including a frame length calculation error in void CAN_RX() of canopen_driver.c&amp;nbsp; :(( &lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* if end of buffer has been reached, then this is the last frame */
if(CANopen_SDOC_InBuff == CANopen_SDOC_Seg_BuffSize)
{
 CANopen_Msg_Obj.data[0] |= ([color=#f00](7-(CANopen_SDOC_Seg_BuffSize%7)[/color])&amp;lt;&amp;lt;1) | 0x01; /* save length */
 CANopen_SDOC_State = CANopen_SDOC_Succes;/* set state to success */
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;This part should calculate n: indicates the number of bytes that do not contain data (bytes 8-n to 7 do not contain data):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's working correct for (CANopen_SDOC_Seg_BuffSize%7)&amp;nbsp; &amp;gt; 0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#30f]&lt;/SPAN&gt;&lt;STRONG&gt;Sample #1:&lt;/STRONG&gt;&lt;SPAN&gt;[/color] CANopen_SDOC_Seg_BuffSize = 72&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For segmented transfer there are 11 frames necessary, the last frame is containing 2 data bytes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7) = 7-2 = 5&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the last 5 data bytes are not containing data, that's correct.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#30f]&lt;/SPAN&gt;&lt;STRONG&gt;&lt;BR /&gt;Sample #2:&lt;/STRONG&gt;&lt;SPAN&gt;[/color] CANopen_SDOC_Seg_BuffSize = 70&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For segmented transfer there are 10 frames necessary, the last frame is containing 7 data bytes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7) = 7-0 = 7&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the last 7 data bytes are not containing data, that's wrong, they are all including data&amp;nbsp; &lt;SPAN class="lia-unicode-emoji" title=":face_with_open_mouth:"&gt;&lt;LI-EMOJI id="lia_face-with-open-mouth" title=":face_with_open_mouth:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#0c0]Of course the simple solution is change n from 7 to 0&amp;nbsp;&amp;nbsp; &lt;SPAN class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;&lt;LI-EMOJI id="lia_slightly-smiling-face" title=":slightly_smiling_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/color] &lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;/* if end of buffer has been reached, then this is the last frame */
if(CANopen_SDOC_InBuff == CANopen_SDOC_Seg_BuffSize)
{
 i=&amp;nbsp; 7-(CANopen_SDOC_Seg_BuffSize%7);//bytes in last frame
[color=#f00] if(i==7)i=0;[/color]//set all data bytes
 CANopen_Msg_Obj.data[0] |= (i&amp;lt;&amp;lt;1) | 0x01;/* save length */
 CANopen_SDOC_State = CANopen_SDOC_Succes;/* set state to success */
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note: With this error data of the last frame (if it's a full frame / data = 7) are ignored in segmented transfer and SDO buffer isn't filled completely...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:27:14 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:27:14Z</dc:date>
    <item>
      <title>Error in AN11238: LPC11Cxx CANopen network demo</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Error-in-AN11238-LPC11Cxx-CANopen-network-demo/m-p/528335#M9588</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Sat Feb 28 15:21:23 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;AN11238: LPC11Cxx CANopen network demo&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fnxpfile%2Fan11238-lpc11cxx-canopen-network-demo-0" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.lpcware.com/content/nxpfile/an11238-lpc11cxx-canopen-network-demo-0&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;is including a frame length calculation error in void CAN_RX() of canopen_driver.c&amp;nbsp; :(( &lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
/* if end of buffer has been reached, then this is the last frame */
if(CANopen_SDOC_InBuff == CANopen_SDOC_Seg_BuffSize)
{
 CANopen_Msg_Obj.data[0] |= ([color=#f00](7-(CANopen_SDOC_Seg_BuffSize%7)[/color])&amp;lt;&amp;lt;1) | 0x01; /* save length */
 CANopen_SDOC_State = CANopen_SDOC_Succes;/* set state to success */
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;This part should calculate n: indicates the number of bytes that do not contain data (bytes 8-n to 7 do not contain data):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That's working correct for (CANopen_SDOC_Seg_BuffSize%7)&amp;nbsp; &amp;gt; 0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#30f]&lt;/SPAN&gt;&lt;STRONG&gt;Sample #1:&lt;/STRONG&gt;&lt;SPAN&gt;[/color] CANopen_SDOC_Seg_BuffSize = 72&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For segmented transfer there are 11 frames necessary, the last frame is containing 2 data bytes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7) = 7-2 = 5&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the last 5 data bytes are not containing data, that's correct.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#30f]&lt;/SPAN&gt;&lt;STRONG&gt;&lt;BR /&gt;Sample #2:&lt;/STRONG&gt;&lt;SPAN&gt;[/color] CANopen_SDOC_Seg_BuffSize = 70&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For segmented transfer there are 10 frames necessary, the last frame is containing 7 data bytes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;n = 7-(CANopen_SDOC_Seg_BuffSize%7) = 7-0 = 7&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the last 7 data bytes are not containing data, that's wrong, they are all including data&amp;nbsp; &lt;SPAN class="lia-unicode-emoji" title=":face_with_open_mouth:"&gt;&lt;LI-EMOJI id="lia_face-with-open-mouth" title=":face_with_open_mouth:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#0c0]Of course the simple solution is change n from 7 to 0&amp;nbsp;&amp;nbsp; &lt;SPAN class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;&lt;LI-EMOJI id="lia_slightly-smiling-face" title=":slightly_smiling_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/color] &lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;/* if end of buffer has been reached, then this is the last frame */
if(CANopen_SDOC_InBuff == CANopen_SDOC_Seg_BuffSize)
{
 i=&amp;nbsp; 7-(CANopen_SDOC_Seg_BuffSize%7);//bytes in last frame
[color=#f00] if(i==7)i=0;[/color]//set all data bytes
 CANopen_Msg_Obj.data[0] |= (i&amp;lt;&amp;lt;1) | 0x01;/* save length */
 CANopen_SDOC_State = CANopen_SDOC_Succes;/* set state to success */
}&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note: With this error data of the last frame (if it's a full frame / data = 7) are ignored in segmented transfer and SDO buffer isn't filled completely...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:27:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Error-in-AN11238-LPC11Cxx-CANopen-network-demo/m-p/528335#M9588</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:27:14Z</dc:date>
    </item>
  </channel>
</rss>

