• PHY使用MII和RMII与SAM9260链接时需要注意的事项


    问题1:

    采用newmsg-9260的开发板,开发板上的PHY使用RMII方式链接SAM9260,而实际的目标板上,为了将4层板改为2层板,将连接方式由RMII改为了MII,由此带来的问题如下:

    1. 不管使用newmsg更改过的源码还是从kernel.org下载的源码,不管如何更改内核选项,编译生成的内核uImage通过NFS方式挂载根文件系统时,总是不能成功挂载根文件系统,出现错误提示:

    IP-Config: Complete:
         device=eth0, addr=192.168.1.244, mask=255.255.255.0, gw=255.255.255.255,
         host=192.168.1.244, domain=, nis-domain=(none),
         bootserver=255.255.255.255, rootserver=192.168.1.200, rootpath=
    Looking up port of RPC 100003/2 on 192.168.1.200
    eth0: link up (10/Half)
    eth0: link down
    eth0: link up (10/Half)
    rpcbind: server 192.168.1.200 not responding, timed out
    Root-NFS: Unable to get nfsd port number from server, using default
    Looking up port of RPC 100005/1 on 192.168.1.200
    rpcbind: server 192.168.1.200 not responding, timed out
    Root-NFS: Unable to get mountd port number from server, using default
    Root-NFS: Server returned error -5 while mounting /nfsroot/root422
    VFS: Unable to mount root fs via NFS, trying floppy.
    VFS: Cannot open root device "<NULL>" or unknown-block(2,0)
    Please append a correct "root=" boot option; here are the available partitions:
    1f00          258048 mtdblock0 (driver?)
    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

    解决:

    修改了./arch/arm/mach-at91/board-sam9260ek.c中一行,is_rmii由1改为0,编译后通过NFS可以成功加载根文件系统了;

    [1]. 修改的地方ek_macb_data = {
        .phy_irq_pin    = AT91_PIN_PA7,
        .is_rmii    = 0,
        // .is_rmii    = 1,
    };
    [2]. MII和RMII的时钟频率不一样,今天查了下,MII的时钟频率是100Mbps时25MHz,10Mbp时2.5Mhz;而RMII省了一半信号线,所以频率提高一倍到50MHz;

    既然时钟不一样,程序中必然需要用到条件语句分别进行配置。
    [3]. 网上看到对函数lpc32xx_mii_probe()的分析:lpc32xx_mii_probe()完成了这样一个事情:找到第一个phy设备,然后根据内核配置,选用MII接口或RMII接口,之后再进行简单的配置。

    这部分说明了,起关键作用的是,内核源码中有一个参数设定了使用MII还是RMII;
    [4]. 确实在配置网络时有很多地方用到了is_rmii作为条件,查找is_rmii的赋值的地方,最终确认是./arch/arm/mach-at91/board-sam9260ek.c中的ek_macb_data;


    问题2:

    使用newmsg提供的U-Boot源码u-boot-2009.11-rc2.tar.gz编译,在U-Boot命令行模式下,始终不能ping通主机上的服务器,从而不能使用tftp方式加载内核镜像等;

    解决:

    在用户自定义的头文件newmsg9260.h中,对宏CONFIG_RMII的定义是#define CONFIG_RMII     1
    原来以为,要禁止使用RMII方式,只需要将CONFIG_RMII宏的数值改为0;

    [1]. 实际用到此宏定义作为判别条件的文件macb.c中对宏CONFIG_RMII的引用是这样的,#ifdef CONFIG_RMII;

    [2]. 要使得判别条件#ifdef CONFIG_RMII为假,不能使用#define CONFIG_RMII 0的方式进行声明,而应该使用#undef CONFIG_RMII的方式来声明;

    [3]. 换用#undef CONFIG_RMII的方式声明后,编译生成的二进制文件下载到开发板的flash中,在U-Boot的命令行模式,发现不能ping通服务器了,这是我们期望的;

    开发板原来能ping通服务器,现在不能ping通了,说明用#undef CONFIG_RMII的方式做的声明起作用了;

    [4]. 编译生成的二进制文件下载到目标板的flash中,在U-Boot的命令行模式,发现能够ping通服务器了,这是我们期望的;

    [5]. 目标板上使用tftp命令加载各种镜像文件,网络很通畅,又解决了一个拦路虎;


  • 相关阅读:
    websocket 初识
    JavaScript 系列博客(四)
    JavaScript 系列博客(三)
    JavaScript 系列博客(二)
    JavaScript 系列博客(一)
    前端(八)之形变
    前端(七)之动画与阴影
    java变量、数据类型
    js简单的获取与输出
    Eclipse字体修改
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218567.html
Copyright © 2020-2023  润新知