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.

[参考译文] MSP432E401Y:在定制板上使用 MSP432E401、初始化 lwip 时在 EMACPHYConfigSet 上挂起代码

Guru**** 2553450 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/965763/msp432e401y-used-msp432e401-on-custom-board-code-hanging-on-emacphyconfigset-when-initializing-lwip

器件型号:MSP432E401Y

您好!

我从 TI 购买了一款新的 MSP432E401、并将其放置在具有多条 UART 线路和以太网连接的定制板上。 我不知道您必须分配自己的 MAC 地址、因此我使用了 MSP432E401Y LaunchPad 中的 MAC 地址。 (使用 FlashGet),然后在板上使用具有相同 uiUser0和 uiUser1值的 FlashSet()。 代码在中挂起   

SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_EPHY0))

//
//等待 PHY 复位完成。
//

 在 EMACPHYConfigSet (uint32_t ui32Base、uint32_t ui32Config)函数中。 我将在初始化 LWIP 时执行此操作。 下面是我用于设置 MAC 地址的代码。 在复位内部 PHY 时、是否缺少其他内容或我的代码正在处理的另一个原因。

uint32_t ui32User0 = 7798640;
uint32_t ui32User1 = 6728988;
uint8_t pui8MACArray[8];


// FlashUserSet (ui32User0、ui32User1);
if ((ui32User0 == 0xffffffff)||(ui32User1 == 0xffffffff)

//
//我们点动点动点动点动点动点/ b*n mmmjmjsd 永远不会来这里。 如果 MAC 地址有、则这是一个错误
//未编程到器件中。 退出程序。
//告知用户没有 MAC 地址
//
//UARTprintf ("未对 MAC 进行编程!\n");
while (1)

//执行以错误模式闪烁 LED


//将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);

IP4_addr_t local;
ip4_addr_t 网络掩码;
IP4_addr_t 网关;

IP4_ADDR (局部、51、2、168、192);
IP4_ADDR (网络掩码、0、255、255、255);
IP4_ADDR (&gateway、1、2、168、192);

uint32_t g_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_OSC_INT |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、25000000);

lwIPInit (g_ui32SysClock、macAddress、local.addr、netmask.addr、gateway.addr、 ipaddr_use_static); //代码在执行此行时挂起、具体说明在 EMAPPHYConfigSet (uint32_t ui32Base、uint32_t ui32Config)中;

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

    我不太愿意责怪 MAC 地址、因为据我所知、PHY 对 MAC 地址一无所知。 实际上、您可以对 MAC 地址中几乎任何值进行编程(至少在 SysAdmin 出现并向您发出蜂窝)。

    此代码是首次探测 PHY 以确保正确启动。 我不知道到底是什么导致它无法启动、但我的第一个猜测是时钟(MOSC)、或者外部接线中的某些东西。

    您是否相当确定您的25MHz 晶体正在运行?  

    您提到了设计(定制)"以太网端口"。 以太网接口的导线远不止几根、PHY 可能会看到外部组件中的一些故障。 您是否使用某些参考设计来设计端口?

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

    大家好、我在原理图中提到 MSP432 Launchpad、我使用 ABLS7M2-25.000MHZ-D2Y-T 作为晶体、而不是 NX3225GA-25.000M-STD-CRG-2、这就是电容值不同的原因。

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

    我看到您在哪里启动时钟、但我看不到您在哪里启动时钟

    > SysCtlMOSCConfigSet (SYSCTL_MOSC_HIGHFREQ);

    您是否在某个时间(lwIPInit()之前)执行此操作?

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

    是的、我使用  

    SysCtlMOSCConfigSet (SYSCTL_MOSC_HIGHFREQ);在 main 的开头、我在 main 的开头执行时钟频率集、只需放置时钟集即可显示如何设置时钟频率。

    这是我的以太网布线原理图,我遵循 了《SimpleLinkTmMSP432E4微控制器系统设计指南》。 该代码在 LaunchPad 上运行正常。 而不是定制板。

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

    您好!  

    如果您的代码在您自己电路板上的 EVM 和 NG 上运行良好、我希望检查您电路板上的晶体。