This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSCNCD28P65X:SCIFLR 溢出位错误置位

Guru**** 2479615 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1447764/tmdscncd28p65x-sciflr-overrun-bit-error-set

器件型号:TMDSCNCD28P65X

工具与软件:

大家好!

我们正在 使用矢量 CANalyzer 和 LIN IG (模拟主器件)对 LIN 响应者(从器件)节点的 LIN 接收阶段进行测试、以便手动和定期发送消息(项目需要100ms 调度)。

在每次消息接收时、我们都会监控 SCIFLR 寄存器值以进行错误/状态分析。

溢出的 OE 标志有时会由外设置位、但并非总是如此、我并不了解原因。

所有其它错误标志(PE、CE 等)如预期的那样为0。

考虑以下因素:

  1. 19.2kbps 是波特率、
  2. 禁用自动波特率检测、
  3. LIN 命令(报头+响应)手动发送、而不是通过 LIN IG 定期发送。

根据"表37-22. spruiz1a –2023年7月–2023年11月修订的 SCIFLR 注册字段说明

那么、这意味着什么?  接收到新消息时、RDY 缓冲区是否有未读字节?

B.R.

Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安德烈、您好!

    很抱歉我的答复被推迟。

    [quote userid="617972" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1447764/tmdscncd28p65x-sciflr-overrun-bit-error-set 收到新消息时 RDY 缓冲区是否有未读字节?

    是的、OE 标志有效地意味着自从新数据进入并在从 RDY 中读取之前覆盖了它以来、接收到的数据已经丢失。 需要查看以下几个方面:

    您是否使用 LIN RX ISR? 该 ISR 的执行是否需要特别长的时间?

    您是否在应用中启用了其他中断? 其可能的较高优先级中断可能会阻止 LIN 中断执行。

    您是否启用了多缓冲器? 如果没有、我建议启用它、以便在需要读取传入数据之前有更多的空间来存储这些数据。

    我还建议为该标志设置中断、以便您可以在每次提出该标志时正确清除它。 通过这种方法、您可以准确地看到这种情况发生的频率。

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

     我试着回答你  

    您使用的是 LIN RX ISR 吗? 此 ISR 的执行是否需要特别长的时间?

    否、我们不使用 ISR 和 DMA、仅使用外设寄存器轮询;我们知道 ISR、DMA 及其交叉使用可以为我们提供帮助(通信外设像往常一样)、但由于工程和架构原因、不能使用它们(应用运行时不使用简单的单调计数器、不使用 RTOS 或类似工具)

    您是否在应用程序中启用了其他中断? 其可能的较高优先级中断可能会阻止 LIN 中断执行[/QUOT]

    我必须与我的同事一起调查 C2000 PIE 配置  

    我还建议为该标志设置中断、以便您可以在每次提出该标志时正确清除该中断。 通过这种方式、您可以准确地看到这种情况发生的频率。

    我想这样做、但由于上述原因、我无法这样做。

    此致、

    Andrea

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Delaney:

     测试 响应 Tx (我们的器件是响应者/从器件)、我们注意到、在成功传输后、传输的数据被复制到 LIN RDY 寄存器中。

    起初、我们无法解释这种行为、但 C2000 RM 可能已经包含了相应的解释。

    如果我们看看下面描述的位错误检测块

    "位监控器 通过读回 LINRX 来确保 LINTX 中传输的位是 LIN 总线上的正确值"。

    该声明解释了将 TDY 发送数据寄存器复制到 RDY 接收数据寄存器中以及下一个 RXRDY 设置。

    这样、当完整的和数(来自主器件的标头+响应)并且仅在仿真中再添加三个标头时、就很容易触发溢出错误

    我们已经在传输阶段的末尾添加了一个权变措施

            /* Transmission completed */
            /* Check of transmission errors*/
            retLinSts = LIN_GetStatus(LIN_CHANNEL_USED);
    		if ((retLinSts & LIN_TX_BIT_ERROR) == LIN_TX_BIT_ERROR)
    		{
    		   retTxStatus = COM_LIN_TX_BIT_ERR;
    	    }
    		else if ((retLinSts & LIN_TX_ERROR) == LIN_TX_ERROR)
    		{
       		   retTxStatus = COM_LIN_TX_ERR_STATUS;
            }	
    		else
    	    {	
      		   retTxStatus = COM_LIN_TX_COMPLETED;
    		   /* Workaround to clear the Rx ready flag set by Tx bytes that are also routed to Rx data registers */
    		   if (LIN_isRxReady(LIN_CHANNEL_USED) == TRUE)
    		   {
    				LIN_ClearRxReady(LIN_CHANNEL_USED);
    		   }
    	    }

    这样、不会触发任何 OE 标志、即使正在进行完整 LIN 调度程序、所有接收和传输都无法成功完成。

    只是为了确认,它是正确的我们的解释?  此行为是否与 RM 中描述的位错误检查的 LIN 模块策略相关(并且顺便说一下)?

    此致

    Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安德烈、您好!

    很抱歉我的答复被推迟。 是的、您提出了一个很好的观点。 LINTX 引脚发送的数据将环回(内部)并在 LINRX 引脚上接收、供位错误校验器使用。 在这种情况下、可以忽略 OE 标志、因为不管怎样它都不是有效的错误(因为您不关心读入这些数据-它将在您的应用中被传送出去)。 不过、如果您想避免完全引发标志、则可以在执行此操作时在软件中清除 RX 就绪标志。

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 

     不用担心、

    你可以看到,我回答几乎一个月后 .

    因此、我们的权变措施按预期运行。

    非常非常好。

    非常感谢。

    K.R.

    Andrea  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安德烈、您好!

    很高兴听到问题已解决、我将关闭此主题、但如果您有任何其他问题、请随时创建新主题。

    此致、

    Delaney