This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3359和marvell的转发芯片通过rgmii连接,但只是单方向通了,AM3359显示收到的包显示为错包,求解

Other Parts Discussed in Thread: AM3359

AM3359和marvell的转发芯片通过rgmii连接,参考原理图是EVM SK。

使用的是RGMII2。

从AM3359到marvell的转发芯片的这个方向,通讯正常。

但从marvell的转发芯片到AM3359这个方向,可以看到RGMII接口上的时钟线信号正常,数据线上也有数据。

查看AM3359的包统计,看到收到很多错包。

我调整了下RGMII的延时模式,依然如故。

对了,AM3359是RGMII的主模式,marvell的转发芯片也是主模式,所以交叉了连线才可以正常通讯,这点和EVM SK有点区别,不过这个应该没关系吧

求高人指点原因,拜谢

  • 一般来说,配网络的phy多半是三个步骤,调整pinmux配置;配置RGMII模式;修改PHY_ID。

    你确认一下你在软件上这几个配置都正确吗?另外也可以通过MDIO通信的方式读取PHY上的寄存器,判断PHY这端的工作是否正常。

    没懂你最后一句的描述:对于这块时钟上的设计,一般都是外接晶振给到AM335x和PHY的,不建议使用335x上的。

  • MDIO口已经通讯正常,AM335x已经可以读取转发芯片的信息了,可见phyid是正常的

    运行的是EVM_SK的starterware的代码,CPU端的pinmux和RGMII模式应该不存在问题吧。通过MDIO口也可以读取到转发芯片的信息,看到已经设置好了rgmii模式,并且从统计数据看,包也已经发出,但cup显示收到了错包。

    am335x发的包,转发芯片已经可以正常接收,也就是单个方向的rgmii接口已经通了,这从接受方,也就是转发芯片的统计数据也可以看到。

    那个主从,我没说清楚,和晶振无关。AM335X使用EVM_SK中的32.768k和24M的晶振。而转发芯片和开发板的ar8031一样,使用25M晶振。只是接收和发送线需要交叉,而开发板中的ar8031是不需要交叉的

  • 请问你测了几块板子?都是一样的结果吗?

    PS:你的经历,让我想到了我的一个客户调PHY调了一个月,也是能发不能收,最后发现是硬件焊接问题。当时我debug的方式,是采用AM335x跑LInux,接到了一个开启DHCP的路由器上,电脑接到这个路由器上,用wireshark抓包:结果发现AM335x端发DHCP discover是正常的,路由器也回了DHCP offer,但是AM335x没有响应,没有DHCP request出来。如果可以的话,可以这样试一下。

  • 一开始的板子是这样的情况,后来另一块板子重新排版制版安装器件。问题也是单向通了,所以硬件问题的可能性不太大吧。

    没明白你这样的测试方法,如何就证明是硬件问题呢?

    我是这样测试的,AM335X有两个RGMII口,其中RGMII1接的是ar8031,和evm_sk完全一样,外部的rj45口就叫网口1吧。

    rgmii2接的是转发芯片,有好几个网口,外部的rj45口,就叫网口2和网口3吧。

    从网口1接入电脑1,在网口2接入电脑2,在网口3接入电脑3,三个电脑都用wireshark抓包。电脑2和电脑3是可以互相ping通的,可见转发芯片本身是没有问题的。

    从电脑1去ping电脑2的ip,结果电脑2显示收到arp包,并且做了回复。但电脑1却没有收到这个arp回复。也就是在从电脑2->转发芯片->cpu->电脑1的路上出问题了。

    用电脑2去ping电脑1,显示arp包发出去了。但电脑1没有收到包,路径也是同上。

    用电脑1去ping cpu的ip,显示是通的。

    用电脑2去ping cpu的ip,显示是不通的。

    然后去看包数统计,就得出如第一帖的结果。

  • 不是说能定位硬件问题,是能够帮忙确认收发是不是正的正常,以及在收、发哪一个步骤除了问题。

    了解你的测试了,你目前使用的是switch mode,还是standalong mode?http://processors.wiki.ti.com/index.php/AM335x_CPSW_(Ethernet)_Driver%27s_Guide

    然后有个疑问是你最后说的,ping cpu的ip,cpu的ip是啥?这意思是指电脑1的ip去ping网口1的ip,电脑2的ip也是ping网口1的ip吗?

  • 在starterware下,可以给cpu里的cpsw配置两个ip,或者一个ip,前者是在是dual mac mode下,应该就是你说standalong mode了吧,后者不是。

    我是用的是只配置一个ip的那种,所以简称为cpu 的ip,可能称呼不准确

    电脑1和电脑2,都是ping的这个ip。

    电脑1通过ar8031和RGMII1连接cpu的,可以ping通。

    电脑2通过转发芯片和RGMII2连接cpu的,ping不通。

  • 请问你用的是mavel的交换芯片吗,型号是哪个?百兆还是千兆?

    Mavel的交换芯片原理我大致看过,应该和普通PHY差不多,如果你的RGMII1所连接的千兆PHY工作没有问题,那么我觉得其实硬件应该问题不大。

    如果CPU发送的数据没问题而接收的数据有问题,那么是不是本身Mavel交换芯片从网络链路上拿到的数据就是一些错误包数据,但是并没有给CPU error信号呢?

  • 七个千兆口的88e6352.电脑2和电脑3是可以互相ping通的,可见转发芯片转过来的数据本身是没问题的,这条路经不经过cpu.电脑1和电脑2不是互通的,这条路经是经过cpu的.从统计来看,转芯片也看不到错包
  • 自己顶下,望高手指点
  • 能否做一个测试,你在CPU中把网口1disable掉,再使用转发芯片上的任一电脑ping CPU,这样可以ping通吗?

  • 这个描述有点不太明白,电脑2和3互相Ping通,是把AM3359当作NAT使用吗,也就是说数据经过了CPU?

  • 没太明白,目前电脑2和电脑3都是ping 不通cpu那个ip的,在am335x中把网口1diasble掉是为啥啊
  • 网口2和网口3都是和转发芯片连着的,他们互通时不经过cpu,
  • 我是想排除一下网口1对网口2的影响,在Linux上,如果双网口同时使用,且在同一网段,俩口同时使用是有问题的,需要划分VLAN。没研究过的Starterware中是否也有类似局限,所以想通过这种方式验证一下,如果网口1disable掉,你转接芯片上的电脑就都能ping通CPU的网口2 IP,那就说明确实有影响了;如果还是ping不同,那就不用朝着这方向找原因了。

  • 如果你CPU发送都是正常的,但是接收不正常,我现在有点怀疑是硬件的问题,是不是接收信号线上有干扰啊

  • 我是cpu中只配置了一个ip的那种啊,而且从统计看收到错包,貌似不是软件的问题。那如果这麽试,如何禁止掉网口1呢?
  • 那有什么排除或者验证方法的吗?在示波器上看,波形是有的。pcb看,连接正常且长短很近似
  • 对于底层检验错误的包,am335x有什麽方法可以把它抓出来不?如果可以的话,手工看下,或许可以看到是否受了干扰吧
  • 你如果连接普通的以太网PHY,收发不会出错,那么这个交换机芯片在原理和PCB设计上有没有特殊的要求,比如特殊的上下拉之类的。

  • 你好,你当时接的是marvell的 switch芯片吗?通过RGMII接口直连am335x和switch,对吧?那驱动你用的是哪里的驱动可否告知一下?另外这个问题最后是怎么解决的呢?谢谢,麻烦了。