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.

[参考译文] AM2434:Am2434 — 在菊花链中连接时卡网络丢失

Guru**** 2773115 points

Other Parts Discussed in Thread: AM2434, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1607305/am2434-am2434---network-dropping-of-cards-when-connected-in-daisy-chain

器件型号: AM2434
主题: DP83869SysConfig 中讨论的其他部分

你(们)好  

我们使用的是 AM2434 - ind_comms_sdk_am243x_09_02_00_24、我们有一个 DAC 与 am2434 连接、它通过 I2C 通信进行通信。 因此、我们在 EIP 代码实现中为 DAC 流程创建了一个新任务。 由于需要控制电机转速、需要每 10ms 调用一次 DAC 处理任务。 为了实现这一点、我们根据系统节拍添加了 10ms 的调度。

由于 PLC 输入是在以太网任务中处理的、为了避免数据丢失、我们还在 10ms 内添加了 EIP 任务。

以下是我们为 10ms 运行使用的逻辑(EIP 和 DAC 任务):

```c

void EI_APP_TASK_MAIN (void * pvTaskArg_p)

   uint32_t lastCalled = OSAL_getMsTick ();

 

   对于(;;)

   {

       uint32_t now = OSAL_getMsTick ();

       uint32_t elapsed =现在 — 已调用;

       如果(经过时间< 10){

           OSAL_Sched_sleep (10–elaped);

       }

       lastCalled += 10;//保持日程安排紧张

 

   }

}

```μ s

但是、在两个任务中集成此 10ms 计划后、对于几个以 20 张卡菊花链连接的卡、网络会在~2 小时后脱机。

有趣的是,如果我在两个任务中都使用`OSAL_Sched_sleep ()`,则没有脱机问题。

我紧张的时间表实施是否会出现问题?

