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.

[参考译文] MSP432E411Y:使用 MII 的闪存引导加载程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1055036/msp432e411y-flash-bootloader-using-mii

器件型号:MSP432E411Y

您好!
我一直在尝试将以太网闪存引导加载程序演示项目从 MSP432E401 Launchpad 移植到使用 MSP432E411的定制板、并通过 MII 总线连接外部 PHY。

我确信新电路板主要是正常工作的、因为我已将演示 TI RTOS 项目移植到其中、并让它执行 DHCP 设置。
由于 SDK 中提供的驱动程序似乎是硬编码以使用401内部 PHY、因此我不得不在中进行一行更改来重建库
C:\ti\simplelink_msp432e4_sdk_4_20_00_12_ext\source\ti\drivers\emac\EMACMSP432E4.c
#define EMAC_PHY_CONFIG (EMAC_PHY_TYPE_EXTERNAL_MII)
这样、演示 RTOS 项目就投入使用了。

闪存引导加载程序项目似乎链接相同的库、但使用设置函数的本地版本。
bl_emac.c
空 EnetReconfig (uint32_t ui32Clock)
调用
LOCAL_EMAC0_BASE (EMAC_PHY_TYPE_内部| EMAC_PHY_INT_MDIX_EN | EMAC_PHY_AN_100B_T_FULL_DUPLEX);
而不是库版本 EMAPPHYConfigSet...

我更改了这与我更改库的方式相同-将第二个参数替换为(EMAC_PHY_TYPE_EXTERNAL_MII)

调试有点困难,因为本地版本使用 ROM 低级函数:(例如 ROM_EMACReset (EMAC0_BASE)、 ROM_SysCtlDelay (1000)))

它似乎没有从 ROM_EMACReset()返回。


将此调用交换为库函数- EMACReset (EMAC0_BASE);-我看到它设置 EMAC_O_DMABUSMOD 寄存器中的 EMAC_DMABUSMOD_SWR 位、然后等待该位清除、这种情况永远不会发生。

我假设 RTOS 项目已经完成了一些额外的配置步骤、引导加载程序项目中缺少这些步骤、允许 SWR 操作在选择外部 PHY 后完成。
我已经尝试比较了所有外设寄存器的状态(有很多!) 关键点、但我看不到任何看起来会影响这一点的差异。

如有任何建议,请提出。

谢谢

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

    感谢您的观看

    我想解释问题让我看到解决方案!

    我的 RTOS 项目之所以起作用、是因为它在 pinout.c 中调用一个引脚设置函数- PinoutSet() 这是由冗余引脚多路复用工具生成的、并将所有必要的引脚设置为

    MII。 例如

    //
    //为 PP0配置 GPIO 引脚多路复用器
    //表示 EN0INTRN
    //
    MAP_GPIOPinConfigure (GPIO_PP0_EN0INTRN);
    GPIOPinTypeEthernetMII (GPIO_PORTP_BASE、GPIO_PIN_0);

    等等

    向移植的闪存引导加载程序添加类似的调用使其全部正常工作。

    例如

    EnterBootLoader:
    .if $$defined (ENET_ENABLE_UPDATE)
    .ref 引脚设置
    BL PinoutSet
    .ref 配置环境
    BL 配置 Enet