你好:
我这边使用6748和Lan8700进行网络通信,现在参照C6748_Startware_1_20_04_01/examples/evm6748/enet_echo进行修改。
例程使用Lan8710的MII模式,时钟信号为25MHz;我这边使用Lan8700的RMII模式,时钟信号为50MHz。
现在我这边引脚配置、RMII模式已经配置好,使用MDIOInit()(读数据速率为1M,写数据速率为114M)和EMACInit()函数进行初始化MDIO和EMAC接口;通过mdio读写Lan8700寄存器。
问题:
使用unsigned int MDIOPhyRegRead(unsigned int baseAddr, unsigned int phyAddr, unsigned int regnum, volatile unsigned short *dataPtr)函数读Lan8700的32个寄存器时,返回值全为0。(MDIOPhyRegRead()函数定义中如果读到寄存器值,则返回1;如果没读到,则返回0)。为什么会没读到寄存器的值?
是因为Lan8700没工作?(但是我这边给8700提供了50MHz的时钟,理论上应该工作了)
还是说因为例程按照Lan8710编写程序,我这边使用Lan8700时不能直接用?(但是我对比了两个芯片,除了个别地方配置不同,其他都一样啊)
谢谢
Tony Tang:
是不是PHY的地址不对?
Tim ding:
回复 Tony Tang:
你好:
我看6748手册说,mdio可以支持32个phy,我把phy地址从0改到31,还是不对
Tony Tang:
回复 Tim ding:
设成PHY对应的地址,不是任意设个地址。
Tim ding:
回复 Tony Tang:
你好:
我看6748手册说,mdio可以支持32个phy,我把phy地址从0改到31,还是不对,为什么
Tim ding:
回复 Tony Tang:
Lan8700手册上,PhyADDR默认为0x11111,即31,但是我用31作为phy的地址,还是跟上面叙述的一样
Tim ding:
回复 Tony Tang:
你好:
Lan8700手册上说,PhyADDR默认为0x11111,即31。可是我用31作为phy地址,还是不对
Tim ding:
回复 Tony Tang:
Tony:
如果按照你说的,PhyAddr没有设置正确,那我这边应该怎么设置呢?
Lan8700手册上说,默认设置为0x1F,即31;但是我设置为31后,函数还是返回0
Tim ding:
回复 Tony Tang:
Tony:
1、这是我测量的MDIO和MDC引脚的波形,MDIO应该不用考虑时序问题吧?
你的意思是6748的MDIO引脚和Lan8700的MDIO引脚连接可能虚焊了?
2、时钟信号也是有的,50MHz
Tim ding:
回复 Tony Tang:
Tony:
我这边把Lan8700的引脚都焊了一边,现在能读寄存器了,id值也对了,非常感谢。
现在我通过网线连PC,ping不通。
请问:
1、这个跟MAC地址有没有关系?如果有,我这边MAC地址怎么设置?
2、网线有直连和交叉两种方式,这个也应该要确认一下吧?
3、还有其他的原因吗?