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.

[参考译文] LAUNCHXL-F280039C:LIN 显示物理总线错误和奇偶校验错误(PBE &PE)、但 LIN_getData 获得正确的命令

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1509179/launchxl-f280039c-lin-showing-physical-bus-errors-and-parity-errors-pbe-pe-but-lin_getdata-obtains-right-command

器件型号:LAUNCHXL-F280039C
主题: C2000WARE 中讨论的其他器件

工具/软件:

大家好:

我正在开发一个需要 LIN 通信的原型、因此我会告诉大家我的硬件和软件设置:

硬件:

  • LAUNCHXL-F280039C 作为具有以下引脚的从节点:
    • GPIO37 (LINTX)
    • GPIO33 (LINRX)
    • GPIO30 (WK)
    • GPIO47 (EN)
  • MIKROE-3816:包含一个 TLE7259-3
  • 矢量 VN1630:作为主节点

软件:  

  • C2000Ware 4.01.00

我的软件实现非常简单:

 #include "board.h"

 uint16_t rxData[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

 void LinBase_Init(void)
 {
    LIN_initModule(LIN_VEHICLE_BASE);
    //
    // Enter Software Reset State
    //
    LIN_enterSoftwareReset(LIN_VEHICLE_BASE);
    LIN_setLINMode(LIN_VEHICLE_BASE, LIN_MODE_LIN_SLAVE);
    LIN_setCommMode(LIN_VEHICLE_BASE, LIN_COMM_LIN_USELENGTHVAL);
    LIN_setDebugSuspendMode(LIN_VEHICLE_BASE, LIN_DEBUG_COMPLETE);
    LIN_setChecksumType(LIN_VEHICLE_BASE, LIN_CHECKSUM_ENHANCED);
    LIN_setMessageFiltering(LIN_VEHICLE_BASE, LIN_MSG_FILTER_IDSLAVE);
    LIN_setBaudRatePrescaler(LIN_VEHICLE_BASE, 388U, 14U); //19236 bps
    LIN_setFrameLength(LIN_VEHICLE_BASE, 8U);
    LIN_setSyncFields(LIN_VEHICLE_BASE, 5U, 3U);
    LIN_setTxMask(LIN_VEHICLE_BASE, (uint16_t)(0xFFU));
    LIN_setRxMask(LIN_VEHICLE_BASE, (uint16_t)(0xFFU));
    LIN_enableParity(LIN_VEHICLE_BASE);
    LIN_enableMultibufferMode(LIN_VEHICLE_BASE);

    //
    // Finally exit SW reset and enter LIN ready state
    //
    LIN_exitSoftwareReset(LIN_VEHICLE_BASE);

    //Wake to LOW to assure WK pin on transiever on high
    GPIO_writePin(DIO_LIN_WK, 0);
    // EN to HIGH to assure the trainsiever is on NORMAL mode
    GPIO_writePin(DIO_LIN_EN, 1);
 }

//The cyclic task is being called every 100 us
 void LinBase_CyclicRx(void)
 {
    if(LIN_isRxMatch(LIN_VEHICLE_BASE))
    {
        /*
            Read the received data in the receive buffers then
            Clear the Interrupt status
        */
        LIN_getData(LIN_VEHICLE_BASE, rxData);
        LIN_clearInterruptStatus(LIN_VEHICLE_BASE, LIN_INT_ALL);
    }
 }

因此、您知道收发器正在正常工作、因为它向 TX 引脚发送 LIN 接头和命令、下面有一些示波器证据:
 

通过这种配置、C2000可以读取主请求并将其转储到 rxData 数组中。

但是、我在 SCIFLR 上看到以下错误(正在设置 PBE、NRE、PE)。

所以这里有一些想法:

1.至于现在主器件正确发送标头和命令

2、配置和任务执行的是预期的,因为它获得了正确的 LIN 命令。

3、根据用户手册:

  • PBE 是一个错误、表示 LIN 线路短接至 VBAT 或 GND (但由于我们有示波器图像、我们可以看到没有发生这种情况)
  • 当在 TFRAME_MAX 内没有对主器件的标头做出响应时、会设置 nRE 位、但情况不应如此、因为在此消息中、主器件正在发送标头和帧。
  • PE 位表示奇偶校验错误、在这种情况下、我不知道如何进行故障排除、我再次检查了波特率(正确)、我不知道是否需要更多配置。

在这方面、我希望得到你们的支持、因为我已经花了几天的时间努力找出一个简单的例子。

谢谢、

Martin

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

    尊敬的 Martin:

    您在检查这些错误的确切位置是什么? 您是直接向 LIN RX ISR 添加断点了吗? 我怀疑这些标志可能是由于仿真而引发的、并且可能不是实际的错误(可能当 CPU 在断点中暂停时、LIN 状态机会以某种方式被抛出)。

    要进行检查、您能否尝试在其中一个 LIN 中断线路上启用这些中断并查看它们是否实际进行了分支? 或者、如果出现错误标志、您可以添加在 ISR 中递增的计数器、并在调试器中启用 Continuous Refresh 来查看它们是否递增。 这些方法可以更好地指示这些情况是否实际发生。  

    此致、

    Delaney