前言

本文是介绍在uboot中如何移植DM9000的驱动,并不深入去讲解DM9000芯片的操作时序和内部寄存器,想要读懂驱动代码要仔细阅读DM9000芯片的数据手册。移植的基础是手里有DM9000芯片可以用的驱动代码,只需要根据开发板中DM9000芯片的接线方式来配置驱动的参数。

SROM控制器介绍

S5PV210芯片的地址映射

S5PV210芯片有6个SROM端口,其中SROM Bank1的地址是0x8800_0000–0x8FFF_FFFF,DM9000就是接在Bank1上面。

SROM控制器

(1)SROM是指SRAM、PROM、NorFlash等可以和Soc总线式连接,不需要初始化的介质;
(2)S5PV210芯片有6个SROM端口,支持8bit和16bit模式,每个Bank的地址固定;
(3)接在SROM端口的设备,可以像读写内存一样去访问;

SROM端口原理图

6个SROM Bank用一个端口来表示,通过片段引脚来分时操作不同的SROM端口,共用地址线、数据线、控制线。相关的引脚都是复用的,在初始化SROM端口时,肯定要先设置GPIO端口的模式。

SROM控制器引脚说明

(1)ADDR[0:22]:地址线;DM9000只连接了16根数据线,用了DDR2用作命令线用以区分发的是命令还是数据;
(2)DATA[0:15]:数据线,传输数据或者地址,分时复用;
(3)OEn:读数据的使能引脚;
(4)WEn:写数据的使能引脚;
(5)nGCS[5:0]:6个片选信号引脚;6个SROM Bank但是只有一组地址线和数据线,通过片选信号引脚去操作不同的SROM控制器,访问不同的设备;
(6)nWAIT:等待输入引脚;(不太清楚具体功能,实际没有接这个引脚)
(7)nWBE/nBE[1:0]:写字节使能;(不太清楚具体功能,实际没有接这个引脚)

SROM控制器的寄存器

SROM控制器的寄存器分为两类:SROM_BW和SROM_BCn[0:5]。其中SROM_BW是配置SROM控制器位宽等信息的,每4位配置一个SROM控制器;SROM_BCn是每个SROM控制器对应一个,根据接在SROM端口的设备设置时序;

SROM_BW寄存器

引脚名称 功能
ByteEnablen[0:5] 和时序相关,不清楚,实际也没有接这根线
WaitEnablen[0:5] 和时序相关,不清楚,实际也没有接这根线
AddrModen [0:5] 按字节对齐还是按半字对齐
DataWidthn[0:5] 设置SROM控制器的模式,接几根数据线就是什么模式

SROM_BCn[0:5]寄存器

全是和时序有关的,要根据DM9000芯片数据手册去查相关的时间,然后根据时间长短和时钟频率去计算需要的时钟周期。

DM9000芯片介绍

原理图

备注:左边是DM9000芯片的原理图,右边是网口的原理图;#号表示该引脚低电平有效

引脚介绍

引脚名称 功能说明
SDn[0:15] 16根数据线,和SROM端口的数据线相连接,既传数据又传地址
CS# 片选引脚
CMD 命令引脚,高电平表示数据线上传输的是数据,低电平时传输的地址
IOR# 读数据使能
IOW# 写数据使能
INT 中断引脚
LED1 表示网络传输速度
LED2 网路是否连接
TX+/TX- 发送数据引脚,采用的差分信号
RX+/RX- 接收数据引脚,采用的差分信号

寄存器

DM9000芯片的数据手册对寄存器有说明,不过光看数据手册也很难完全理解驱动代码里的操作时序代码,这里就不做介绍了。Soc访问这些寄存器的地址等于SROM端口的基地址+偏移量。

uboot中DM9000芯片移植

驱动设计思想

参见博客:《驱动设计思想(机制、策略、分离、分层)》;

网卡初始化函数调用

start_armboot()init_sequence[]board_init()dm9000_pre_init()

SROM端口控制器初始化

static void dm9000_pre_init(void)
{unsigned int tmp;#if defined(DM9000_16BIT_DATA)SROM_BW_REG &= ~(0xf << 4); //DM9000接在SROM Bank1,所以是bit4-bit7SROM_BW_REG |= (1<<7) | (1<<6) | (1<<5) | (1<<4);
#elseSROM_BW_REG &= ~(0xf << 4);SROM_BW_REG |= (0<<6) | (0<<5) | (0<<4);
#endifSROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));//uboot//SROM_BC1_REG = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));//kerneltmp = MP01CON_REG;tmp &=~(0xf<<4);tmp |=(2<<4);MP01CON_REG = tmp;
}

(1)SROM_BW_REG和SROM_BC1_REG 是SROM控制器的配置寄存器。SROM_BW_REG中设置SROM Bank1为16bit模式、字节存取,因为DM9000就是接在SROM Bank1上的;SROM_BC1_REG 就是SROM Bank1的时序配置寄存器,具体要去根据时序算需要的时钟周期数。
(2)MP01CON_REG是MP01端口的控制寄存器,将MP01_1设置成Xm0CSN1模式,也就是SROM Bank1的片选引脚;

