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.

[参考译文] AM4378:在 AM437x 入门套件上将 TI SDK 从版本 5 升级到版本 8 后、无法从 EEPROM 设置 MAC 地址

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1592431/am4378-can-not-set-mac-addresses-from-eeprom-after-upgrading-ti-sdk-from-version-5-to-version-8-on-am437x-starter-kit

器件型号: AM4378

我们的硬件设计基于 TI AM437x 入门套件。 我们曾使用 TI SDK 版本 05.02.00.10(2018 年 12 月 19 日)。 我们目前正在将 TI SDK 升级到 08.02.00.24(2022 年 6 月 6 日)。
我们修改了 TI SDK versoin 05.02.00.10 附带的 u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2、方法是在 board.c 中添加了函数 int board_eth_init (BD_t * bis) 然后我们可以使用 EEMPROM 中设置的 Mac 地址。  
但是、 TI SDK 版本 08.02.00.24 附带的 u-boot-2021.01+gitAUTOINC+44a87e3ab8-g44a87e3ab8 发生了许多变化、并加入了类似的函数来从 EEPROM 读取 MAC 地址并设置 u-boot 以将这些 MAC 地址传递到内核已经变得具有挑战性。
您对我们如何解决和实施此问题有何建议?
我们在 board.c 中与 TI SDK 版本 05.02.00.10 一同进行的更改的一段代码片段如下所示:

  //修改:添加了 从 EEPROM 读取 MAC 地址的选项
  board_ti_get_eth_mac_addr (0、mac_addr);

  if (is_valid_ethaddr (mac_addr))
  {
    /*使用来自 EEPROM*/的 Mac
    puts(“Using mac0 from EEPROM\n“);
  }
  暴露
  {
  /*尝试从 efuse 读取 Mac 地址*/
  puts(“使用 efuse 中的 mac0 \n“);
  mac_lo = readl (&cdev->macid0l);
  mac_hi = readl (&cdev->macid0h);
  mac_addr[0]= mac_hi 和 0xFF;
  mac_addr[1]=(mac_hi 和 0xFF00)>> 8;
  mac_addr[2]=(mac_hi 和 0xff0000)>> 16;
  mac_addr[3]=(mac_hi & 0xFF000000)>> 24;
  mac_addr[4]= mac_lo 和 0xFF;
  mac_addr[5]=(mac_lo 和 0xFF00)>> 8;
  }

#if (defined (CONFIG_DRIVE_TI_CPSW)&&!defined (CONFIG_SPL_BUILD))||\
  (已定义 (CONFIG_SPL_ETH_support)&&已定义 (CONFIG_SPL_BUILD))
  if(!env_get(“ethaddr")“)){
    放置(“ 未设置。 正在验证第一个电子保险丝 MAC\n“);
    if (is_valid_ethaddr (mac_addr))
      ETH_env_set_enetaddr(“ethaddr",“,mac_addr、mac_addr);
  }
#ifndef CONFIG_SPL_BUILD
    board_ti_get_eth_mac_addr (1、mac_addr);

    if (is_valid_ethaddr (mac_addr))
    {
        /*使用来自 EEPROM*/的 Mac
        puts(“Using mac1 from EEPROM\n“);
    }
    暴露
    {
  puts(“使用 efuse 中的 mac1 \n“);
  mac_lo = readl (&cdev->macid1l);
  mac_hi = readl (&cdev->macid1h);
  mac_addr[0]= mac_hi 和 0xFF;
  mac_addr[1]=(mac_hi 和 0xFF00)>> 8;
  mac_addr[2]=(mac_hi 和 0xff0000)>> 16;
  mac_addr[3]=(mac_hi & 0xFF000000)>> 24;
  mac_addr[4]= mac_lo 和 0xFF;
  mac_addr[5]=(mac_lo 和 0xFF00)>> 8;
  }

  if(!env_get(“eth1addr")“)){
    if (is_valid_ethaddr (mac_addr))
      ETH_env_set_enetaddr(“eth1addr",“,mac_addr、mac_addr);
  }
谢谢、
Solan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    您是否使用具有可正常运行的 5.x SDK 的同一电路板? 我不确定、但 5.x u-boot 是否可与 8.x 内核配合使用?

    此致、

    Schuyler

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

    尊敬的 Schuyler:

    我们使用的是与 5.x SDK 相同的工具。

    我构建 8.x SDK 附带的 u-boot 和内核。 主板启动 、它还将从 DHCP 服务器获取 IP 地址。 我遇到的问题是如何从 EEPROM 分配以太网器件的 MAC 地址。

    此致、

    Solan