<?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>LPC MicrocontrollersのトピックRe: lpc1768 can 总线 bus_off 如何恢复</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573444#M18810</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;你好！&lt;/P&gt;&lt;P&gt;&amp;nbsp; 如果的确是由于出错引起的bus off，按照这样的方法是容易恢复的。&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在需要确认下，你这个bus off是不是发送出错导致的，因为按照你一楼的做法，也就是出错处理里面，你贴出的这段话：&lt;/P&gt;&lt;P&gt;&lt;EM&gt;如果CANxMOD中的RM位为1，就可以写Tx和Rx错误计数器。向Tx错误计数器写入255将强制CAN控制器进入总线关闭状态。 如果总线关闭（CANxSR中的BS位）为1，向Tx错误计数器写入0~254之间的任何值都将清除总线关闭状态。 软件清除CANxMOD中的RM位之后，恢复操作之前只需要一个总线空闲条件（11个连续的隐性位）。&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&amp;nbsp; 所以，你可以debug看下，如果出错的时候，是否满足如下条件：&lt;/P&gt;&lt;P&gt;&lt;EM&gt;下列寄存器位被置位： CANxSR中的BS位、CANxIR中的BEI和EI位（如果已使能），以及CANxMOD中的RM位。&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 因为，GSR寄存器平时是只读的，只有在RM位为1的时候才能够写，所以你代码中要加个判断，然后debug看看，是否是RM=1了，同时检查下BS位是否为1， 然后写GSR[TXERR] =0， 软件再清除下RM位， 看你一楼贴的代码，顺序有问题了。&lt;/P&gt;&lt;P&gt;&amp;nbsp; 1. 检查RM=1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 2，检查BS=1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 3，GSR[TXERR] =0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 4，RM清零&lt;/P&gt;&lt;P&gt;5，等待下&lt;/P&gt;&lt;P&gt;&amp;nbsp; 然后再看看是否已经恢复了。&lt;/P&gt;&lt;P&gt;现在一共两种方法，你都试试。&lt;/P&gt;&lt;P&gt;测试之后，把结果也贴上来便于我这边分析。&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Jingjing&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>Wed, 27 Jul 2016 08:11:04 GMT</pubDate>
    <dc:creator>kerryzhou</dc:creator>
    <dc:date>2016-07-27T08:11:04Z</dc:date>
    <item>
      <title>lpc1768 can 总线 bus_off 如何恢复</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573441#M18807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;您好，&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lpc1768 芯片， can 总线节点进入bus_off状态，根据 LPC17xx User Manual 的处理方法，代码如下：&lt;/P&gt;&lt;P&gt;LPC_CAN1-&amp;gt;MOD = 1; // Enter Reset Mode&lt;/P&gt;&lt;P&gt;&amp;nbsp; LPC_CAN1-&amp;gt;GSR = 0; // clear tx error counter&lt;/P&gt;&lt;P&gt;&amp;nbsp; LPC_CAN1-&amp;gt;CMR = (1&amp;lt;&amp;lt;1)|(1&amp;lt;&amp;lt;2)|(1&amp;lt;&amp;lt;3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; LPC_CAN1-&amp;gt;MOD = 0;// Return Normal operating&lt;/P&gt;&lt;P&gt;等待128个Bus Free condition 后， 节点依然无法恢复正常工作。请问该如何解决？使节点能恢复正常工作模式。&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 15 Jul 2016 06:06:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573441#M18807</guid>
      <dc:creator>yeqing85123</dc:creator>
      <dc:date>2016-07-15T06:06:50Z</dc:date>
    </item>
    <item>
      <title>Re: lpc1768 can 总线 bus_off 如何恢复</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573442#M18808</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp; 楼主你好！&lt;/P&gt;&lt;P&gt;&amp;nbsp; 关于bus off的恢复方法，在User manual中是这么说的：&lt;/P&gt;&lt;P&gt;Mode bit '1' (present) and an Error Warning Interrupt is generated, if enabled. Afterwards the Transmit Error Counter is set to '127', and&lt;/P&gt;&lt;P&gt;the Receive Error Counter is cleared. It will stay in this mode until the CPU clears the Reset Mode bit. Once this is completed the CAN&lt;/P&gt;&lt;P&gt;Controller will wait the minimum protocol-defined time (128 occurrences of the Bus-Free signal) counting down the Transmit Error&lt;/P&gt;&lt;P&gt;Counter. After that, the Bus Status bit is cleared (Bus-On), the Error Status bit is set '0' (ok), the Error Counters are reset, and an Error&lt;/P&gt;&lt;P&gt;Warning Interrupt is generated, if enabled. Reading the TX Error Counter during this time gives information about the status of the&lt;/P&gt;&lt;P&gt;Bus-Off recovery.&lt;/P&gt;&lt;P&gt;&amp;nbsp; 按照上面的说明，应该是Transmit Error Counter 被置为了127, 这时候，人为清除RM（Reset mode）位， 然后CAN控制器等待128个bus free信号，发送错误计数器进行递减，然后总线状态位恢复，Error状态位为0， Error 计数器复位。&lt;/P&gt;&lt;P&gt;&amp;nbsp; 所以，我认为你可以试试：&lt;/P&gt;&lt;P&gt;LPC_CAN1-&amp;gt;MOD &amp;amp;= fffffffe; // 清除RM位&lt;/P&gt;&lt;P&gt;然后使用while等待CANnGSR[TXERR]到0， 之后，再查看bus状态， Error状态。&lt;/P&gt;&lt;P&gt;但是有个前提，一般出现错误，和外部总线硬件也有关系，建议你先移除总线上其他的CAN节点，只留一个CAN调试器供测试，防止出现一种情况，实际上总线恢复了，但是由于总线上其他节点的原因，又导致该CAN节点进入的bus off状态。&lt;/P&gt;&lt;P&gt;&amp;nbsp; 楼主可以再参考我说的方法在你那边试下。&lt;/P&gt;&lt;P&gt;&amp;nbsp; 如果还有问题，欢迎继续交流！&lt;/P&gt;&lt;P&gt;&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>Tue, 26 Jul 2016 07:11:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573442#M18808</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-07-26T07:11:40Z</dc:date>
    </item>
    <item>
      <title>Re: lpc1768 can 总线 bus_off 如何恢复</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573443#M18809</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Jingjing Zhou,您好，谢谢你提供的帮助！我试试看。我这个问题只有在初次上电的时候才偶尔会出现，初始化过程是在所有其他需要初始化的东西初始化ok后，延时500ms,再初始化的can，如果上电后，节点工作正常，基本不会再出问题。另外我看&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;User manual中CAN controller operation 的 Error handling 中有：&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;The Tx and Rx error counters can be written if RM in CANxMOD is 1. Writing 255 to the&lt;/P&gt;&lt;P&gt;Tx Error Counter forces the CAN Controller to Bus-Off state. If Bus-Off (BS in CANxSR) is&lt;/P&gt;&lt;P&gt;1, writing any value 0 through 254 to the Tx Error Counter clears Bus-Off. When software&lt;/P&gt;&lt;P&gt;clears RM in CANxMOD thereafter, only one Bus Free condition (11 consecutive&lt;/P&gt;&lt;P&gt;recessive bits) is needed before operation resumes.&lt;/P&gt;&lt;P&gt;，按理解，应该是很容易恢复的。此外，当节点上电后异常，处于Bus-Off 状态时，我有量测总线的波形很正常。谢谢！&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Jul 2016 09:21:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573443#M18809</guid>
      <dc:creator>yeqing85123</dc:creator>
      <dc:date>2016-07-26T09:21:57Z</dc:date>
    </item>
    <item>
      <title>Re: lpc1768 can 总线 bus_off 如何恢复</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573444#M18810</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;你好！&lt;/P&gt;&lt;P&gt;&amp;nbsp; 如果的确是由于出错引起的bus off，按照这样的方法是容易恢复的。&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在需要确认下，你这个bus off是不是发送出错导致的，因为按照你一楼的做法，也就是出错处理里面，你贴出的这段话：&lt;/P&gt;&lt;P&gt;&lt;EM&gt;如果CANxMOD中的RM位为1，就可以写Tx和Rx错误计数器。向Tx错误计数器写入255将强制CAN控制器进入总线关闭状态。 如果总线关闭（CANxSR中的BS位）为1，向Tx错误计数器写入0~254之间的任何值都将清除总线关闭状态。 软件清除CANxMOD中的RM位之后，恢复操作之前只需要一个总线空闲条件（11个连续的隐性位）。&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&amp;nbsp; 所以，你可以debug看下，如果出错的时候，是否满足如下条件：&lt;/P&gt;&lt;P&gt;&lt;EM&gt;下列寄存器位被置位： CANxSR中的BS位、CANxIR中的BEI和EI位（如果已使能），以及CANxMOD中的RM位。&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 因为，GSR寄存器平时是只读的，只有在RM位为1的时候才能够写，所以你代码中要加个判断，然后debug看看，是否是RM=1了，同时检查下BS位是否为1， 然后写GSR[TXERR] =0， 软件再清除下RM位， 看你一楼贴的代码，顺序有问题了。&lt;/P&gt;&lt;P&gt;&amp;nbsp; 1. 检查RM=1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 2，检查BS=1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 3，GSR[TXERR] =0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 4，RM清零&lt;/P&gt;&lt;P&gt;5，等待下&lt;/P&gt;&lt;P&gt;&amp;nbsp; 然后再看看是否已经恢复了。&lt;/P&gt;&lt;P&gt;现在一共两种方法，你都试试。&lt;/P&gt;&lt;P&gt;测试之后，把结果也贴上来便于我这边分析。&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Jingjing&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>Wed, 27 Jul 2016 08:11:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573444#M18810</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2016-07-27T08:11:04Z</dc:date>
    </item>
    <item>
      <title>Re: lpc1768 can 总线 bus_off 如何恢复</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573445#M18811</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Kerry Zhou，感谢您提供上述的bus_off恢复的方法。我用的是LPC1768,CAN跑一段时间后，收发数据都不正常。然后按您提供的方法去查询寄存器内容，&lt;/SPAN&gt;此时RM=1了，同时检查下BS位为1， 然后写GSR[TXERR] =0， 软件再清除下RM位:&amp;nbsp;&lt;/P&gt;&lt;P style="border: 0px;"&gt;&amp;nbsp; 1. 检查RM=1&lt;/P&gt;&lt;P style="border: 0px;"&gt;&amp;nbsp; 2，检查BS=1&lt;/P&gt;&lt;P style="border: 0px;"&gt;&amp;nbsp; 3，GSR[TXERR] =0&lt;/P&gt;&lt;P style="border: 0px;"&gt;&amp;nbsp; 4，RM清零&lt;/P&gt;&lt;P style="border: 0px;"&gt;&amp;nbsp; 5，等待下&lt;/P&gt;&lt;P style="border: 0px;"&gt;按此方法后，CAN恢复正常收发。请问您这是什么原因造成的bus_off。另外我的使用环境是LPC1768与其他的七个CAN模块设备通讯。&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Apr 2020 08:42:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/lpc1768-can-%E6%80%BB%E7%BA%BF-bus-off-%E5%A6%82%E4%BD%95%E6%81%A2%E5%A4%8D/m-p/573445#M18811</guid>
      <dc:creator>897143634</dc:creator>
      <dc:date>2020-04-07T08:42:33Z</dc:date>
    </item>
  </channel>
</rss>