DM9000芯片的基地址修改

#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)
#else
#define DM9000_DATA         (CONFIG_DM9000_BASE+1)
#endif
#endif

(1)CONFIG_DM9000_BASE是DM9000接在SROM控制器上的基地址。本来SROM Bank1的基地址查询地址映射表应该是0x88000000,之所以加0x300,是查看别人已经移植好的网卡程序。DM9000出过很多款,有的是不用加这个偏移量的。
(2)DM9000_DATA=CONFIG_DM9000_BASE+4:因为是将地址线DDR2接在CMD引脚,所以是+4;

X210开发板(S5PV210芯片)uboot移植DM9000驱动移植相关推荐

  1. uboot的移植——移植uboot官方的uboot到x210开发板

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 参考内容 uboot--官网下载直接移植(一) - biaohc - 博客园 uboot--官网下载直接移植(二) - biaohc - ...

  2. x210开发板linux驱动开发,移植Qt与Tslib到X210开发板的体会

    1.将QT移植到X210上,让X210开发板可以运行QT东西,需要几个东西.tslib QT源码编译后的lib库等 (1)tslib移植: @1:下载tslib,官方上下就可以. @2:解压.比如解压 ...

  3. 解决X210开发板被刷成砖的问题

    解决X210开发板被刷成砖的问题 1.开发板使用:     开发板是九鼎科技的X210BV3S开发板,SoC是S5PV210,是三星的一款基于ARM Cortex-A8内核的芯片. 2.所看教学课程: ...

  4. 开发板——在X210开发板上进行裸机开发的流程

    流程总结 本文以"LED流水灯"为例,说明在X210开发板上进行裸机开发的流程. 步骤一:搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统,并安装交叉编译工具链: ...

  5. 关于x210开发板和主机、虚拟机ping通问题

    关于x210开发板和主机.虚拟机ping通问题: 步骤: 1.关闭 Ubuntu.关闭VMware软件: 2.打开 网络连接,设置 以太网 IP地址,并确认使用的网卡 3.以管理员身份打开VMware ...

  6. ARM X210开发板的软开关按键问题

    一.X210 开发板的软启动电路详解 <x210bv3.pdf> (1) 210 供电需要的电压比较稳定,而外部适配器的输出电压不一定那么稳定,因此板载了一个文稳压器件 MP1482. 这 ...

  7. 开发板——X210开发板的软开关(供电置锁)

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 一.前言 本章节在裸机课程的SD卡启动部分. 本文讲述如何设置开发板,使得一按下电源键程序运行后即可松手不会断电,即供电置锁. 二.软开 ...

  8. x210开发板升级glibc-2.10到glibc-2.18版本的解决方案

    一.问题的出现 最近用QT5.12.04的版本开发了一个qmqtt客户端,移值到开发板上运行时出现如下报错: ./mqttsubscriptions: /lib/libc.so.6: version ...

  9. ARM裸机的知识点总结---------10、解决X210开发板软开关按键问题( 引脚功能复用)

    Author: 想文艺一点的程序员 自动化专业 工科男 再坚持一点,再自律一点 CSDN@想文艺一点的程序员 来自朱有鹏嵌入式的学习笔记 目录 1.X210开发板的软启动电路详解 2.为什么要软启动 ...

最新文章

  1. 016_Vue数组数据的响应式处理
  2. 浅谈vue,小程序,react基础绑定值
  3. 自动驾驶「无视」障碍物:百度研究人员攻陷激光雷达
  4. data-sap-ui-icon-content where does icon content come from
  5. SQL UNION 和 UNION ALL 操作符(mysql)
  6. vfp 修改本机时间_时间旅行调试
  7. 自动化测试基础(一):字符串的取值、切割、替换、去除、拼接
  8. oracle创建用户与权限操作(oracle学习笔记一)
  9. android studio for android learning (四) 兼容性问题
  10. 三维重建笔记——Linux环境下openMVG的安装
  11. ssis 链接mysql_SSIS 连接数据
  12. 深刻理解原型图设计的核心
  13. 初中计算机初识word教学设计,《初识Word》教学设计
  14. AP计算机科学第12版5-6章参考答案
  15. java基础-取余数,取商
  16. 芯驰任命程泰毅为CEO:张强和仇雨菁分别担任CMO和COO
  17. 检测xposed框架实现
  18. 震撼人心的敏涵控股集团———如日方升
  19. 2016-年蓝桥杯C-(A组)赛题-网友年龄
  20. codewars(二)

热门文章

  1. BCC-Tool 工具使用
  2. 高德地图:在地图中以点击的位置生成一个marker
  3. 苹果发布iPhone7 ,销量出现历史性低!
  4. overleaf是啥
  5. 【零基础强化学习】强化学习中的有模型和无模型
  6. error C4496: 使用了非标准扩展“for each”: 替换为 ranged-for 语句
  7. 棋盘格类的路径(范围)
  8. SQL SERVER添加注释的快捷键
  9. Linux内核轻量级隧道
  10. Codeforces Problem 708A Letters Cyclic Shift(implementation)