LPC32XX的DEMO开发板网络接口中,PHY部分和MAC部分采用的是RMII接口,而不是MII接口。关于这两个接口的区别,请参阅“网卡MAC和PHY部分MII与RMII两种链接方式的分析”。按照NXP官方的内核补丁,只需要在配置的时候配置成RMII或者MII即可正常工作。然而实则不然。当配置成MII模式时,内核能无法正常工作。表现为无法收发数据包。

经过对所有代码控制寄存器的检查,以及对电路图的检查,都没有发现问题。后来我们决定用逻辑分析仪来查看MII接口的数据。结果发现MII数据包的头部不正确,具体表现为MII比RMII多用的那几根线上面没有数据。因此得出结论——LPC32XX的MAC部分配置不正确。

然后再回过头来检查代码,才发现原来是内核代码部分的宏定义出现低级错误。定义MII工作模式的宏是CONFIG_MAC_LPC32XX_MII_SUPPORT,然后代码中使用的宏竟然是MAC_LPC32XX_MII_SUPPORT。修正之后重新编译,即工作正常!