/***************************************************************************
*         imx6 ar8031 千兆网卡不能用
* imx6无论是运行linux还是android都无法ping通直连的pc,但是配置成dhcp却能够正常上网。
* 本文记录解决过程。
*
*            Tony Liu, 2016-4-19, Shenzhen                              
***************************************************************************/
参考:
  交叉线,直通线区别:
  http://www.admin10000.com/document/3946.html
  nxp论坛中的讨论:
  http://www.nxpic.org/module/forum/forum.php?mod=viewthread&tid=595457&extra=&highlight=ping%2B%E4%B8%8D%E9%80%9A&page=3
  mac配置中的宏:
  http://lists.infradead.org/pipermail/linux-arm-kernel/2014-July/270174.html
一、ping不通
  进行如下尝试: .首先关闭电脑和板子上的防火墙。
  
.板子添加默认网关  
    route add default gw 192.168.2.1 netmask 255.255.255.0
  
.查看电脑上是否有到板子的arp表项。
arp -a
接口: 192.168.2.110 --- 0xb
Internet 地址 物理地址 类型
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态   如果没有,在windows上添加静态arp。
  使用 netsh i i show in 命令 查看 本地连接的idx编号
    
C:\Windows\system32>netsh i i show in Idx Met MTU 状态 名称
--- ---------- ---------- ------------ ---------------------------
connected Loopback Pseudo-Interface
connected 本地连接
connected 本地连接
connected VMware Network Adapter VMnet1
connected VMware Network Adapter VMnet8
  使用 netsh -c "i i" add neighbors 本地连接的idx “网关IP” “网关mac” 命令绑定。
    网关mac是板子的mac。
    netsh -c "i i" add neighbors "192.168.2.1" "1e-ed-19-27-1a-b3"
  查看结果:
接口: 192.168.2.110 --- 0xb
Internet 地址 物理地址 类型
192.168.2.1 1e-ed---1a-b3 静态
224.0.0.2 --5e--- 静态
224.0.0.22 --5e--- 静态
224.0.0.251 --5e---fb 静态
224.0.0.252 --5e---fc 静态
239.255.255.250 --5e-7f-ff-fa 静态 二、板子通过交换机可以ping同电脑。 、板子的phy是ar8031,连接交换机之后,可以ping通电脑。怀疑可能线序有问题,所以采用交叉线进行直连,也不能ping通。
、交换机只支持10M/100M,查看PC网卡属性,链接速度也自协商到100M,而此时板子上的网络也是100M,所以能够ping通。初步分析,直连情况下,电脑网卡和板子上phy自协商失败。
、直连情况下,将电脑的网卡速率强制设置为10M全双工/半双工,板子网络也变为10M半双工,说明自协商成功,只是在1000M的状态被限制了。
更改电脑网卡速率,板子串口输出。
PHY: : - Link is Down
PHY: : - Link is Up - /Half
三、代码跟踪
、可能是phy设置有误,上网查看,设置的内容都一样,更改phy设置没有生效。
、查看驱动kernel/driver/net/fec.c
    在驱动中进行调试。由于每次网络断开,直连的后都会有输出。

static void 
fec_restart(struct net_device *dev, int duplex)函数。

    添加调试,发现板子自协商的时候,直连电脑的网卡是1G或者自协商时,都只进入10M/100M的配置。
/* 10M or 100M */
if (fep->phy_dev && fep->phy_dev->speed == SPEED_100) {
val &= ~( << );
}
else {
val |= ( << );
}
  ... ... ...  
  //说明if的条件里面没有都满足。
  /* if phy work at 1G mode, set ENET RGMII speed to 1G */
if (fep->phy_dev && (fep->phy_dev->supported &
(SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full)) &&
fep->phy_interface == PHY_INTERFACE_MODE_RGMII &&
fep->phy_dev->speed == SPEED_1000) {
val |= (0x1 << ); //使能1000M模式
} /* RX FIFO threshold setting for ENET pause frame feature
* Only set the parameters after ticket TKT116501 fixed.
* The issue has been fixed on Rigel TO1.1 and Arik TO1.2
*/
if ((cpu_is_mx6q() &&
(mx6q_revision() >= IMX_CHIP_REVISION_1_2)) ||
(cpu_is_mx6dl() &&
(mx6dl_revision() >= IMX_CHIP_REVISION_1_1))) {
writel(FEC_ENET_RSEM_V, fep->hwp + FEC_R_FIFO_RSEM);
writel(FEC_ENET_RSFL_V, fep->hwp + FEC_R_FIFO_RSFL);
writel(FEC_ENET_RAEM_V, fep->hwp + FEC_R_FIFO_RAEM);
writel(FEC_ENET_RAFL_V, fep->hwp + FEC_R_FIFO_RAFL); /* OPD */
writel(FEC_ENET_OPD_V, fep->hwp + FEC_OPD);
} if (cpu_is_mx6q() || cpu_is_mx6dl()) {
/* enable endian swap */
val |= (0x1 << );
/* enable ENET store and forward mode */
writel(0x1 << , fep->hwp + FEC_X_WMRK);
}
writel(val, fep->hwp + FEC_ECNTRL);    //使能Ethernet Control Register static int fec_enet_mii_probe(struct net_device *ndev)函数:
查看初始化,反向芯片选择这里只打开了10M/100M的支持,没有打开1000M支持。导致MAC寄存器没有使能1000M功能。
  将PHY_BASIC_FEATURES更改为PHY_GBIT_FEATURES。问题解决。
  如下所示。
