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.

[参考译文] TMS320F280049C:LIN 命令器在发送标头时不发送数据

Guru**** 2609955 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1573142/tms320f280049c-lin-commander-not-send-data-while-trasmitting-header

器件型号:TMS320F280049C
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好、专家、需要帮助

我正在使用标头 (break+sync+id+data+checksum) 传输 teh 数据时使用 LIN 协议、数据将仅忽略接收到的标头。 为了供您参考、我上传了相应的代码和示波器输出。 另请注意、在  LIN_isTxReady 检查之后、由于代码函数中的标志问题而进入 while 循环

静态内联 bool
lin_isTxReady (uint32_t base)
  //
  //检查参数。
  //
  断言 (lin_isBaseValid (base));

  //
  //读取 Tx 缓冲区标志并返回状态
  //
  return ((HWREGH (BASE + LIN_O_SCIFLR)& LIN_SCIFLR_TXRDY)=
      LIN_SCIFLR_TXRDY);
}





请引导我。


工程

#include “driverlib.h"</s>“
#include “device.h"</s>“
#include “lin.h"</s>“

Uint16_t txData[3]={0x110x22、0x33};

void main (void)
  设备初始化 ();
  device_initGPIO()

  /* LIN A 的 pinmux */
  GPIO_setPinConfig (DEVICE_GPIO_CFG_LINTXA);
  GPIO_setPinConfig (DEVICE_GPIO_CFG_LINRXA);

  SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_LINA);

  /*初始化 LIN 模块并设置指挥官模式*/
  LIN_initModule (LINA_BASE);
  LIN_setLINMode (LINA_BASE、LIN_MODE_LIN_Commander);

  /*(可选)如果要在总线上检查奇偶校验位、则启用奇偶校验*/
  LIN_enableParity (LINA_BASE);

  /*带有奇偶校验位的构建 ID */
  uint16_t id = lin_generateParityID (0x12);  // 0x12 是您的 6 位 ID

  /*帧长度= 3 字节*/
  LIN_setFrameLength (LINA_BASE、3U);

  while (1)
  {
    /*设置 ID 字节(在指挥官模式下对其进行写入会启动报头传输)*/
    LIN_setIDByte (LINA_BASE、ID);

    /*发送数据块(在标头后发送响应字段)*/
    LIN_sendData (Lina_base、txData);

    /*在下一个事务之前等待 TX 缓冲区准备就绪*/
    while(!lin_isTxReady (Lina_base)){/*旋转*/

    DEVICE_DELAY_US (1000000);//帧之间 1s
  }
}
图像只有 break+sync+id、不是数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    为了进行确认、您要发送一个新的标头作为唤醒信号、但此标头会被忽略? 请注意、SCIFLR.TXRDY 用于指示发送缓冲器何时准备好进行下一次传输。 在传输期间需要正确清除和管理该标志。

    • 对于数据传输序列、当前代码序列为:
      • LIN_setIDByte (LINA_BASE、ID);
        LIN_sendData (Lina_base、txData);
        while(!lin_isTxReady (Lina_base)){/*旋转*/}
    • 推荐的代码为:
      • //首先将数据放入发送缓冲区
        LIN_sendData (Lina_base、txData);

        //然后设置 ID 以启动标头传输
        LIN_setIDByte (LINA_BASE、ID);

        //使用 TXRDY 标志等待传输完成
        while(!LIN_isTxReady (Lina_base)){
        //可选:添加超时机制
        }

    您是否已经尝试过上述顺序、问题仍然存在?

    此致、

    Allison

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

    感谢您发送编修  

    我 尝试了两种方式。 示例中采纳了您的建议、我也尝试了在这种情况下观察 pid(标头)、但在总线中未观察到数据。


    在发送标头然后发送 sendData 时、响应器是否需要响应?  我想没有任何程序..!


    我还连接了同一个电路板作为重新采样器并检查 RxMatch 的工作、但 getData 返回空到 RxData、因为数据不是在仅传输和确认的总线标头中进行通信。

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

    Allison 我在使用 CCS 工具调试器时收到错误、它的寄存器映射问题?



    我选择了正确的电路板、您可以在 syscfg 的 CCS 图像中看到

    我已将 58 59 引脚配置为 LIN Rx TX

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

    您好:

    您使用的 CCS 和 C2000Ware 版本是什么? 除了 LIN 之外的其他寄存器是否也是如此? 将寄存器添加到表达式窗口时是否会填充它们?

    此致、

    Allison

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

    CCS 版本:20.3.

    Coverwave:6.0

    o 有像内核(PC,累加器)所有工作正常的寄存器,只是 LIN 寄存器没有得到.


    是否存在.gel 问题?  显示的连接状态。 


    将寄存器从 3 更改为 1 后、可以访问寄存器。



    有一个问题、我看到我发送代码中提到的{0x11、0x22、0x33}、但仅在位置 TD0 和 TD2 中重新响应了 0x33、没有任何其他数据  

    与 sendData is 函数一样、使用 3U 作为 TD 寄存器的位置 、但在我的例子中会出错  

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

    您好:

    为了进行验证、您是否能够在不进行修改的情况下成功运行 F28004x 环回示例? 您的 LIN 初始化配置是什么?

    此致、

    Allison

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

    内部环回的演示代码的工作原理是我 通过禁用它并连接外部 Rx TX 引脚(排序)、该引脚也可以正常工作。  

    下面是我尝试 Lina 的工程、它在指挥官模式下处于活动状态、引脚 58 59、波特率为 9600。 我向转换器 IC TLIN1021A-Q1 的 Rx 施加了内部上拉电阻、向 LIN 数据施加了外部上拉电阻。  

    e2e.ti.com/.../lin_5F00_commander.zip

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

    您好:

    最好知道该示例适合您。 我建议将您自己的工程与初始化和流程方面的参考代码进行比较。 请再给我 1-2 天时间、让我简要回顾一下您的项目。

    此致、

    Allison

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

    您好 Allison、了解所有更新  

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

    尊敬的 Umang:  

    感谢您的耐心。 我仍在花时间审核您的项目、并将于明天跟进。 如果您的分析也有任何变化或更新、请告知我。

    此致、

    Allison

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

    Allison 我在数据表中看到、一个寄存器调用 SCIGCR1 在 f280049c 中配置 LIN 协议。我在 CCS 中调试了该协议。我发现、在寄存器中 、当 lin_init 运行时、TXENA 和 RXENA 的位不会变为 1。 我手动设置为 1、但仍然无法仅发送标头传输扩展帧(标头+数据)。 花点时间、请帮助我解决问题。  

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

    您好:

    我尚未发现您当前的代码实现存在问题。 您能描述一下您的硬件连接吗? 是否循环回从 f280049c 发送的标头? 该问题之前实际上已经出现,但它已通过正确的 LIN 硬件连接得到解决 — 请参阅之前的 E2E  LAUNCHXL-F280039C 中的解决方案答案: LIN_EX7_EXTERNAL_LOOPBACK 。

    此致、

    Allison

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

    您好 Allison、我的问题已通过该解决方案得到解决(通过放入 lin_enableExtLoopback (lina_base、lin_loopback_analogic、lin_analog_loop_tx))。

    感谢你的帮助。

    此致、

    Umang Gajjar