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.

[参考译文] TM4C1294NCPDT:以太网 MAC 地址不可修改

Guru**** 2558250 points
Other Parts Discussed in Thread: TM4C1294NCPDT, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/879496/tm4c1294ncpdt-ethernet-mac-address-not-modifiable

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: UNIFLASH

您好!

我想更改 TM4C1294NCPDT 上 Etherent 接口的 MAC 地址。
遗憾的是、不能通过直接使用另一个 MAC 地址初始化以太网接口来更改它、该地址不是用户寄存器0和1中的 MAC 地址。

如果您使用用户寄存器0和1中的值初始化以太网接口、则该接口将工作、否则它将不工作。

但无论是在源代码中还是在 Uniflash 中、我都无法更改用户寄存器中的这些值。

TI 是否为微控制器分配了不可更改的固定 MAC 地址?
用户寄存器0和1只能被写入一次。

为什么用户寄存器0和1与以太网接口直接相关、以便接口仅将这些值用作 MAC 地址、而不是其他值?


此致

Ali

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

    您好、Ali、

    用户寄存器0和1可通过器件解锁过程被擦除。

    使用空白部件、或者在先前编程的部件完成器件解锁过程后、您将"一次性"将 MAC 地址编程到用户寄存器0和1中。

    之后、您必须通过器件解锁过程清除寄存器以更改其值、因此必须"一次性"、因为它不是很真正的 OTP、但非常接近它。

    您可以使用 Uniflash 或 LM 闪存编程器解锁器件。

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

    感谢您的回答。

    还有一个问题、即为什么用户寄存器0和1与以太网接口相关。 如果只能存储 MAC 地址、为什么需要、从寄存器中获取值、然后在源代码中再次初始化 MAC 地址、而不能使用其他 MAC 地址。

    如果 TI 微控制器在初始化以太网接口时自动从用户寄存器中提取值、而无需在源代码中手动操作、这是合理的。

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

    您好、Ali、

    这是因为必须如何处理 MAC 地址。

    "任何具有以太网接口的器件都需要唯一的‘MAC’地址,该地址在制造时进行编程。 这个地址是完全唯一的–世界上的每个以太网器件都有一个不同的 MAC 地址。 (不应将 MAC 地址与器件 IP 地址混淆、该地址是一个完全独立的地址、不必在全世界都是唯一的)。 如果您制造的产品包含以太网接口、则需要购买一组 MAC 地址。"

    因此、您不能仅以源代码二进制程序对 MAC 地址进行编程、然后对1000个器件进行编程、并且每个器件仍具有唯一的 MAC 地址。 您将需要一个单独的应用程序二进制文件、该二进制文件使用唯一的 MAC 地址编译、用于通过生产线的每个器件、任何公司都不会这样做。

    TM4C 用户寄存器解决了该程序、只需提交两个寄存器即可在每个器件的唯一 MAC 地址的生产线上快速编程、然后您就可以恢复到仅需一个应用二进制文件即可使用程序刷写器件。 快速、简单且非常具有成本效益。

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

    哦、我忘了添加-它是一次性可编程的原因是、任何人都不能在完全擦除闪存的情况下覆盖您的唯一 MAC 地址、这将使 TM4C 恢复为空白器件。 因此、在任何情况下都不能更改您的产品 MAC 地址。

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

    [引用用户="Ralph Jacobi"]

    "任何具有以太网接口的器件都需要唯一的‘MAC’地址,该地址在制造时进行编程。 这个地址是完全唯一的–世界上的每个以太网器件都有一个不同的 MAC 地址。 (不应将 MAC 地址与器件 IP 地址混淆、该地址是一个完全独立的地址、不必在全世界都是唯一的)。 如果您制造的产品包含以太网接口、则需要购买一组 MAC 地址。"

    [/报价]

    我没有详细了解购买 MAC 地址的情况(我想是从 IEEE 购买的?) 但是、我遇到过通过 I2C 提供 MAC 地址的芯片、其方式与提供保证唯一 ID 的器件(用于序列号或其他任何器件)的方式完全相同。

    是否有任何方法可以连接到以太网驱动程序、以便读取如此小的芯片并使用提供 MAC 地址? 这使得那些不 想提前购买4、096个 MAC 地址的小商店的生活变得更加轻松。

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

    您好 Ralph、

    我有一个简单的问题、如果我能够在源代码中设置 MAC 地址。 到目前为止、此微控制器无法做到这一点。

    我们的产品只能在没有互联网接入的封闭网络中使用。 然后、很容易在生产后在 GUI 上设置 MAC 地址、这将是一项很好的功能。

    或者、正如 Andy 提到的、您还可以购买具有出厂编程的 IEEE EUI-48或-64 MAC 地址的 EEPROM、但这些 EEPROM 必须通过源代码中的 I2C 进行读取。 因此、我不知道 TI 为什么会对设置 MAC 地址施加这些限制。

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

    [引用用户="Andy Peters "]

    我没有详细了解购买 MAC 地址的情况(我想是从 IEEE 购买的?) 但是、我遇到过通过 I2C 提供 MAC 地址的芯片、其方式与提供保证唯一 ID 的器件(用于序列号或其他任何器件)的方式完全相同。

    是否有任何方法可以连接到以太网驱动程序、以便读取如此小的芯片并使用提供 MAC 地址? 这使得那些不 想提前购买4、096个 MAC 地址的小商店的生活变得更加轻松。

    [/报价]

    请参阅 TivaWare 以太网示例。 下面是 Enet_IO 示例中的代码片段。 您将看到对 IwIPInit()函数的调用,以初始化 LwIP 栈。 传递给函数的参数之一是 MAC 地址。 从存储在非易失性存储器中的 USR0/USR1读取 MAC 地址 (通过调用 MAP_FlashUserGet) 。 如果您的 MAC 地址未存储在 USR0/USR1中、而是存储在某些外部器件中、则只需修改代码即可从其所在的任何位置读取 MAC。 TivaWare 库中提供了 I2C 示例。 请参阅以下示例、了解如何与 I2C 器件通信。  

    我不确定您所指的 I2C 器件是什么。 这些设备可能是另一家供应商提供的设备、其中包含 IEEE 为其分配的唯一 MAC 地址。 您有责任了解您是否可以使用他们的 MAC 地址来识别您的最终系统/产品。 这不是我们可以提出的与 MCU 相关的问题。  

    //
    //为的以太网控制器过滤配置硬件 MAC 地址
    //传入数据包。 MAC 地址将存储在非易失性存储器中
    // USER0和 User1寄存器。
    //
    map_FlashUserGet (&ui32User0、&ui32User1);
    if ((ui32User0 == 0xffffffff)||(ui32User1 == 0xffffffff)
    {
    //
    //告知用户没有 MAC 地址
    //
    UARTprintf ("未对 MAC 进行编程!\n");
    
    while (1)
    {
    }
    }
    
    //
    //告诉用户我们现在正在做什么。
    //
    UARTprintf ("正在等待 IP.\n");
    
    //
    //将24/24拆分 MAC 地址从 NV RAM 转换为32/16拆分
    //对硬件寄存器进行编程、然后进行编程所需的 MAC 地址
    //以太网控制器寄存器中的 MAC 地址。
    //
    pui8MACArray[0]=((ui32User0 >> 0)& 0xff);
    pui8MACArray[1]=((ui32User0 >> 8)& 0xff);
    pui8MACArray[2]=((ui32User0 >> 16)& 0xff);
    pui8MACArray[3]=((ui32User1 >> 0)& 0xff);
    pui8MACArray[4]=((ui32User1 >> 8)& 0xff);
    pui8MACArray[5]=((ui32User1 >> 16)& 0xff);
    
    //
    //使用 DHCP 初始化 lwIP 库。
    //
    lwIPInit (g_ui32SysClock、pui8MACArray、0、0、0、 ipaddr_use_dhcp); 

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

    感谢您、问题是从内部 EEPROM 读取 MAC-Address 时出现另一个问题、其中只能在4个字节的数据长度的倍数下进行读/写、可以使用 IP 地址、但 MAC 地址有6个字节。