<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MC03 LIN Slave Mode PID 非预期触发响应问题]]></title><description><![CDATA[<h1>1. 问题背景</h1>
<ol>
<li>软件：MCAL_1_0_0 的客户代码</li>
<li>硬件：MC03 EVB</li>
<li>问题描述：</li>
</ol>
<ul>
<li>
<p dir="auto">客户 LIN 通信有 4 个从机节点，从节点 A 反馈报文的 CRC 校验和正好和从节点 B 的 PID 相同，就出现了从节点 B 异常反馈的情况。<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/e411407a-041a-4c7f-a577-e4406ab61a0f.png" alt="6a27b0af-885c-4e5d-bfa1-f08e15ef16bd-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">0x8E 是 LIN 从节点 A 的校验和，正常从机响应的情况下应该是最后位，但由于 0x8E 是从节点 B 的 PID， 所以紧接着 0x8E 后面，从节点 B 又响应发送了 0xFF 和 0x3F ，此时从节点 B 就触发了LIN_ERR_RESP_STOPBIT 的错误。</p>
</li>
</ul>
<h1>2. 问题分析</h1>
<p dir="auto">2.1 环境搭建</p>
<ol>
<li>
<p dir="auto">TSMaster 做为 LIN Master 发送 ID 为 0x0D 的从机响应<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/56cd64da-b955-47dc-9d9a-a6435baa78cb.png" alt="c966ab9b-23af-48e8-b669-ebb14eca3bf8-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">MC03 EVB Rev_A 作为从节点 A，基于 MCAL1_0_0 Lin_Slave_Demo 修改，响应 ID 为 0x0D 的报文，回复数据：0xFF, 0x7F, 0x00, 0x02, 0xE2, 0xFF, 0xFF, 0xFF，校验和为 0x8E<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/6a61ed42-1fdf-452a-90d0-fafdadb7cd6e.png" alt="4d34f150-2774-4cc4-bece-ff7c495ae4d1-image.png" class=" img-fluid img-markdown" /></p>
</li>
<li>
<p dir="auto">MC03 EVB Rev_B 作为从节点 B，直接烧入客户工程，响应 ID 为 0x0E（PID 为 0x8E） 的报文</p>
</li>
</ol>
<h2>2.2 尝试复现</h2>
<ol>
<li>使用逻辑分析仪抓取总线的波形，波形呈现的情况跟客户现场情况一致，从节点 A 的校验和为 0x8E，与从节点 B 的 PID 相同，从而导致从节点 B 出现了异常响应<br />
<img src="https://yt-static-main.oss-cn-shanghai.aliyuncs.com/nodebb/710/b5ba1441-5bd6-48ea-9290-a1c4ead13df5.png" alt="1802c92f-e9e8-43c7-a136-6c796506b1d2-image.png" class=" img-fluid img-markdown" /></li>
</ol>
<p dir="auto">2.3 根因分析</p>
<ol>
<li>由于客户 LinIf_HeaderIndication 函数中，如果接收到的 PID 与代码设置响应的 PID 不一致，return RetVal 的值就是 E_NOT_OK，而驱动会对 LinIf_HeaderIndication 的返回值做判断，当 LinIf_HeaderIndication 返回值为 E_NOT_OK 的情况时，驱动不会做任何操作，状态机会一直停在接收 PID 的状态下，此时总线上的每一 Byte 都会被当作 PID 接收，因此从节点 A 的校验和 0x8E 就会被从节点 B 当初 PID 接收，并触发异常响应。之所以没有触发枕头超时错误，是因为状态机在接收 PID 模式的时候会关闭帧头超时检测。</li>
</ol>
<pre><code>Std_ReturnType LinIf_HeaderIndication(NetworkHandleType Channel, Lin_PduType* PduPtr)/*PRQA S 1503 # Allow function defined but not used. Conform to design. -HaiLong*/
{
  Std_ReturnType RetVal = E_NOT_OK;
  
  LinIf_SetReceivePID();
  LinIf_SetSendPID();
  LinIdleCounter = LIN_IDLE_HOLD;
  
  if(LinConf_LinChannel_LinChannel_0 == Channel)
  {
      if (SendConfigPid == PduPtr-&gt;Pid)
      {
          PduPtr-&gt;Cs = LIN_ENHANCED_CS;
          PduPtr-&gt;Dl = 8U;
          PduPtr-&gt;Drc = LIN_SLAVE_RESPONSE;
          PduPtr-&gt;SduPtr = ComLinFrame.ComSendType.ComSendData;
          SlaveResId = SendConfigPid;
          RetVal = E_OK;
      }
      if (RecvConfigPid == PduPtr-&gt;Pid)
      {
          PduPtr-&gt;Cs = LIN_ENHANCED_CS;
          PduPtr-&gt;Drc = LIN_MASTER_RESPONSE;
          MasterResId = RecvConfigPid;
          RetVal = E_OK;
      }
      if(LIN_Calculate_PID(0x3CU) == PduPtr-&gt;Pid)
      {
          PduPtr-&gt;Cs = LIN_CLASSIC_CS;
          PduPtr-&gt;Drc = LIN_MASTER_RESPONSE;
          MasterResId = 0x3C;
          RetVal = E_OK;          
      }
      if(LIN_Calculate_PID(0x3DU) == PduPtr-&gt;Pid)
      {
          PduPtr-&gt;Cs = LIN_CLASSIC_CS;
          PduPtr-&gt;Dl = 8U;
          PduPtr-&gt;Drc = LIN_SLAVE_RESPONSE;
          
          if(L_Data_Request(LinTpDiagData.ui8_LinTpDiagResponse) == E_OK)
          {
            PduPtr-&gt;SduPtr = LinTpDiagData.ui8_LinTpDiagResponse;
            RetVal = E_OK;
          }
          else
          {
            /*do nothing*/
          }
          SlaveResId = 0x3D;
      }
  }
  return RetVal;
}
</code></pre>
<h2>2.4 解决方案</h2>
<p dir="auto"><strong>1. MCAL_1_0_0 中 LinIf_HeaderIndication 函数的返回值必须 E_OK</strong></p>
<h1>3. 补充说明</h1>
<p dir="auto"><strong>1. MCAL_2_3_0 驱动已经修复了这个风险点</strong></p>
]]></description><link>https://forum.ytmicro.com/topic/1909/mc03-lin-slave-mode-pid-非预期触发响应问题</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 14:11:53 GMT</lastBuildDate><atom:link href="https://forum.ytmicro.com/topic/1909.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Apr 2026 03:17:52 GMT</pubDate><ttl>60</ttl></channel></rss>