大家好,想使用AM3359的rmii2来作为网络接口,采用LAN8710A,参考时钟ref_clk是从AM3359上产生的,想问几个问题:
1.如果用AM3359产生的ref_clk的话 phy芯片8710a是不是完全不能工作?
2.想在uboot下调试网络,该如何配置才能让rmii2作为接口的网络正常工作?目前知道的需要配置pinmux,phy_id,GMII_SEL,还有什么需要配置的吗?
pinmux配置如下
/*myself*/
static struct module_pin_mux rmii2_pin_mux[] = {
{OFFSET(gpmc_a11), MODE(3) | RXACTIVE}, /* RMII2_RXD0 */
{OFFSET(gpmc_a10), MODE(3) | RXACTIVE}, /* RMII2_RXD1 */
{OFFSET(gpmc_wpn), MODE(3) | RXACTIVE}, /* RMII2_RXERR */
{OFFSET(gpmc_a0), MODE(3)}, /* RMII2_TXEN */ {OFFSET(gpmc_a5), MODE(3)}, /* RMII2_TXD0 */
{OFFSET(gpmc_a4), MODE(3)}, /* RMII2_TXD1 */
{OFFSET(gpmc_wait0), MODE(3) | RXACTIVE}, /* RMII2_CRS_DV */
{OFFSET(mii_col), MODE(1)}, /* RMII2_REFCLK */
{OFFSET(mdio_data), MODE(0) | RXACTIVE | PULLUP_EN},/* MDIO_DATA */
{OFFSET(mdio_clk), MODE(0) | PULLUP_EN}, /* MDIO_CLK */
{-1},
};
GMII_SEL设置为0X5
3.目前在uboot下执行命令,会出现 U-Boot# dhcp link up on port 0, speed 1000, full duplex BOOTP broadcast 1 BOOTP broadcast 2 BOOTP broadcast 3 BOOTP broadcast 4
想问下 怎么会出现1000M的情况呢 8710a配置的是自协商模式, 是不是因为ref_clk的原因?port0是怎么回事,我配置的pinmux是rmii2,不应该是port1吗,这是不是由phy_id
决定的?
Jian Zhou:
RMII模式下,必须要用PHY提供的50MHZ referrence clock。
如果是最新的SDK06.00.00,实际上只做了port0的auto-negotiation
kedacom:
回复 Jian Zhou:
你好 Jian Zhou
我用是最新的SDK06.00.00,我配置的是port1,为什么执行dhcp的时候还会使用port0
如何给port1增加auto-negotiation,有什么资料吗?
Gary Wu:
请参考AM335X的errata,上面有描述在RMII模式下,AM335X不能提供参考时钟给PHY。
两种方式解决上述问题:
(1)外部接50M有源晶振同时给PHY和EMAC供参考时钟;
(2)通过PHY输出的时钟给AM335X。
PHY驱动侧的修改,如你提及的,就是这三个方面。
kedacom:
回复 Gary Wu:
你好 Gary Wu
感谢你的回答
时钟这方面准备替换一下,现在还有个疑问
就是在phy_id和GMII_SEL以及pinmux已经配置的情况下
我在uboot下执行dhcp 会出现
link up on port 0, speed 1000, full duplex 为什么还是port0,而且是1000M的
怎么变成port1 speed变成100M
kedacom:
回复 Gary Wu:
你好 Gary Wu
我换掉了晶振后,已经解决了部分问题
但是我想使用rmii2 在uboot下面执行dhcp后出现的还是port0,
link up on port 0, speed 100, full duplex BOOTP broadcast 3 BOOTP broadcast 4 BOOTP broadcast 5 BOOTP broadcast 6
请问这是为什么呢?phy_id配置的是0 并且做了以下修改
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x208, .sliver_reg_ofs = 0xd80, .phy_id = 1, }, { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_id = 0, },};
请问还有需要修改的地方吗 ?