u-boot网卡移植——DM9000

Posted 0nism

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了u-boot网卡移植——DM9000相关的知识,希望对你有一定的参考价值。

u-boot网卡移植——DM9000

u-boot网卡移植——DM9000

一、SROM-BANK控制器

技术图片
Address Map

??由内存映射图可见,SROM_BANK包含6个区域。
??SROM是与CPU连接时,采用的是总线式的访问方法。SROM_BANK就是SoC提供的对外总线式连接SRAM/ROM的接口。
??如果SoC要外部外接一些SRAM/ROM类的存储芯片(或者伪装成SROM接口的芯片,譬如网卡芯片)就要通过SROM Controller来连接。网卡接在SROM中好处就是网卡芯片好像一个存储芯片一样被扩展在SoC的一个地址空间中,主机SoC可以直接用一个地址来访问网卡芯片内部寄存器。

二、原理图

技术图片
DM9000接线图

??从图中可以看出:
??1.DM9000采用的是16bits的接线
??2.Chip Select接CSn1,意味着DM9000连接着SROM_BANK1,地址为0x8800_0000
??3.图中只出现了数据线,说明数据线与地址线共用
??4.重要端口CMD接ADDR2。CMD引脚置高电平,表示现在传输的是数据;CMD引脚置低电平,表示现在传输的是寄存器地址(index)。
技术图片
??5.负责与外部通讯的有四根线,分别为TX-TX+RX-RX+,这意味着网线传输采用的是差分传输。另外网线还有四根地线,用于抗干扰。

三、网卡初始化
start_armboot
		init_sequence
				board_init
						dm9000_pre_init

??该函数其实主要用于初始化SROM_BANK。对于网卡本身的设置,由于u-boot直接移植自Linux内核,所以目前可能还看不懂。

static void dm9000_pre_init(void)
{
	unsigned int tmp;

#if defined(DM9000_16BIT_DATA)
	SROM_BW_REG &= ~(0xf << 4);
	SROM_BW_REG |= (1<<7) | (1<<6) | (1<<5) | (1<<4);
#endif
	SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));

	tmp = MP01CON_REG;
	tmp &=~(0xf<<4);
	tmp |=(2<<4);
	MP01CON_REG = tmp;
}

??分析上述被使用的三个寄存器:

  • SROM_BW
    ??全称SROM Bus Width & Wait Control Register
    技术图片

  • SROM_BC
    ??全称SROM Bank Control Register
    ??配置按照原厂配置即可

  • MP0_1CON
    ??GPIO复用设置
    技术图片

??对于其他的相关配置,有三点值得考虑:

#define DM9000_16BIT_DATA

#define CONFIG_DRIVER_DM9000	1

#ifdef CONFIG_DRIVER_DM9000
	#define CONFIG_DM9000_BASE		(0x88000300)
	#define DM9000_IO			(CONFIG_DM9000_BASE)
		#if defined(DM9000_16BIT_DATA)
			#define DM9000_DATA			(CONFIG_DM9000_BASE+4)
		#endif
#endif

??1.为何DM9000的基地址是多了三百的偏移量?猜测可能是DM9000的型号差异导致的。
??2.为何DM9000的数据线基地址要加上0x100?DM9000_IO表示访问芯片IO寄存器的基地址,直接就是CONFIG_DM9000_BASE;DM9000_DATA表示我们访问数据时的基地址,因为DM9000芯片的CMD引脚接到了ADDR2,因此这里要+4(0b100,对应ADDR2)




















以上是关于u-boot网卡移植——DM9000的主要内容,如果未能解决你的问题,请参考以下文章

u-boot-2016.03在mini2440移植 之DM9000

u-boot-2014.10移植识别dm9000

STM32入门开发: LWIP网络协议栈移植(网卡采用DM9000)

Linux驱动TQ2440 DM9000E网卡驱动移植(Linux-2.6.30.4)

27.Linux-DM9000C网卡移植(详解)

《驱动学习 - DM9000C网卡移植》