LM3S6918启用ethernet后25M晶振不起振



我是刚接触M3不久,我们公司参照LM3S的参考设计图做了产品设计,在PCB做好之后,启用ethernet外设和ethernet controller,但是发现25M的晶振不起振,phy不能和电脑建立连接。晶振外设很简单,就两个18pf电容和25M cristal,软件上也启用了ethernet,现在真是不知道什么问题,希望各位专家能给予支持,万分感谢!

  • 您好,

    下载其他的程序有没有问题?比如hello world之类的。

    建议做以下测试:

    1、首先检查下引脚有没有虚焊;

    2、用示波器看一下晶振的起振了没有,有没有波形之类的。

  • 您好:

       其他程序是可以烧进去的,串口打印消息,控制IO口都是可以的。我们一共先焊接了两块板,两块都是25M晶振用示波器测试都没有起来,也检查过虚焊这些问题的都没有。

    #include <stdio.h>

    #include <LM3Sxxxx.H>           // LM3Sxxxx library definitions

    int main(void)

    {

       unsigned char macaddr[6];

       SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                      SYSCTL_XTAL_8MHZ);

       SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);

       SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

       GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);

    EthernetInitExpClk(ETH_BASE, SysCtlClockGet());

    EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER |

                          ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));

    EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN));

         //

       // Enable the Ethernet Controller.

       //

    macaddr[0]=0x12;

    macaddr[1]=0x23;

    macaddr[2]=0x45;

    macaddr[3]=0x67;

    macaddr[4]=0x89;

    macaddr[5]=0xab;

    EthernetMACAddrSet(ETH_BASE, macaddr);

    EthernetEnable(ETH_BASE);

    // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

    //  GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_7,    GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    //  GPIODirModeSet  (GPIO_PORTD_BASE, GPIO_PIN_7,    GPIO_DIR_MODE_OUT);

     /* Configure push buttons as inputs */

     //GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

    // GPIODirModeSet  (GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);

    return 0;

    }

    这是我写的ethernet启用的程序,麻烦帮我看看对不对,谢谢

  • 您好:

       其他程序是可以烧进去的,串口打印消息,控制IO口都是可以的。我们一共先焊接了两块板,两块都是25M晶振用示波器测试都没有起来,也检查过虚焊这些问题的都没有。

    #include <stdio.h>

    #include <LM3Sxxxx.H>           // LM3Sxxxx library definitions

    int main(void)

    {

       unsigned char macaddr[6];

       SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                      SYSCTL_XTAL_8MHZ);

       SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);

       SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

       GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);

    EthernetInitExpClk(ETH_BASE, SysCtlClockGet());

    EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER |

                          ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));

    EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN));

         //

       // Enable the Ethernet Controller.

       //

    macaddr[0]=0x12;

    macaddr[1]=0x23;

    macaddr[2]=0x45;

    macaddr[3]=0x67;

    macaddr[4]=0x89;

    macaddr[5]=0xab;

    EthernetMACAddrSet(ETH_BASE, macaddr);

    EthernetEnable(ETH_BASE);

    // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

    //  GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_7,    GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

    //  GPIODirModeSet  (GPIO_PORTD_BASE, GPIO_PIN_7,    GPIO_DIR_MODE_OUT);

     /* Configure push buttons as inputs */

     //GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

    // GPIODirModeSet  (GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);

    return 0;

    }

    这是我写的ethernet启用的程序,麻烦帮我看看对不对,谢谢

  • Dean您好,

    建议您参考EKK-lm3s8962的以太网的例程enei_lwip来测试,两个片子是一个系列的,同时以太网部分的引脚是一样的。链接如下:

    www.ti.com/.../sw-ek-lm3s8962

  • 您好:

         十分感谢您热心的支持,刚刚我也试了EKK-lm3s8962的以太网的例程enei_lwip,结果也还是一样的,我想请问您一下,在软件上是不是只要启用SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);PHY就可以工作了,物理层之间建立连接应该不需要其他的控制吧?

  • 你有设置MAC地址,IP地址没?在TI的官方程序enet_lwip里的面使用DHCP来分配IP,而且要判断MAC的,如果没有设置MAC的话LWIP是不运行的。所以要测试的话,你需要先设置合法的MAC和使用固定IP。这样就能准确判定了。

     

        //
        // Enable and Reset the Ethernet Controller.
        //
        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
        ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);

    这两句ETH应该就可以了,使用的话还需开中断,你如果配置了LED的话,接上网线后,LED应该会亮的。

  • 您好:

        谢谢你的回答,我也试过了,25M晶振还是没有起振,怀疑是硬件问题,大家能帮忙看看2楼的电路图吗

  • 应该是硬件的问题,即使芯片是空的25M也应该有时钟!

    硬件上几个地方先改改吧:

    1> TXCT/RXTC接3.3的磁珠去掉

    2> C223,C224,C225,C226改成10pf的

  •        感谢Winston Wang 提出的建议,按照Winston Wang 提出的硬件更改,现在已经可以和电脑建立连接了,就是25M晶振还是没有,现在正在查是不是晶振类型不匹配

  • 我觉得还是存晶振匹配的问题,你两端接的是18PF电容计算下拉你的晶振应该所选择10~12PF 25MHZ

    不过一般市场通常做的是20PF 或者18PF晶振。这样就相差比较大可能就会出现不振的情况了、