X210开发板(S5PV210芯片)uboot移植DM9000驱动移植

article/2025/10/6 16:05:41

前言

本文是介绍在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;


http://chatgpt.dhexx.cn/article/msMOv3rD.shtml

相关文章

嵌入式linux UBoot移植篇

如何在U-boot添加自己的linux板卡并启动呢&#xff1f; uboot 的移植并不是说我们完完全全的从零开始将 uboot 移植到我们现在所使用的开发板或者开发平台上。这个对于我们来说基本是不可能的&#xff0c;这个工作一般是半导体厂商做的&#xff0c; 半导体厂商负责将 uboot 移…

Uboot移植流程

linux-Bootloader&#xff08;Uboot&#xff09;移植流程 前言 最近在做ZigBee的温室大棚项目&#xff0c;将自己学习的过程和经验分享给大家。本文基于linux3.4.39内核版本&#xff0c;s5p6818开发板实现。 1、uboot启动简介 uboot启动的过程比较复杂&#xff0c;这里就只…

IMX6ULL Uboot 移植

使用的开发板&#xff1a;正点原子ALPHA V2.2 Uboot简介 在学习STM32的过程中使用过IAP在线升级就会知道&#xff0c;有引导程序APP程序&#xff0c;即bootloader程序APP。在学习嵌入式Linux的时候也一样&#xff0c;这个引导程序就是Uboot. uboot移植主要是根据原厂的uboot移…

二、uboot移植

二、uboot移植 版本作者时间备注V 1.0bug设计工程师2021/11/10创建文件软件网盘链接0交叉编译工具链接:https://pan.baidu.com/s/1yFO2NDMet9_b1E1q1rMwEA提取码:42kluboot源码同上linux源码同上文件系统工具同上tftp工具同上2.1 简单说明 uboot制作结束会生成 u-boot-etc44…

linux-uboot 移植四 uboot的移植

概述 前边的章节中介绍到如果要移植uboot的话&#xff0c;最好的参考就是由官方提供的demo。 1、移植 1.1 添加board对应的板级文件夹 uboot 中每个板子都有一个对应的文件夹来存放板级文件&#xff0c;比如开发板上外设驱动文件等等。 NXP 的 I.MX 系列芯片的所有板级文件…

[uboot 移植]uboot 移植过程

文章目录 uboot 移植1 修改顶层 Makefile2 在 board 文件夹下添加开发板对应的板级文件2.1 imximage_lpddr2.cfg 和 imximage.cfg 文件2.2 plugin.S 文件2.3 Kconfig 文件2.4 igkboard.c 文件2.5 MAINTAINERS 文件2.6 Makefile 文件 3 添加 igkboard_defconfig 配置文件4 添加开…

UBoot 移植

1 NXP官方开发板uboot编译测试 1 查找 NXP 官方的开发板默认配置文件 因为我们的开发板是参考 NXP 官方的 I.MX6ULL EVK 开发板做的硬件&#xff0c;因此我们在移植 uboot 的时候就可以以 NXP 官方的 I.MX6ULL EVK 开发板为蓝本。 在 NXP 官方 I.MX6UL/6ULL 默认配置文件中找…

大话uboot 移植

结合作者多年的移植经验&#xff0c;尽量简单的为大家描述一个uboot 的移植过程。希望通过描述&#xff0c;给初入移植行道的你带来美好的希望。接下来&#xff0c;我们通过以下几个方面来描述。 1. arm soc 的启动方式 在描述soc 前&#xff0c;我们先看下一个简单的arm soc:…

uboot移植步骤

Uboot移植具体步骤(本例子为Samsung origen板) 第一步:准备源码 网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/ 在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师) 在Linux系统下解压 tar xf 压缩包名 第二步:修改源码 1.抄板:将和你板子兼容…

(二)uboot移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

目录 一、前言 二、F1C200s上电启动顺序 三、前期准备 四、新建用户 五、交叉编译环境配置 六、uboot简介 七、uboot移植 &#x1f34f; uboot下载 &#x1f34f; uboot默认配置 &#x1f34f; uboot图形界面配置 &#x1f34f; uboot编译 &#x1f34f; 烧录bin…

