首先调试检查硬件,再调试软件

首先仔细阅读phy和主芯片datesheet ,尤其着重阅读mii寄存器,它是mac和phy交换信息的媒介。

硬件注意:关于phy的芯片需要注意的有几点:1、mdio接口和rgmii或者mii接口是否正确。2、电源是否稳定,晶振是否起振并且频率匹配。3、phy地址的配置是否正确,不能是0地址,因为0地址默认是所以芯片的地址。4、phy芯片输出时钟是否正确。4、phy和主芯片rgmii接口电平是否匹配。5、phy间的线序是否正确以及线路是否完好。6、mac和phy间的数据速率是否匹配即都是千兆百兆或10兆。

关于主芯片mac部分接口注意:1、rgmii或者mii以及mdio接口是否正确。2、mdio时序是否正确。3、rgmii时钟是否正确。

需要了解自协商过程以及mac->phy->phy->mac中间的连接,如果有一个断了就不能正确通信,因此首先得确保每段连接的接口物理和时序是正确的:对于phy间就是自协商成功,对于mac和phy间就是rgmii的时序正确即确保都是相同的数据速率(千兆百兆或10兆)。

mii寄存器解读:Status Register 0x01以及Extended Status Register 0x0F是用来显示phy自身能力以及当前状态的寄存器,因此有些值是默认的不能修改的,Link Partner Ability Register 0x05是用来显示连接伙伴能力的寄存器,而最终的协商结果是在Control Register 0x00的6、13 SPEED SELECTION和8 DUPLEX MODE位中的,因此程序中读取phy连接速度时应该读取该寄存器的值,而不是自身能力寄存器的值。海思的uboot中就出现了该错误。

注意mdio接口是主从接口可以一拖多,所以地址尤为重要,00地址是广播地址,不能使用该地址,uboot mii命令的使用,其可以驱动mdio接口,可以用此来调试phy芯片寄存器!!关于其应用可以在common/cmd_mii.c 文件结尾出看到,或者此博文中http://www.cnblogs.com/pengdonglin137/p/3682637.html

关于RGMII时序问题,rgmii的发送和接收时钟一直是125Mhz,不过在100M和10M模式时,数据的采样频率会延迟一些时钟,因此在mac端的数据要保持一些时钟,否则时序会出错!!

关于phy芯片的配置,正常情况下phy寄存器因为是mii标准寄存器,所以用原厂自带uboot配置就可以,除非自己调试phy芯片自带的功能,才配置其特殊功能寄存器,比如回环测试等。

在调试ar8031时可以通过loopback来测试环路是否通,有本地回环测试和远端回环测试,这样分别检查本地和远端回路是否联通,这样很容易发现哪边不通,具体看ar8031手册2.5.2,来通过mii配置寄存器。100M loopback: register 0x0 = 0xA100是错误的应该是6100。

本地回环测试就是ping自己的ip地址,这样数据就会接收回来。

远端回环测试

软件方面注意:需要分两部分来调试:1、phy芯片mii标准寄存器的配置以及phy工作原理,以及主芯片mac部分的寄存器配置和时钟配置是否正确,phy接口配置正确,mdio部分配置是否正确。

2、详细了解uboot下mac和phy驱动架构。3、在uboot代码中跟踪调试。

下面介绍uboot-2010.06中hi3531的mac phy驱动架构以及工作流程。

未完待续。。。。

http://blog.csdn.net/xiaoaid01/article/details/51104837

