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:如何读取我的电路板和#39;s MAC 地址?

Guru**** 2404805 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/1360557/am2434-how-to-read-my-board-s-mac-address

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

您好!

我将 AM243x CPU 与 MCU_PLUS_SDK_am243x_08_06_00_43配合使用、这是 TCP 服务器示例。

我想读取电路板的 MAC 地址。

有 SDK 函数吗?

如果没有、如何获取 MAC 地址?

谢谢。

Eli   

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

    此线程是关于查找 AM2434的 MAC 地址。 这可能会有所帮助。

    e2e.ti.com/.../am2432-mac-address-for-switch-mode

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

    尊敬的 

    感谢您的提问。

    如果您需要进一步的帮助、请告诉我。

    感谢 

    快速输入。

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    我不了解如何读取电路板的 MAC 地址。

    我在 Wireshark 上看到我的 MAC 是28:B5:E8:CA:F6:C3 -如何从我的代码中获取它?

    我在地址0x200上没有看到任何内容、只是0。

    此致、

    谢谢

    Eli

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

    您好!

    下面是 UART 上 CPSW_TCPSERVER SDK 示例输出的屏幕截图。

    您可以转到最新版本并自行尝试吗?

    AM243x MCU+ SDK:CPSW 上的 Enet Lwip TCP 服务器示例(TI.com)

    此致

    阿什瓦尼

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

    尊敬的  Ashwani:

    是的、我看到 MAC 以某种方式打印。

    您能告诉我 SDK 是什么  功能 用于获取 MAC?

    谢谢。

    此致、

    Eli

     

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

    尊敬的  Ashwani:

    我找到了。  

    在函数  App_setupNetif ()中有 g_pNetif [ENET_SYSCFG_DEFAULT_NETIF_IDX]

    我添加:

    uint8_t uCA_Mac[6];

    memcpy (UCA_Mac,g_pNetif[ENET_SYSCFG_DEFAULT_NETIF_IDX]->hwaddr , 6);

    谢谢。

    此致、

    Eli

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

    尊敬的  Ashwani:

    现在我知道如何读取 MAC 了,我注意到我们所有的板都有相同的 MAC。

    什么是写入/刻录新 MAC 的最佳方式以及 代码的位置?

    谢谢。

    此致、

    Eli

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

    您好, 

    通常、在器件制造期间将一个唯一 MAC 地址刻录到电子保险丝中。 此外、在 TI 支持的评估板(EVM 和 Launchpad)上的 EEPROM 中还编程了其他 MAC 地址。

    您可以通过两种方法来设置自定义 MAC 地址。

    AM243x MCU+ SDK:ENET 迁移指南

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/enet_migration_guide_top.html#CustomBoardSupport:~:text=custom%20board%20integration-,Ethernet%20MAC%20address%20Management,-Typically%2C%20one%20unique

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    我已经阅读了您提到的所有文档。

    我仍然不明白如何从 c 函数更改 MAC。

    但是可以直接写入 am243x CPU 的 MAC 寄存器:

    #define CPSW_BASE_ADDR  ???

    #define CPSW_SL1_MAC_LO_OFFSET  ???

    #define CPSW_SL1_MAC_HI_OFFSET ???

    #define CPSW_SL1_MAC_LO (*(volatile uint32_t *)(CPSW_BASE_ADDR + CPSW_SL1_MAC_LO_OFFSET)

    #define CPSW_SL1_MAC_HI (*(volatile uint32_t *)(CPSW_BASE_ADDR + CPSW_SL1_MAC_HI_OFFSET))

    void setMACAddress (uint8_t macaddr[6])

    {

     CPSW_SL1_MAC_LO = (macaddr[0]<< 0)|(macaddr[1]<< 8)|(macaddr[2]<< 16)|(macaddr[3]<< 24)

    CPSW_SL1_MAC_HI =(macaddr[4]<< 0)|(macaddr[5]<< 8)

    printf ("MAC 地址设置为:%02x:%02x:%02x:%02x:%02x\n"、macaddr[0]、macaddr[1]、macaddr[2]、macaddr[3]、macaddr[3]、 macaddr[4]、macaddr[5]);

    }//setMAC 地址

    您能帮助我找到

    #define  CPSW_BASE_ADDR   ???

    #define  CPSW_SL1_MAC_LO_OFFSET   ???

    #define  CPSW_SL1_MAC_HI_OFFSET  ???

    谢谢。

    此致、

    Eli

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我仍然不明白如何从 c 函数更改 MAC。

    我建议您迁移到最新的 SDK 版本(如果可能)并使用 SysConfig 功能来实现自定义 MAC。

    此致

    阿什瓦尼

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

    尊敬的  Ashwani:

    我看到可以通过 sysconfig 更改 MAC。

    在生产线上、我必须为每个电路板分配一个新的唯一 MAC。

    我将"一个相同的"app.hs_fs 文件烧录到了我所有板的板闪存中。

     当某个板连接到 TCP 时-我想将它的唯一 MAC 存储 在其内部闪存中、然后在加电时读取和使用它。

    因此、我要寻找一种对 am243x MAC 寄存器进行编程的简单方法。 (在每个电路板加电时)

    谢谢。

    此致、

    Eli  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此我正在寻找一种对 am243x MAC 寄存器进行编程的简单方法。 (在每个主板上电时)

    我将在内部检查这一点、然后联系您。

    同时、您可以检查相关螺纹、

     (+) AM2434:AM2434:Sitara 定制 MAC 地址-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    谢谢。

    此致、

    Eli

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当某个板连接到 TCP 时-我想将其唯一的 MAC 存储 在其内部闪存中,然后在通电时读取和使用它。

    我认为这应该是开箱即用的东西。

    每个电路板都在 EEPROM 中存储了其唯一的 MAC 地址。

    抱歉、如果我感到困惑。

    此致

    阿什瓦尼

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

    尊敬的  Ashwani:

    我的电路板上没有 EEPROM 器件。

    我可以将所需的 MAC 存储在我拥有的闪存器件中。

    我要求一种方法从闪存中获取 MAC 并在启动时将其写入 am243x MAC 寄存器。

    前面的文章仅展示了如何读取 MAC -我已经使用的技术。

    现在我必须写入 MAC。

    谢谢。   

    此致、

    Eli

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

    您好、Eli、

    您能否转到最新版本并自行尝试?

    根据我基于上述链接的理解代码、您无需在特定寄存器上写入 MAC 数据。 相反、您需要写入 EEPROM 读取函数中提供的 Mac 缓冲区。 因此,我假定驱动程序可以使用相同的缓冲区写入 MAC 地址寄存器。 这里、您需要从闪存读取数据并写入 Mac 缓冲区。 这种方法似乎有效。 你能试一下,看看这是否有效吗?

    此致、

    Anil.

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

    您好、Eli、

    我假设可以将读取功能移至 SBL、因为 SBL 已使用 OSPI 外设、并且再次使用闪存、您不需要在应用中使用它们。

    您已经在外部存储器中写入 MAC、从 SBL 中读取它、并在特定的 MSRAM 存储器中写入它。

    在应用程序中、您需要为 MAC 分配一个存储器位置、并且可以将相同的存储器位置写入 Mac 缓冲区。

    我不是以太网驱动器方面的专家、但我想提供一些建议、看看哪些建议对您来说是可行的。

    此致、

    Anil.

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

    尊敬的 Eli:

    如果您可以切换到 SDK 9.2、

    AM243x MCU+ SDK:ENET 迁移指南

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

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

    • 之后、您可以将"ti_board_config.c"的源代码复制后粘贴至 board.c。

    • 您可以重写函数"EnetBoard_getMacAddrList"以从闪存 地址而不是 EEPROM 存储器地址读取 MAC 地址

    此致

    阿什瓦尼

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

    您好、Eli、

    您需要任何帮助吗?

    此问题是否已解决?

    如果您在任何地方都遇到问题、请告知我们。

    此致、

    Anil.

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

    大家好、Anil 和 Ashwani、

    您已 建议:  

     "我假定驱动程序可以使用相同的缓冲区写入 MAC 地址寄存器。 这里、您需要从闪存读取数据并写入 Mac 缓冲区。 这种方式似乎是可行的。"

    我已经尝试过、但所有 LwIP 初始化都失败。

    我想 在 am243x 上有一个 MAC 寄存器可以在我的 main.c 中写入,可能是直接的或使用一些 IOCTL 调用。

    谢谢。

    此致、

    Eli

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

    尊敬的 Eli:

    我已经尝试过此方法,但随后所有 LwIP 初始化都失败。

    只是想再次确认您是将代码基准移至 SDK 9.2还是仍位于 SDK 8.6上?

    因为我们在 SDK 9.2中改进了自定义的板/MAC 地址支持。

    此致

    阿什瓦尼

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

    尊敬的 Ashwani:

    由于支持 EtherCAT、现在我们所有人都在使用 ind_comms_sdk_am243x_09_01_00_03。

    请编写一个代码示例、用于将新的 MAC 地址设置到 am243x。

    谢谢。

    此致、

    Eli   

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

    尊敬的 Eli:

    ind_comms_sdk_am243x_09_01_00_03

    感谢您提供信息。

    您在 AM243x 上的哪个端口和哪个内核上运行 EtherCAT 器件?

    您能不能示意图一下 ICSSG0、ICSSG1、CPSW 上运行的是什么?

    您要为哪个端口设置自定义 MAC 地址?

    此致

    阿什瓦尼

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

    Eli

    我们将使该线程优先于 DMA 复位线程。  

    我想回顾一下前面讨论中提到的  

    1) AM64/AM24每个器件确实有一个唯一的 MAC ID、由我们的产品工程团队编程(Rasty 突出显示)。 ROM 主要用于以太网端口0,但客户也可以利用它。 每位客户的偏好有所不同、有些客户不希望这样、而是使用板载闪存或板载 EEPROM 来配置自己的设置。  

    2) 2)不清楚您读取的值以及在所有电路板中看到的值是相同的。 如果这是 TI 编程的 MAC ID,则对于每个器件,此 ID 应该是唯一的。 需要对其进行调试。  

    3)如果客户需要的 MAC ID 超过1个,或者不想在我们的 OTP 中使用 MAC ID ,他们可以 a)使用板载 EEPROM b)使用板载闪存进行编程(这是您要尝试的操作) c)使用用户可配置的扩展 OTP 进行编程 -您可以在以下 E2E 常见问题解答中找到一些有用的材料  

    [常见问题解答]如何通过在 AM6x 上对扩展进行编程来更新 ID (USB 和 PCIe PID/MAC ID)-处理器论坛- TI VID 支持论坛

    目前、我们将重点介绍 b)假设这是您的首选路线。

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

    尊敬的 Eli:

    您可以参考以下代码库、我们将从其中读取电子保险丝的 MAC 地址。

    因此、您可以尝试读取 CSL_CTRL_MMR0_CFG0_BASE => MAC_ID0和  CSL_CTRL_MMR0_CFG0_BASE => MAC_ID1  


    int32_t EnetSoc_getEFusedMacAddrs(uint8_t macAddr[][ENET_MAC_ADDR_LEN],
                                      uint32_t *num)
    {
    #ifndef ENET_MAC_ADDR_HACK
        CSL_main_ctrl_mmr_cfg0Regs *mmrRegs;
        uint32_t val;
    
        if (*num >= 1U)
        {
            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);
    
            *num = 1U;
        }
    #else
        macAddr[0][0] = 0xF4;
        macAddr[0][1] = 0x84;
        macAddr[0][2] = 0x4c;
        macAddr[0][3] = 0xf9;
        macAddr[0][4] = 0x4d;
        macAddr[0][5] = 0x29;
        *num = 1U;
    #endif
        return ENET_SOK;
    }

    应用期间、MAC 地址会显示在 UART 上

    我在3-4个电路板上对其进行了测试、但并非所有电路板都是如此。

    如果您需要进一步的帮助、请告诉我。

    此致

    阿什瓦尼

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

    尊敬的  Ashwani:

    您说

    "我在3-4个电路板上对其进行了测试、但对于所有电路板来说、测试结果并不相同。"  

    这些都是非常好的消息-这对我们来说已经足够了!

    谢谢。

    此致、

    Eli