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.

[参考译文] TMDS243EVM:在尝试构建同时使用 CPSW 和 ICSSG 实例的多核工程时与 I2C 实例相关的资源冲突。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1289511/tmds243evm-resource-conflict-with-respect-to-i2c-instances-while-trying-to-build-a-multicore-project-that-uses-both-cpsw-and-icssg-instances-together

器件型号:TMDS243EVM

您好、专家!

因此、我想实施一个多内核项目以同时使用 CPSW 和 ICSSG LWIP 堆栈。 动机如下:
  

  1. 内核 r5Fss0-0:实施示例 "enet_lwip_cpsw"、源: enet_lwip_cpsw (TI.com)  AM243x 的 MCU+ SDK (09.00.00.35)
  2. 内核 r5Fss0-1:实现函数 "enet_lwip_icssg"、源 enet_lwip_icssg (TI.com) @用于 AM243x 的工业通信 SDK (09.00.00.03)

我阅读了 SDK 文档、了解  如果要对多个内核进行操作、则需要分配资源和更改链接器命令。 我已经在系统配置和链接器脚本中进行了必要的更改。

因此、我创建了一个 CCS 的"系统"工程、 如下所示:

这里需要注意的是、两个示例分别在两个所需的内核上运行、但当我尝试编译/编译组合的多内核工程时、我收到错误消息说两个内核之间存在资源冲突、如下面的片段所示:

我尝试为 I2C_2和 I2C_3等其他 I2C 实例以及 MCU 域实例分配、这种更改使构建成功、但在运行时、基于 CPSW 的应用程序无法从 EEPROM 读取 MAC 地址、并且我收到以下断言故障:

另外、根据用户指南、可以看出 I2C0和 I2C1是正确的实例:/resized-image/__size/320x240/__key/communityserver-discussions-components-files/908/pastedimage1699372110278v1.png

我缺少什么?  是否需要遵循不同的方法。 是否需要进行一些驱动程序更改?

请告知。

非常感谢、此致、

肖巴赫特

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

    编辑:

    因此、我想实施一个多内核项目以同时使用 CPSW 和 ICSSG LWIP 堆栈。 动机如下:
      

    1. 内核 r5Fss0-0:实施示例 "enet_lwip_icssg"、源  enet_lwip_icssg (TI.com) @用于 AM243x 的工业通信 SDK (09.00.00.03)  
    2. 内核 r5Fss0-1: 实施示例 "enet_lwip_cpsw"、源: enet_lwip_cpsw (TI.com)  AM243x 的 MCU+ SDK (09.00.00.35)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Shobhit、您好!  

    首先、  为了启用您的用例、我们必须确保您能够独立运行以下各项:

    r5fss0_0内核(或 r5fss0_1内核 )上的 enet_lwip_icssg 示例
    2. rf0_1内核上的 enet_lwip_cpsw 示例。  (或  r5fs0_0 内核)

    请分享您是否能够独立完成上述两项任务?

    第二 ,板 EEPROM 包含板 ID、MAC 地址等信息,并通过 I2C0连接。 我们将其他 I2C 实例分配给 CPSW、因此无法从 EEPROM 获取信息。

    但有一种方法可以绕过此步骤、即使用固定的硬编码 MAC 地址、而不是使用 I2C 通过 EEPROM 读取它。

    当您构建应用程序时、 " 生成 "文件夹。 此文件夹包含基于您所做的 syscfg 配置自动生成的文件。

    启用硬编码 MAC 地址的步骤:

    1. 导航到 enet_lwip_cpsw/icssg 示例。  
    2. 导航到 Generated 文件夹(一般路径为  enet_lwip_cpsw/am243x-evm/r5fss0-0_freertos/ti-arm-clang/生成
    3. 打开  TI_enet_soc.c  文件和定位//#define ENET_MAC_ADDR_HACK (真)
    4. 启用该宏、将其设置为 true、  
    5. 在函数" ENETTAJ_getEFUSedMacAddrs() "返回所需的 MAC 地址
    6. 重新编译项目。  

    按照上述步骤操作将会暂时解除阻止。 您可以尝试以上步骤。

    除此之外、您可能还会面临共享 uDMA 资源的问题。 如果这样做、请尝试在2个应用之间平均分配 uDMA RX 环和 TX 环。

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    感谢您的回复!
    在我的查询中、我指出这两个应用程序在两个内核上成功运行:

    Unknown 说:
    这里需要说明的是、两个示例分别在两个所需的内核上运行、

    我想我选择的词语是不正确的。

    我将就您的第二部分回答向您提供反馈。

    再次感谢。

    此致、

    肖巴赫特

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

    尊敬的 Shaunak:

    使用硬编码 MAC 地址的变通办法已生效!  

    不过、最初的问题仍然存在、两个内核是否可以使用 I2C 从 EEPROM 读取数据、或者这是 EVM 板的限制?

    因此、为了确保我  正确理解约束条件、可以得出结论: 只有一个 内核可以与 EEPROM 通信、如果另一个内核需要来自 EEPROM 的数据、则需要一些其他机制。

    这些机制可以是 IPC 或任何其他共享存储器访问?

    请告知。

    谢谢、此致、

    肖巴赫特

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

    Shobhit、您好!  

    我与团队进行了内部讨论。   如果正确处理 I2C0、两个内核可能能够使用 I2C0从 EEPROM 读取数据。 这未经内部测试、因此我们未在 SDK 中包含类似的情形、但在读取 SDK 中的第一个 MAC 地址时关闭 I2C 驱动程序  EnetBoard_getMacAddrList  然后在第二个内核上打开 I2C 实例并从 EEPROM 读取数据可能会解决该问题。

    同样、这尚未经过全面测试。

    其次、您可以有一些 IPC 框架来从第一个内核到第二个内核共享数据、第一个内核从中读取 EEPROM 数据。 我认为这不存在任何问题。

    此致、
    Shaunak