U-Boot 移植初探

1. NXP官方开发板uboot编译测试 uboot移植不需要从零开始将uboot移植到使用的开发板上。因为半导体厂商通常都会自己做一个开发板&#xff0c; 将uboot移植到他们自己的原厂开发板上&#xff0c;再将这个uboot&#xff08;原厂BSP 包&#xff09;发布出去。因此使用自已的开发…

U-Boot移植

一、U-Boot Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;芯片上电以后先运行一段bootloader程序。 bootloader程序会先初始化DDR等外设&#xff0c;然后将Linux内核从flash(NAND&#xff0c;NOR FLASH&#xff0c; SD&#xff0c; eMMC 等)拷贝到 DDR 中&…

uboot移植

一、我们知道uboot就是一个Bootloader。但是&#xff0c;arm不像我们的pc机一样&#xff0c;用一个老毛桃随便找一个网站下一个windows镜像就可以直接装了。 我们的uboot对应的就是老毛桃里面刷的引导程序。 虽然uboo支持很多架构很多不同的厂家的板子&#xff0c;但是UBOOT它…

【Linux】系统移植篇四--uboot移植

系统移植篇四--uboot移植 一、uboot源码结构1、uboot源码获取2、uboot特点3、uboot源码结构 二、uboot的配置与编译1、uboot配置2、uboot编译 前言&#xff1a;本篇主要介绍uboot的一些结构与相关配置&#xff0c;uboot是一款免费开源的芯片启动软件&#xff0c;代码完全开源&a…

uboot移植过程

uboot移植过程 IMX6ULL 文章目录 uboot移植过程 IMX6ULL 前言一、从原厂中移植uboot进行测试二、在U-Boot中添加自己的硬件1. 添加默认配置文件2. 添加对应的头文件3. 添加对应的板级文件夹3.1 修改Makefile文件3.2 修改 mx6ull_alientek 目录下的 imximage.cfg 文件3.3 修改 m…

MediaCodec对接到OMX的简单分析

一、引言&#xff1a; nuplayer播放器是使用MediaCodec来进行编解码的&#xff0c;而OMX组件则是MediaCodec的解码核心&#xff0c;但是因为涉及的面太过底层&#xff0c;往往是芯片公司才会涉及到这一块&#xff0c;所以就做一个简单分析&#xff0c;对通路有个大致了解就行。…

MediaCodec(native)状态机分析

一、引入&#xff1a; MediaCodec这条通路的调用逻辑是MediaCode->ACodec->OMX&#xff0c;因为OMX有自己的状态机&#xff0c;所以MediaCodec和ACodec也分别基于OMX组件的调用维护了其状态机&#xff0c;这篇博客就先分析MediaCodec的状态机是如何运转的。 二、MediaCo…

视频-MediaCodec

1.解析视频可以使用android 提供的api MediaPlayer,实现简单的播放暂停&#xff0c;提取视频中的一帧或者编辑视频&#xff0c;需要另一个api MediaCodec&#xff08;硬解&#xff0c;控制DSP芯片&#xff09;或者 ffmpeg(软解&#xff0c;耗时)&#xff0c;选择的优先级一定要…

MediaCodec解析MP4视频

MediaCodec讲解 MediaCodec是Android提供的用于对音视频进行编解码的类&#xff0c;它通过访问底层的codec来实现编解码的功能。是Android media基础框架的一部分&#xff0c;通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTra…

Android视频编解码之MediaCodec简单入门

本篇只是简单入门&#xff0c;后面会继续写文章详细讲解&#xff1a; 由于MediaCodec涉及内容众多&#xff0c;原本想一篇文章把所有内容概括&#xff0c;但是后来发现不太可能&#xff0c;限于自己能力&#xff0c;想要考虑全面太难&#xff0c;我也是刚开始学习需要借助网上…