TQ210 板载的网卡芯片是 DM9000A,接在 S5PV210 的 SROM 控制器的 BANK1 上。
S5PV210 的 SROM 控制器支持 8/16 位 NOR Flash/PROM/SRAM 内存。 分为 6 个 bank,每个 bank 寻
址空间达 128MB。 每个 bank 有一个片选信号 nGCS[5:0], 用来选通外接的内存芯片。 当发的地址在
bank1 的寻址范围内(0x88000000~0x8FFFFFFF)时,表示在访问 bank1, 此时 nGCS1 信号被拉低,
这就选中了接在 bank1 上的 DM9000A 网卡芯片。 S5PV210 手册给出了每个 bank 的地址空间
当对某个地址进行读操作时, S5PV210 的 Xm0OEn 信号被自动拉低,这个信号引脚接在 DM9000A 的
nIOR 上, 这就对 DM9000A 进行了读使能,可以从 DM9000A 读数据; 当对某个地址进行写操作时,
S5PV210 的 Xm0WEn 信号被自动拉低,这个信号引脚接在 DM9000A 的 nIOW 上,这就对 DM9000A
进行了写使能,可以向 DM9000A 写数据。 DM9000A 的 16 根数据线全部接在 S5PV210 的数据线上。
位时被设置成初始值。 DM9000A 有 2 个端口: DATA 和 INDEX (即地址)。 DM9000A 的地址和数据线
复用, 当 CMD 引脚为低电平时,操作的是 INDEX 端口,当 CMD 引脚为高电平时操作的是 DATA 端口。
CMD 引脚接在 S5PV210 的地址线 Xm0ADDR2 上。
假设要读取 DM9000A 的寄存器 RSR(RX Status Register),需要分 2 步:
1) 向 INDEX 端口写入 RSR 寄存器的地址(0x06)
条件: nGCS1 信号拉低、 Xm0WEn 信号拉低、 Xm0ADDR2 拉低, 或者说向下面的地址写数据 0x06
(0x88000000~0x8FFFFFFF) & ~(1 << 2)
2) 从 DATA 端口读取 RSR 寄存器的值
条件: nGCS1 信号拉低、 Xm0OEn 信号拉低、 Xm0ADDR2 拉高, 或者说从下面的地址读数据
(0x88000000~0x8FFFFFFF) | (1 << 2)
假设要向 DM9000A 的寄存器 TCR(TX Control Register)写数据 0x56,同样需要 2 步
1) 向 INDEX 端口写入 TCR 寄存器的地址(0x02)
条件: nGCS1 信号拉低、 Xm0WEn 信号拉低、 Xm0ADDR2 拉低, 或者说向下面的地址写数据 0x02
(0x88000000~0x8FFFFFFF) & ~(1 << 2)
个人 QQ: 809205580 技术交流群: 153530783 个人博客: http://blog.csdn.net/zjhsucceed_329
2) 将要写入的数据(0x56) 写入 DATA 端口
条件: nGCS1 信号拉低、 Xm0WEn 信号拉低、 Xm0ADDR2 拉高,或者说向下面的地址写数据 0x56
(0x88000000~0x8FFFFFFF) | (1 << 2)
有了这些理论知识就可以确定 DM9000A 的基地址了,在后面会用到。
下面开始移植
首先我们要初始化 S5PV210 的 SROM 控制器,设置相关时序。 针对 SROM 控制器的每一个 bank 只有
2 个寄存器: SROM_BW 和 SROM_BC,我要配置的是 bank1,所以只需配置 SROM_BW 和 SROM_BC1
在 SROM_BW 寄存器中,我们只关心与 bank1 相关的域