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.

[参考译文] TMS320F2800155-Q1:LIN 通信故障

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1336611/tms320f2800155-q1-lin-communication-failure

器件型号:TMS320F2800155-Q1
主题中讨论的其他器件:C2000WARE

大家好、

以下是客户可能需要您的帮助的问题:

当我与 LIN 通信时、LinaRegs.SCIFLR.bit.PE = 1|和 LinaRegs.SCIFLR.bit.FE = 1在 LIN 通信中将触发错误、导致无法中断 LIN 中的通信。 目前、我采用复位 SWnRESET 的方法来解决这个问题。 但仍然会有错误帧、也就是机器没有响应的现象、你好、我想问一下是否有更好的解决方案? 以及为什么 LinaRegs.SCIFLR.bit.PE = 1且 LinaRegs.SCIFLR.bit.FE = 1。

--

谢谢、此致

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

    你好,耶鲁,

    我有几个澄清问题、然后才能提出任何建议。

    1. 它们使用 LIN 模块的 LIN 模式还是 SCI 模式?
    2. 如果使用 LIN 模式、C2000器件是作为控制器还是响应器运行?
    3. 他们使用什么器件来传输到 C2000?
    4. 您是说在设置 SWnRESET 位(用于清除 PE 和 FE 标志)后、接收到的数据继续存在这些错误、因此这些标志再次被设置吗?  
    5. "无法中断 LIN 通信"一词具体是什么意思?  发生这些错误后、RX 中断是否不再触发?
    6. 您能否发送 TX 和 RX 线路的示波器捕获?

    当接收到的数据存在奇偶校验错误时、SCIFLR 寄存器的 PE 标志被置位、这意味着接收到的数据中1的数量与应该存在的1的数量(偶数或奇数)不匹配、 由数据的奇偶校验位指示。  

    当接收到的数据存在帧错误时、SCIFLR 寄存器的 FE 标志会被置位、这意味着接收到的数据字节中有一个缺少停止位、或者未正确检测到停止位。 这表明与发送设备存在同步问题。

    此致、

    德拉尼

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

    尊敬的 Delaney:

    首先,非常感谢您的答复,我将逐一回答您的问题。

    1、我们使用 LIN 模块。

    2、它充当响应者。

    3、Using Tumos' LIN Box。

    4、是、当 SWnRESET 位被置位时、将有数据丢失、并且上部计算机报告的错误没有被从计算机应答。我的理解是、当接收数据错误时、FE、PE 被置位、 然后我将 SWnRESET 位置位、这次不能触发中断、导致从器件 μ。没有回复

    5、是的,我看到的现象是,一旦 PE,FE 设置。 RX、TX 中断不能触发中断

    6、捕获的波形如下。

    这就是我对您的问题的全部答复,期待您的答复。

    此致、

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

    添加通过 LIN 芯片模块处理后发送到 MCU 的信号波形

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

    尊敬的 Zhang:

    您启用了哪些中断标志? LIN 模块的 FE 和 PE 标志不应阻止其他中断的发生。 但是、如果使用 LIN_INT_ID 中断、由于组帧错误而错误读取的标头 ID 字节可能会导致不触发此中断。 您是否在应用中使用任何其他中断(例如、用于不同外设的中断等、这些中断在 PIE 中具有更高的优先级并可能限制 LIN 中断)?

    查看示波器捕获可以发现、数据不应导致成帧错误、因为每个接收到的字节似乎都有一个停止位。 您是否能够尝试发送0xAA 或0x55等数据、以便更容易区分示波器上的位?

    还要注意的是、执行 SWnRESET 并不是清除 FE 和 PE 标志的唯一方法。 您也可以执行以下任一操作:

    • 在 SCIINTVECT0/1寄存器中读取相应的中断偏移量
    • 复位位(SCIGCR0.0)
    • 系统复位
    • 接收新字符(SCI 兼容模式)或帧(LIN 模式)
    • 将1写入 SCIFLR 中的 FE 和 PE 位

    此致、

    德拉尼

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

    尊敬的 Delaney:

    在整个项目中、我使用了计时器中断、PWM 中断和 AD 采样中断。 我想您可以这么说、但我该怎么做、在进入中断后禁用全局中断、然后在执行完成之前打开全局中断? 对于发送的数据、我已经仔细读取了每个数据帧的波形、我可以确认、发送的波形没有问题。

    此致、

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

    尊敬的 Delaney:

    顺便说一下、我使用了 LIN INT ID 中断。

    此致、

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void LIN_init()
    {
    LIN_initModule(LINA_BASE);
    LIN_enableInterrupt(LINA_BASE, LIN_INT_RX);
    LIN_enableInterrupt(LINA_BASE, LIN_INT_ID);
    LIN_setInterruptLevel0(LINA_BASE, LIN_INT_RX);
    LIN_setInterruptLevel1(LINA_BASE, LIN_INT_ID);
    Interrupt_register(INT_LINA_0, &level0ISR);
    Interrupt_register(INT_LINA_1, &level1ISR);
    Interrupt_enable(INT_LINA_0);
    Interrupt_enable(INT_LINA_1);
    LIN_enableGlobalInterrupt(LINA_BASE, LIN_INTERRUPT_LINE0);
    LIN_enableGlobalInterrupt(LINA_BASE, LIN_INTERRUPT_LINE1);
    LIN_clearGlobalInterruptStatus(LINA_BASE, LIN_INTERRUPT_LINE0);
    LIN_clearGlobalInterruptStatus(LINA_BASE, LIN_INTERRUPT_LINE1);
    }
    void LIN_initModule(uint32_t base)
    {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    尊敬的 Delaney:

    这是我的 LIN 通信配置、您能找出什么问题吗?

    此致、

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

    尊敬的 Delaney:

    在我的项目中、我有一个100us 的计时器中断、如果我禁用计时器中断、我的 LIN 通信似乎不会被中断、但如果我启用计时器中断、这会导致 LIN 通信中断、但它不会报告任何错误、 也就是说、不会像正常通信一样在 SCIFLR 中进行任何设置。 我还扩展了计时器中断、该中断导致我的 LIN 通信在断开之前运行更长时间。有没有办法提高我的 LIN 通信中断的优先级? 或者是否有其他方法可以处理它? 非常期待您的答复,谢谢。

    此致

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

    尊敬的 Delaney:

    我也发现了一个问题、硬件电路好像也会干扰我、我想问一下哪些情况会干扰我的 LIN 通信。 具体的现象是、当我在高电压端上电时、会产生电流。 此时、触发 FE 和 PE 的可能性将高得多、当我没有开启高电压和没有电流时、似乎没有错误

    此致、

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

    尊敬的 Zhang:

    我建议查看[C2000ware install]/driverlib/f280015x/examples/interrupt 文件夹中的 interrupt_ex3_sw_priority 示例、了解如何为 LIN 中断提供更高的优先级。 这是一个 使用软件预配置中断优先级的示例。  我相信这会适合您的用例。

    您希望/期望这些中断中的每一个按照您的应用发生的顺序是什么? 对于中断问题、通常情况下、让每个 ISR 在执行期间在 GPIO 引脚上输出一个高电平信号也很有用、这样您就可以确定每个 ISR 何时被调用、并将其与当时接收到的 LIN 数据进行比较。 这将让您了解 LIN 数据为何丢失或接收错误。

    我明天会继续解答您关于硬件的问题。

    此致、

    德拉尼

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

    尊敬的 Zhang:

    LIN RX 线路上的噪声可能导致成帧和/或奇偶校验错误。 LIN RX 线 可能会将逻辑1计数为0或逻辑0计数为1、并错误地检测到数据或获取 LIN ID 等的无效值。 在数据表的第6.6节"电气特性"中、输入信号在达到2.0V (VIH)时计为逻辑高电平、在低于0.8V (VIL)时计为逻辑低电平。 如果您想验证传入信号是否被正确地计为高电平/低电平、您可以测量 任何 噪声尖峰的电压并确保它们处于阈值之内。  

    此致、

    德拉尼

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

    尊敬的 Delaney:

    我们已经解决了问题,问题的根源仍然是硬件的干扰,在此期间,非常感谢你的答复,同时,我希望你越来越漂亮,每天都快乐。

    此致、

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

    尊敬的 Zhang:

    谢谢、我很高兴听到您解决了问题

    如果您有任何疑问或问题、请告诉我。

    此致、

    德拉尼