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.

[参考译文] TMS570LC4357:FlexRay 将节点集成到现有网络中

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/754680/tms570lc4357-flexray-integrating-node-into-existing-network

器件型号:TMS570LC4357

您好!

我目前正在尝试使用 TMS570LC43x Hercules 开发套件和此处提供的 FlexRay 接口板创建 FlexRay 节点: processors.wiki.ti.com/.../HDK_FlexrayCanLin_Daughter_Crad.zip

我正在运行以下链接中提供的演示代码:processors.wiki.ti.com/.../TMS570LS31x_HDK_Kit

我在其中更改的是配置参数、因为这些参数对于我尝试连接的网络是不同的、并且我删除了控制器进入冷启动模式的部分、因为网络已经打开、所以不需要这样做。

网络由 VN7600 :www.vector.com/.../生成

也就是说、作为一项功能、它不需要另一个节点来冷启动网络。 我可以在独木舟内发送 FlexRay 消息。

我的问题是、如何在该网络中使用 TMS570LC43x 集成新节点?

在我的初始实验中、代码在以下行停止:

while (((Fray_PST->SIR_UN.SIR_UL & 0x4)= 0x0);//等待 CYC 中断标志 

我尝试删除此检查、因为虽然它在传输某些数据时非常有用、但对于此节点、我只想从总线读取数据。

这样做后、我检查了大多数寄存器、发现在 PoE 下的 CCSV 中、值为39D = 0x27。

在文档下、该状态指的是 integration_listen 状态。 查看状态图以及节点可以退出该状态的条件、可以看到它侦听启动帧、然后退出到以下状态。

这对我来说有点奇怪。 由于 FlexRay 网络已经启动并正在运行、并且启动帧已经发送、这是否意味着在网络启动后无法添加新节点? 如何配置 TMS570LC43x 以将其自身集成到已经冷启动的网络中?

FlexRay 有很多分散的信息、我可能只是错过了一些简单的东西、但如果有人对此有一个想法、那会很棒。

谢谢、

Adrian。

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

    群集中有多少个节点? 在由三个或更多节点组成的群集中,至少应将三个节点配置为冷启动节点。 在由两个节点组成的群集中,两个节点都必须是冷启动节点。 启动群集至少需要两个无故障冷启动节点。 每个冷启动节点也是一个同步节点。

    PLL2应该被用于 FlexRay。 PLL2的频率应配置为80MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、

    群集中有三个以上的节点、有三个以上的节点配置为冷启动节点、尽管不是我的 TMS570板、因为我认为这是不必要的、因为网络已经启动并在运行。
    我将检查 PLL2以查看其配置是否正确。

    虽然我仍然不清楚将节点连接到已冷启动的网络时会发生什么情况、因为它应该侦听一些已发送的同步启动帧。

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

    您好!

    实际上、问题似乎更有可能是 PLL2配置不当。 现在、我已经成功地将节点集成到网络中、并且我能够在新的数据寄存器中看到、在我配置的缓冲区中、我有一些数据。

    不过,我仍有一些问题。

    在示例代码中、即使将缓冲区配置为 RX 缓冲区、在设置所有参数后、仍有一个对 FR_TransmitTxLPdu 的调用、我不明白为什么这很重要以及它如何影响一切。

    //缓冲区#10
    FR_LPduptr ->fid = 10; //帧 ID
    FR_LPdutr->DP = 0x240;//消息 RAM
    中数据起始的指针 FR_LPdutr->cfg = 0;// RX 帧
    FR_LPdutr->CRC = 0;
    
    FR_LSduptr->ibrh = 10;//输入缓冲器编号
    
    FR_LPdutr (Fray_LPtudt
    );LPtr trl 

    这是取自 FlexRay 示例的代码片段。

    2.消息缓冲器数据和输出缓冲寄存器之间的传输是如何发生的?

    目前,我已尝试查看接收到的数据是否正在变化,但在输出缓冲寄存器( RDDS )中,只有零。 我已经从演示中更改了配置、以匹配我已更改的内容、因为我只将一个消息缓冲器、第一个缓冲器、设置为接收消息缓冲器。

    read_buffer->obrs=1;//输出缓冲区编号
    read_buffer->rdss=1;//读取数据段
    read_buffer->rhss=0;//读取标头段
    //将消息缓冲器1数据传输到输出缓冲寄存器
    FR_ReceiveRxLPdu (Fray_PST、Read_buffer);
    if (Fray_PST->RDDS[1]!= 0x87654321) ERROR++; 

    在配置 FlexRay 模块时提供的示例代码中、以下行用于初始化中断:

    //初始化中断
    Fray_PST->EIR_UN.EIR_UL = 0xFFFFFFFF;//清除错误内部
    fray_pst->SIR_UN.SIR_UL = 0xFFFFFFFF;//清除状态内部
    fray_pst->SILS_UN.SILS_UL = 0x00000000;//所有状态内部 至 eray_int0
    Fray_Pst->SIER_UN.SIER_UL = 0xFFFFFFFF;//禁用所有状态内部
    FRAY_PST->SIES_UN.SIES_UL = 0x00000004;//启用 CYCSE 内部
    fray_pst->Ile_un.Ile_UL = 0x00000002;//启用 eray_INT1 

    可以看到寄存器 SILS_UN 被置位、这样所有状态中断被分配给中断线路 eray_int0。 但是、当设置 Ile_UN 寄存器时、通过放置值0x00000002、只启用 eray_INT1中断线路。 我的问题是:不应该同时启用两个中断线路、或者至少启用 eray_int0、因为所有状态中断都已分配给它?

    谢谢、

    Adrian。

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

    我假设您已经解决了您的问题。