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:Sitara 自定义 MAC 地址

Guru**** 2392095 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/1366152/am2434-am2434-sitara-custom-mac-address

器件型号:AM2434
主题中讨论的其他器件: SysConfig

工具与软件:

您好论坛、

我们已经为 AM2434 Sitara 设计了定制电路板、并使用 MCU_PLUS_SDK_am243x_09_01_00_41和 SysConfig _1.19.0。

我们正在使用具有两个端口的 CPSW 外设、每个端口都需要使用自己的 MAC 地址进行初始化。

目前、我们初始化标准设置、如下所示:第一个 MAC 地址从控制寄存器(TI 提供的唯一地址)读取、第二个 MAC 地址从电路板 EEPROM 读取。

我们的客户希望能够为项目设置自己的 MAC 地址。

对于如何实现设置自定义 MAC 地址的功能、您有什么建议吗?

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

    尊敬的 Pavel:

    我在下面进行了操作、我使用 syscfg 文件"ti_board_config-c"创建了自己的 board.c 源文件。

    然后、将以下函数编辑为:

    ```c

    void enetBoard_getMacAddrList (uint8_t macaddr[][ENET_MAC_ADDR_LEN]、
    uint32_t maxMacEntries、
    uint32_t *pAvailMacEntries)
    {
    int32_t STATUS = ENET_SOK;
    uint32_t val;
    uint32_t macAddrCnt;
    uint8_t numMacMax = ENET_Board_NUM_MACADDR_USED;
    CSL_MAIN_CTRL_MMR_cfg0Regs * mmrRegs;

    EnetAppUtils_assert (ENET_GET_NUM_MAC_ADDR (numMacMax)<= ENET_Board_NUM_MACADDR_MAX);
    EnetAppUtils_assert (pAvailMacEntries!= NULL);
    * pAvailMacEntries = ENET_Board_NUM_MACADDR_used;

    /*从熔丝处获取第一个 MAC 地址*/
    mmrRegs =(CSL_MAIN_CTRL_MMR_cfg0Regs *)(uintptr_t) CSL_CTRL_MMR0_CFG0_BASE;

    VAL = CSL_REG32_RD (&mmrRegs->MAC_ID0);
    macaddr[0][5]=(uint8_t)((val & 0x000000FFU)>>0U);
    macaddr[0][4]=(uint8_t)((val & 0x0000FF00U)>> 8U);
    macaddr[0][3]=(uint8_t)((val & 0x00FF0000U)>> 16u);
    macaddr[0][2]=(uint8_t)((val & 0xFF000000U)>> 24U);
    VAL = CSL_REG32_RD (&mmrRegs->MAC_ID1);
    macaddr[0][1]=(uint8_t)((val & 0x000000FFU)>>0U);
    macaddr[0][0]=(uint8_t)((val & 0x0000FF00U)>> 8u);

    /*从 EEPROM 获得第二个 MAC 地址*/

    Status = FactoryData_getMACAddressBytes (&macaddr[1][0]、ENET_MAC_ADDR_LEN);
    EnetAppUtils_assert (status == ENET_SOK);
    /*验证*/
    EnetAppUtils_print ("已识别的 Mac 地址:\r\n ");
    for (uint8_t k = 0;k < numMacMax;k++){
    对于(uint8_t I = 0;I < ENET_MAC_ADDR_LEN;I++){
    EnetAppUtils_print ("%02x:"、macaddr[k][i]);

    EnetAppUtils_print ("\r\n");

    macAddrCnt = EnetUtils_min (ENET_GET_NUM_MAC_ADDR (numMacMax)、maxMacEntries);
    如果(macAddrCnt == 0u)
    {
    EnetAppUtils_print ("EnetBoard_getMacAddrList 失败- IDK 不存在\r\n");
    EnetAppUtils_assert (false);

    ```

    FactoryData_getMacAddressBytes 是一个函数、用于从我们的定制 EEPROM 中删除 TI 未提供的地址。

    此致、

    艾萨克

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

    感谢您的回复。 我有以下问题:相关的函数是从 SDK 调用的。 init 函数是EnetApp_driverOpen,它更深入地介绍了 SDK,并使用EnetSoc_getEFusedMacAddrsEnetBoard_getMacAddrList。 我应该在哪里调用我的自定义函数?

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

    您好!

    在此之前、需要在 syscfg 中的"Board Config"->"Custom Board"下的"Enet (CPSW 或 ICSS)"下进行选择。 在执行该操作之前、请确保保存一份"ti_board_config.c"副本。

    然后、您应该创建一个被称为"board"的定制源文件。 编译系统应该会检测到这一点。  

    之后、您可以将"ti_board_config.c"的源代码复制后粘贴至 board.c。 您可以重写函数"EnetBoard_getMacAddrList"

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

    哇! 非常感谢。 我没有注意到这个复选框。 非常感谢、您为我节省了时间。