Atmel AT91SAM9G20 EMAC控制DM9161调试笔记

AT91SAM9G20的EMAC可用于控制外设PHY的工作模式,EMAC工作模式可以为MII和RMII。



DM9161连线说明:

分别说明了MII和RMII连线的方式。



可通过DM9161---RXD管脚以及第35号管脚配置PHY设备地址,EMAC在操作外接PYH设备的时候使用地址区别不同设备,RXD管脚说明:


DM9161实际原理图:

从原理图可看出PHY设备地址为3,并使用RMII接线模式(地址由RXD【0:3】四个引脚确定,RMII模式使用接线比MII少了一半)


AT91SAN9G20主要寄存器使用说明:

从Datasheet里Memories一章找到EMAC寄存器起址:


根据EMAC寄存器偏移表找出具体寄存器地址:



(AT91SAM9G20)

EMAC_NCR寄存器、EMAC_MAN寄存器说明如下:

EMAC_NCR寄存器(重要位说明):
RE:接收使能位
TE:发送使能位
MPE:控制端口使能位

EMAC_MAN寄存器 (重要位说明):
DATA:操作PHY设备的指令
CODE:必须设置为10
REGA:PHY设备号
PHYA:PHY设备寄存器地址
RW:读写控制位
SOF:一帧数据开始前必须设置为01

本次设计主要操作这两个寄存器,调试代码如下:
static void macb_mdio_write(struct macb_device *macb, u8 reg, u16 value)
{
	unsigned long netctl;
	unsigned long netstat;
	unsigned long frame;

	netctl = macb_readl(macb, NCR);读NCR寄存器状态
	netctl |= MACB_BIT(MPE);设置NCR寄存器(把MPE置位,使能控制端口)
	macb_writel(macb, NCR, netctl);写数据到NCR寄存器

	frame = (MACB_BF(SOF, 1)
		 | MACB_BF(RW, 1)
		 | MACB_BF(PHYA, macb->phy_addr)
		 | MACB_BF(REGA, reg)
		 | MACB_BF(CODE, 2)
		 | MACB_BF(DATA, value));构造一帧完整的的数据
	macb_writel(macb, MAN, frame);把构造好的数据使用EMAC_MAN寄存器发送到PHY设备

	do {
		netstat = macb_readl(macb, NSR);
	} while (!(netstat & MACB_BIT(IDLE)));检查状态寄存器

	netctl = macb_readl(macb, NCR);
	netctl &= ~MACB_BIT(MPE);
	macb_writel(macb, NCR, netctl);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值