Fork Me on GitHub

源码开放学ARM

LASO - Learn ARM with Source Open

首页         目录索引         资料下载         代码下载         联系作者        
下载PDF打印版本

Linux 网络设备驱动

驱动硬件基础

DM9000 的物理连接

  • RJ45 接口 8 根线
  • 重要的4根线被引出
    pin1 pin3 分别是 TX+/RX+
    pin2 pin6 分别是 TX-/RX-
    能够区分对连和直连 (交叉和级联) 1<–>3 2<–>6

DM9000 与 SoC 芯片的连接

* 使能的问题
Xm0CSn1 - Bank 片选
0x8800_0000 0x8FFF_FFFF 128MB SROM Bank 1

* 控制的问题
CMD - 1:数据周期 0:地址周期
Control & Status register
如何能够被 SoC 芯片访问到 40多个内部寄存器

* 数据的问题
DATA0 - DATA15

两个端口–地址口和数据口

#define DM_ADDR_PORT (*((volatile unsigned short *) 0x88000000)) //地址口
#define DM_DATA_PORT (*((volatile unsigned short *) 0x88000004)) //数据口

向地址端口写的数据,作为选择寄存器的编号
向数据端口写的数据,作为配置上面那个寄存器的配置值

端口的读写接口

//写DM9000寄存器   
void __inline dm_reg_write(unsigned char reg, unsigned char data)   
{   
	DM_ADDR_PORT = reg;            //将寄存器地址写到地址端口   
	DM_DATA_PORT = data;            //将数据写到数据端口   
}   

//读DM9000寄存器   
unsigned char __inline dm_reg_read(unsigned char reg)   
{   
	DM_ADDR_PORT = reg;              
	return DM_DATA_PORT;             //将数据从数据端口读出   
}  

通过读写接口获取芯片ID

void dm_read_id(char id[])
{
	id[0] = dm_reg_read(DM9000_VIDL); 
	id[1] = dm_reg_read(DM9000_VIDH); 
	id[2] = dm_reg_read(DM9000_PIDL); 
	id[3] = dm_reg_read(DM9000_PIDH); 

	return;
}	

上一节 | 目录索引 | 下一节

blog comments powered by Disqus