此外、您能否解释两个任务中解决离线问题的推荐方法?

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

    尊敬的  Yashaswini:

    我不太了解主要任务中让 10ms 进入睡眠状态的逻辑。 这与您的 DAC 任务有什么关系?
    我的基本问题是、什么是实际问题、导致您首先在主要任务中引入延迟?

    此致、
    Pourya

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

    尊敬的 Pourya:

    它实际上并不是我们控制的 LED。 我们使用数模转换器 (DAC) 来控制电机转速。 为了加速电机、我们以增量方式应用速度命令、目前涉及增加延迟。 但是、引入此延迟会导致卡不同步、或者在某些情况下会脱机。

    谢谢你

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

    尊敬的  Yashaswini:

    我不确定 LED 基准的来源;我没有询问任何 LED。

    我的主要观点是、DAC 任务中的控制循环应该与主任务 (EI_APP_TASK_MAIN) 完全分离。
    这就是我要求澄清的原因:
    在主任务 (EI_APP_TASK_MAIN) 中添加延迟的原因是什么?
    您能解释一下引入延迟的逻辑或动机吗?

    此致、
    Pourya

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

    你好 Pourya Eskandari ,  

    我们尝试了你的建议和测试卡正在进行中,目前我们正在测试 20 卡来评估网络,它似乎正在工作. 一旦我们在网络中添加卡(例如 30 张卡)、网络就会中断、卡不响应(所有 30 张卡)、我们期望使用 60 张卡。 此处的团队尝试采纳之前给出的有关固件的建议、但并未表现出任何改进。 这里有一个问题是固件问题  MaxCommunity 设备  要增加网络中的设备(我们已经尝试过但不会生效)、固件中是否需要考虑任何其他设置。 附加屏幕截图以供参考。  

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

    尊敬的 Yash:

    如果您计划在菊花链配置中最多连接 60 个卡、则必须将“lldpMaxCNeighborDevices"参数“参数设置为 60。 无需其他特殊设置即可增加菊花链中支持的器件数量。

    如果您再次遇到通信故障、请尝试确定有问题的节点。 当所有 30 个节点同时停止响应时、这通常表示第一个节点出现故障。 要确认这一点、请从链中卸下节点 1 并将 PLC 直接连接到节点 2、然后检查通信是否恢复。

    隔离故障节点后、请同时提供来自该特定节点的 UART 日志和通信的 Wireshark 捕获、以便进一步诊断。


    此致、
    Pourya  

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

    你好 Pourya Eskandari ,  

    所以我们尝试遵循建议。 我们一个接一个地刷新卡、并在这一点上上升到 27 卡 “lldpMaxNeighborDevices" 值“值是 27。 当我们将值推至 28 时、卡上有一些状态 LED 指示灯、用于指示网络已打开或已关闭。 值 28 或更高时、该 LED 将熄灭。 在调试模式下、观察到的代码卡在 EIP_API_ADP_INIT (adapster_s、initparams) 处。 并且不会执行其他任务。 这也是我们能够在控制台上打印的日志。  

    [bootloader_profile]引导介质      :也不是 SPI 闪存  
    [bootloader_profile]引导介质时钟:100.000MHz  
    [bootloader_profile]引导映像大小 :399 KB  
    [bootloader_profile]存在内核   :  
    r5f0-0
    [bootloader profile] SYSFW init                      :     12161us  
    [bootloader profile] System_init                     :   5366302us  
    [bootloader profile] Drivers_open                    :       279us  
    【引导加载程序配置文件】Board_drivers 打开               :    152772us  
    【引导加载程序配置文件】Sciclient Get 版本           :      9917us  
    [bootloader profile] CPU load                        :     43913us  
    [bootloader_profile] SBL 总用时            :    216641us

     

    图像加载完成、切换到应用程序...
    Pruicss max = 3 选定的 PRU:3
    地址= 229
    pRuntimeData = 172939023
    检测到 DP83869
    检测到 DP83869
    PRU_PHY_DETECT:152 PHY 3 活动
    PRU_PHY_DETECT:152 PHY 15 活动
    PHY 3:禁用千兆位 ANEG
    PHY 15:禁用千兆位 ANEG
    PHY 3:RGMII 启用低延迟
    PHY 15:RGMII 启用低延迟
    PHY 3:RGMII 设置 TX 半/满阈值:1.
    PHY 15:RGMII 设置 TX 半/满阈值:1.
    PHY 3:RGMII 设置 RX 半/满阈值:1.
    PHY 15:RGMII 设置 RX 半/满阈值:1.

     

    ******************************************
    PRU 固件版本 5.5.6
    EtherNet/IP 提交 ID:0xea4cae4d
    ******************************************

     

    在以 maxNeighborDevices = 28 μ s„    Añ ADP INIT 之前  
    本地接口 IP 为 10.78.215.229
    calloc 70、1 返回 NULL (DID alloc 0x1e798)
    FUNC: kBEI_DLL_LPO_CreateInstance,行: 106:内存分配 70 字节失败。
    kBEI_DLL_LPO_CreateInstance:0x80000000 EC 是致命的=0、SRC:kBEI_DLL_LPO_CreateInstance:108

     

    错误:0x80000000、致命:noCALLOC 70、1 返回空值 (DID alloc 0x1e7e6)
    FUNC: kBEI_DLL_LPO_CreateInstance,行: 106:内存分配 70 字节失败。
    kBEI_DLL_LPO_CreateInstance:0x80000000 EC 是致命的=0、SRC:kBEI_DLL_LPO_CreateInstance:108

     

    错误:0x80000000、致命:noCALLOC 70、1 返回空 (DID 为 0x1e834)
    FUNC: kBEI_DLL_LPO_CreateInstance,行: 106:内存分配 70 字节失败。
    kBEI_DLL_LPO_CreateInstance:0x80000000 EC 是致命的=0、SRC:kBEI_DLL_LPO_CreateInstance:108

     

    错误:0x80000000、致命:noCALLOC 70、1 返回空值 (DID alloc 0x1e882)

    Attached 是代码行的屏幕截图

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

    尊敬的 Yash:

    感谢您提供 UART 日志、问题源于堆内存不足。
    请增加工程 SysConfig 文件中的堆内存大小、这样可以解决该问题。
    例如  153600。堆大小必须与其他内存区域对齐。
    作为一般经验法则、您可以使用此公式增加堆(不能保证始终对齐内存! 如果它不是存储器对齐的,您将在链接时收到错误):  
    堆大小:131072 + n *(16384)
    根据您的要求选择“n"(“(必须(必须成功分配所有所需的 lldpMaxCommunity 设备)

    此致、
    Pourya

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

    你好 Pourya  

    我们面临的一些问题是、很少有卡持续运行、但我们看到卡与 PLC 联机、但没有对命令做出响应。 我还附加了 Wireshark 捕获、10.78.215.218 是持续运行的卡。 问题可能是什么、是否有任何与 I2C 通信相关的内容? 我们以高优先级运行以太网 IP 任务、而不是 DAC 任务  

     e2e.ti.com/.../wireshark-daisy-.zip

    我们要求在菊花链中运行的卡数是 75 张,根据您的建议,我们计算更新为以下值,我们得到内存溢出的错误。有没有其他方法,我们可以检查增加的卡数?

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

    尊敬的 Yashaswini:

    我认为 您误解了堆大小计算公式。 在表达式 131072 + n*(16384) 中、变量“n"不“不代表 LLDP 邻居设备的数量。 而“n"只是“只是一个正整数、以 16384 字节增量增加堆、以保持正确的存储器对齐。

    关于 LLDP 邻居设备:每个设备需要大约 2004 字节的内存。 这意味着大约需要 2004*75=150300 的额外堆。

    这意味着您只需要在公式中设置 n=10、这就足够了。 您当前的 n=70 设置太大、超出了设备上的可用内存!
    我不明白您的意思是“不响应命令“。 在您共享的 Wireshark 中、我只能看到 IO 数据、没有显式消息可见(您所说的是“命令“吗?)。

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

    你好 Pourya  

    我们增加了堆大小、内存问题现已解决。 但是、我们观察到另一种情况:在运行大约 4 小时后、以太网/IP (EIP) 卡停止响应 PLC 命令。 具体而言、 运行/停止命令和速度变化无响应 、即使这些卡片仍然显示在联机状态下。

    运行/停止和速度更新功能在中处理 单独的 DAC 任务 、我们在这里调用
    I2C_transfer(i2cHandle, i2cTransaction);每 30ms。 系统是否可能卡在内部I2C_transfer()? 另外、30ms 间隔是否足以可靠地完成I2C_transfer()操作?

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

    尊敬的 Yashaswini:

    我很高兴听到堆问题已经解决。

    关于 I2C 传输问题、我无法确定 I2C_TRANSFER 函数调用是否在该过程的某个位置被阻止。 我建议单独打开一个 E2E 工单、专门讨论该潜在驱动器问题、以便进行正确的跟进和调查。
    此致、
    Pourya