嵌入式开发之hi3519---i2c MDIO PHY uboot phy调试总结的更多相关文章

  1. 嵌入式开发之zynq---Zynq PS侧I2C驱动架构

    http://blog.chinaunix.net/uid-24148050-id-120532.html http://bbs.csdn.net/topics/390538368?page=1 ht ...

  2. 嵌入式开发之NorFlash 和NandFlash

    http://blog.csdn.net/tigerjibo/article/details/9322035 [摘要]:作为一个嵌入式工程师,要对NorFlash 和NandFlash要有最起码的认知 ...

  3. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102

    1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScale+  MPSoC架构 Xilinx新一代Zynq针对控制.图像和网络应用推出了差异化的产品系,这 ...

  4. 嵌入式开发之hi3519---spi nor flash启动

    author:pkf qq:1327706646 1.官方hi3519默认是硬件3byte 地址模式,配置完ddr始终后,sdkv100.020是可以支持正常启动,用到低位16Mflash内存 2.如 ...

  5. 嵌入式开发之zynq——赛灵思的一款两a9加一fpga芯片的开发板

    没办法,回家入职新公司,做通信的,用到这款zynq加ad9163射频架构的开发版,要我做驱动,这可是初次接触zynq,带fpga的集成芯片,心里还是有点惊喜和忧愁,忧愁怎么最快啃下这个硬骨头,好吧上网 ...

  6. Jetty 开发指南: 嵌入式开发之HelloWorld

    Jetty 嵌入式之 HelloWorld 本节提供一个教程,演示如何快速开发针对Jetty API的嵌入式代码. 1. 下载 Jar 包 Jetty被分解为许多jar和依赖项,通过选择最小的jar集 ...

  7. 嵌入式开发之hi3519---GPIO 驱动

    在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口.看到论坛中经常有朋友问海思为什么没有提供GPIO驱动.其实不然. 在海思SDK  xxx/osdrv/tools/board_tools/ ...

  8. 嵌入式开发之uart---rs232 和rs485 和rj45和usb简介

    (1) profilebus和can(control控制器局域网)和hub(集线器) (uart)通用异步传输 rs232: ibm 提出的,两根线,按位bit传输,是端到端的单信号电平模式,理论上有 ...

  9. 嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用

    c和cpp 混合的动态库生成: $(LIBSO): $(COBJS) $(CPPOBJS) $(CPP) -shared -o $@ $^ $(LIBS) ////////////////////// ...

随机推荐

  1. nowcoder提高组2题解

    T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...

  2. luoguP4709 信息传递 置换 + 多项式exp

    感觉我的做法并不是最优做法... 考虑一个置换\(g\)中的一个置换环\(S\) 在\(g^n\)的形态中,它变为了\(gcd(n, |S|)\)个长度相同的置换环 那么,我们考虑对\(f\)的所有置 ...

  3. 牛客提高集训营6 C 树(树链剖分)

    题目链接 为了纪(zhuang)念(bi)写完这个树剖单独写一篇.感觉还好,也就6k嘛. 完整比赛题解:https://www.cnblogs.com/SovietPower/p/9826829.ht ...

  4. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  5. yum 安装 jenkins

    环境:已安装 tomcat 安装(如果yum下载速度比较忙可以下载下来再安装) yum -y install https://pkg.jenkins.io/redhat/jenkins-2.77-1. ...

  6. Android Binder学习的网站

    1. Binder系列 http://gityuan.com/2015/10/31/binder-prepare/ 2. Binder机制 http://jcodecraeer.com/a/anzhu ...

  7. java 使用SAX解析xml 文件

    http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html 为了学习方便,忘博主勿究

  8. NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化

    NSArray *array = @[ @1, @2, @3, @4, @5, @3 ]; // 1. NSArray与NSData相互转化 // NSArray to NSData NSError ...

  9. 请远离include_once和require_once

    尽量使用include, 而不是include_once, 理由是 include_once需要查询一遍已加载的文件列表, 确认是否存在, 然后再加载. 诚然, 这个理由是对的, 不过, 我今天要说的 ...

  10. boost.xml_parser中文字符问题 (转)

    当使用xml_parser进行读xml时,如果遇到中文字符会出现解析错误. 网上有解决方案说使用wptree来实现,但当使用wptree来写xml时也会出错.而使用ptree来写中文时不会出错. 综合 ...