/* mask with MAC supported features */
if (cpu_is_mx6q() || cpu_is_mx6dl())
// phy_dev->supported &= PHY_BASIC_FEATURES;
phy_dev->supported &= PHY_GBIT_FEATURES;
else
phy_dev->supported &= PHY_BASIC_FEATURES; 宏定义如下:
#define PHY_BASIC_FEATURES (SUPPORTED_10baseT_Half | \
SUPPORTED_10baseT_Full | \
SUPPORTED_100baseT_Half | \
SUPPORTED_100baseT_Full | \
SUPPORTED_Autoneg | \
SUPPORTED_TP | \
SUPPORTED_MII) #define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \
SUPPORTED_1000baseT_Half | \
SUPPORTED_1000baseT_Full)

网卡速率调整: 控制面板\网络和 Internet\网络连接。右键网卡,属性->配置->高级,如下图所示。

imx6 ar8031 千兆网卡不能用的更多相关文章

  1. I.MX6 开启 1000Mb/s interface

    /*********************************************************************** * I.MX6 开启 1000Mb/s interfa ...

  2. imx6 fec分析

    /***************************************************************************** * imx6 fec分析 * 本文主要分析 ...

  3. imx6 matrix keyboard

    imx6需要添加4x4的矩阵键盘.本文记录添加方法. 参考链接 http://processors.wiki.ti.com/index.php/TI-Android-JB-PortingGuide h ...

  4. imx6 关闭调试串口

    需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...

  5. imx6 Image Vector Table (IVT)

    imx6开启启动之后,运行板子上的ROM程序.ROM确定启动的设备,进行一些初始化,然后读取IVT,进行寄存器初始化,最后运行uboot/cpu/arm_cortexa8/start.S中的_star ...

  6. imx6 usb otg config 配置

    imx6 usb的host和slave配置,配置之后,安装gadget模块,就能够在host和slave之间切换. 参考文档: i.MX 6Dual/6Quad Linux Reference Man ...

  7. imx6 gpio irq

    /***************************************************************** * gpio irq * * 一直以来都没了解过gpio的irq, ...

  8. imx6 otg host support

    本文记录添加imx6 otg host支持的过程. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6108560.html https://communi ...

  9. imx6 RGB LCD

    imx6dl需要支持lcd接口的屏,imx6dl的datasheet并没有明确的说明lcd相关的配置,只在Display Content Integrity Checker (DCIC)一章中介绍.本 ...

随机推荐

  1. Appium測试安卓Launcher以滑动窗口获得目标应用

    所谓Launcher,指的是安卓的桌面管理程序,全部的应用图标都放在launcher上面.事实上这是一个非常easy的样例,仅仅是为了验证几点想法而已. 1.实验目的 做这个试验的目的有二 尝试下窗口 ...

  2. stm32 usart的几种通信模式

    一 USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART支持同步单向通信和半双工单线通信,也支持LIN(局 ...

  3. php log类

    个人抽离出来一个超级简易但是实用的代码段 public static function WriteLog($msg,$module = null,$logLevel = "DEBUG&quo ...

  4. [hihoCoder] 骨牌覆盖问题·二

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘 ...

  5. HTML5背景音乐的暂停与播放

    HTML代码:     <audio id="myaudio" loop="loop" preload="auto" autoplay ...

  6. [na]wireshark添加显示ip.id列

    wireshark添加ip.id字段 为了在多个设备上追踪同一个数据包. 如果是同一个会话,则可以计算延迟, 如sta和应用服务器慢,这种问题,可以根据这个加上ip.id追踪数据到哪里慢了.

  7. ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行

    ORACLE存储过程里游标遍历.调用job定时运行 1,第一种使用For 循环 for循环是比較简单有用的方法. 首先.它会自己主动open和close游标.攻克了你忘记打开或关闭游标的烦恼. 其次, ...

  8. Calendar.NET

      Please Sign up or sign in to vote.请注册或登录投票. Download Binaries 下载二进制文件 Download source 下载源代码 Introd ...

  9. Hibernate中HQLwhere用法和单独取出几列数据的读取方法

    String hql = "select thedate,thehour,node,query_num from Cdns cdns where thehour = " +&quo ...

  10. java的regex问题笔记

    参考javadoc java.util.regex.Pattern 里面有一些说明,如果还有不明白的地方 yes,google it. @ “不能以0开头,1到多位数字,字符集为0到9” " ...