ARM 汇编初始化 SDRAM 详解

news2024/9/22 15:59:32

一、初始化代码框架介绍(函数调用和返回、步骤等)

SDRAM 初始化使用一个函数 sdram_asm_init ,函数在 sdram_init.S 文件中实现,是一个汇编函数。
强调:汇编实现的函数在返回时需要明确使用返回指令(mov pc, lr)
$ ls -l
total 59
-rw-r--r-- 1 luokaijie 197121   365 Jul  8  2015 Makefile
-rw-r--r-- 1 luokaijie 197121  1048 Jul  8  2015 led.c
-rw-r--r-- 1 luokaijie 197121   198 Jul  8  2015 link.lds
-rw-r--r-- 1 luokaijie 197121  2627 Jun 29  2015 mkv210_image.c
-rw-r--r-- 1 luokaijie 197121 28513 May 24  2012 s5pv210.h
-rw-r--r-- 1 luokaijie 197121 12809 Jul 10  2015 sdram_init.S
-rw-r--r-- 1 luokaijie 197121  2102 Jul 10  2015 start.S
-rwxr-xr-x 1 luokaijie 197121    72 Jun 29  2015 write2sd*

在这里插入图片描述

在这里插入图片描述


1、27 步初始化 DDR2

  1. 首先,DDR 初始化和 SoC(准确说是和 SoC 中的 DDR 控制器)有关,也和开发板使用的DDR 芯片有关,和开发板设计时 DDR 的连接方式也有关。
  2. S5PV210 的 DDR 初始化步骤在 SoC 数据手册:section 05_memory 1.2.1.3 DDR2 Initialization sequence for DDR2 memory type 这个章节。可知初始化 DDR 共需 27 个步骤。

在这里插入图片描述

  1. 之前分析过 X210 的内存连接方式是:在 DRAM0 上连接 256MB,在 DRAM1 上连接了256MB 。所以初始化 DRAM 时分为 2 部分,第一部分初始化 DRAM0,第二部分初始化 DRAM1.
  2. 我们的代码不是自己写的,这个代码来自于:第一,九鼎官方的 uboot 中;第二,参考了九鼎的裸机教程中对 DDR 的初始化;第三,有些参数是朱有鹏根据自己理解修改过的。

2、设置 IO 端口驱动强度

因为 DDR 芯片和 S5PV210 之间是通过很多总线连接的,总线的物理表现就是很多个引脚,也就是说 DDR 芯片和 S5PV210 芯片是通过一些引脚连接的。DDR 芯片工作时需要一定的驱动信号,这个驱动信号需要一定的电平水平才能抗干扰,所以需要设置这些引脚的驱动能力,使 DDR正常工作。

DRAM 控制器对应的引脚设置为驱动强度 2X(我也不知道为什么是2X,什么时候设置成3X 4X?,这东西只能问 DDR 芯片厂商或者 SoC 厂商,我们一般是参考原厂给的代码)

在这里插入图片描述

在这里插入图片描述


3、DRAM port 时钟设置

从代码第 128 行到 154 行。主要是开启 DLL(dram pll)然后等待锁存。
这段代码对应 27 步中的第 2 到第 4 步。
在这里插入图片描述

在这里插入图片描述


4、DMC0_MEMCONTROL

DMC0_MEMCONTROL
burst length=4,1chip,······  对应值是0x00202400

DMC0_MEMCONFIG_0
DRAM0 通道中 memory chip0 的参数设置寄存器
DMC0_MEMCONFIG_1
DRAM0 通道中 memory chip1 的参数设置寄存器

总结:我猜测(推论):三星设置 DRAM0 通道,允许我们接 2 片 256MB 的内存,分别叫memory chip0 和 memory chip1,分别用这两个寄存器来设置它的参数。按照三星的设计,chip0的地址应该是 0x20000000 到 0x2FFFFFFF,然后 chip1 的地址应该是0x30000000~0x3FFFFFFF .各自 256MB。

但是我们 X210 开发板实际在 DRAM0 端口只接了 256MB 的内存,所以只用了 chip0,没有使用chip1 .(我们虽然是2片芯片,然后这两片是并联形成 32 位内存的,逻辑上只能算 1 片)。按照这个推论,DMC0_MEMCONFIG_0 有用,而 DMC0_MEMCONFIG_1 无用,所以我直接给他了默认值。


5、DMC_DIRECTCMD

在这里插入图片描述

在这里插入图片描述

这个寄存器是个命令寄存器,我们 210 通过向这个寄存器写值来向 DDR 芯片发送命令(通过命令总线),这些命令应该都是用来配置 DDR 芯片工作参数。

总结:DDR 配置过程比较复杂,基本上是按照 DDR 控制器的时序要求来做的,其中很多参数要结合 DDR 芯片本身的参数来定,还有些参数是时序参数,要去详细计算。所以 DDR 配置非常繁琐、细致、专业。所以我们对 DDR 初始化的态度就是:学会这种思路和方法,结合文档和代码能看懂,会算一些常见的参数即可。


6、重定位代码到 SDRAM 中

DRAM 初始化之后,实际上重定位代码过程和之前重定位到SRAM中完全相同。

在这里插入图片描述


源自朱有鹏老师.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1561_AURIX_TC275_电源管理以及监控

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 从这个拓扑图中可以看的出来,AD相关部分的供电以及参考电压都是独立的,而且是来自于外部的。 1. LDO相关的模块有EVR33和EVR13. 2. 1.3V的供电之前只知道是一个内核…

win11:clion + cmake + mingw + glfw

clion & cmake 官网下载安装即可 clion的设置 mingw 链接 版本如下: windows系统只考虑选择x86_64-win32-sjlj和x86_64-win32-seh,区别: sjlj支持32位和64位seh只支持64位,比较新 glfw 官网提供下载:源码、…

[附源码]JAVA毕业设计学生公寓管理系统(系统+LW)

[附源码]JAVA毕业设计学生公寓管理系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

蜣螂算法(原理)

原文(附文献下载) 1 群体智能优化算法 SI(swarm intelligence)系统的特点是个体间的相互作用促进了智能行为的出现。 SI优化过程的实现主要包括以下两个步骤: 在搜索空间范围内创建一组随机个体在迭代过程中组合、移动或进化这些随机个体。 每种优化算法的区别…

基于java+springmvc+mybatis+jsp+mysql的校园办公室报修管理系统

项目介绍 校园办公室报修管理系统,是基于java编程语言,ssm框架,jsp技术,mysql数据库开发,本系统主要分为用户,教师,管理员,维修员四个角色,其中用户的功能是注册和登陆系…

【多尺度融合:基于深度学习:压缩图像伪像:blocking artifact】

Deep learning-based compressed image artifacts reduction based onmulti-scale image fusion (基于多尺度图像融合的基于深度学习的压缩图像伪影减少) 在基于块的图像/视频压缩平台中,视觉上明显的压缩伪像之一称为blocking artifact&…

CubeIDE新建工程

使用CubeIDE新建工程 开发流程如图(图片来源于b站教程): 1、新建工程 打开CubeIDE,选择文件>新建>STM32Project 软件自己会下载hal库,首次下载可能会有些慢,请耐心等待。 下载完成后,自…

基于java+springmvc+mybatis+jsp+mysql的个人所得税服务系统

项目介绍 随着居民的收入不断提高,个人都需要缴纳一定比例的个人所得税,传统的方式是去税务大厅人工缴纳,为了解决这种人工交税的方式,特此开发了一个在线交税的网站,本系统采用java语言开发,后端采用ssm框…

微服务框架 SpringCloud微服务架构 微服务保护 34 规则持久化 34.2 实现push 模式

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护34 规则持久化34.2 实现push 模式34.2.1 规则管理模式 - 实现push 模式34 规则持久化 34.2 实现p…

【LeetCode每日一题:1827. 最少操作使数组递增~~~贪心遍历模拟】

题目描述 给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。 比方说,如果 nums [1,2,3] ,你可以选择增加 nums[1] 得到 nums [1,3,3] 。 请你返回使 num…

Opencv中关于特征点匹配定位的问题(一)

Opencv中关于特征点匹配定位的问题回顾定位回顾 在我们检测到特征点之后,通常进行特征点的匹配。 首先我们先回顾一下使用Brute-Force匹配器来进行匹配。 import cv2 import numpy as np import matplotlib.pyplot as plt#读取图片 imgcv2.imread(./newmm.png) te…

【图像边缘检测】拉普拉斯算法图像边缘检测与增强【含Matlab源码 456期】

⛄一、拉普拉斯图像增强算法优化简介 图像Laplace变换是基本图像增强算法,原始图像通过Laplace变化后会增强图像中灰度突变处的对比度,使图像中的细节部分得到增强并保留了图像的背景色调,图像的细节比原始图像更加清晰。基于Laplace的图像增强已经成为图像锐化处理的基本工具…

SpringBoot快速入门

SpringBoot快速入门1.Spring Boot是什么2.IDEA创建Spring Boot项目3.测试业务4.application.properties的基本配置1.Spring Boot是什么 众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spr…

ADI Blackfin DSP处理器-BF533的开发详解30:鼠标的光标显示应用(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 触摸屏的硬件设计原理图 功能介绍 代码实现了读取触摸屏坐标,并将触摸屏坐标换算为液晶屏的显示坐标,将光标数据叠加到背…

我的开源项目:文件快递柜-匿名口令分享文本,文件-像拿快递一样取文件

口令传送箱 解决问题 很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不想为了分享,而去下载一些七里八里的软件,这时候,我们就可以使用口令传送箱,像拿快递一…

Docker快速入门—高级篇【快速浏览版】

文章目录1.Mysql复杂安装详细解说1.1 安装mysql主从复制2.Redis复杂安装详细解说2.1 分布式存储算法2.2 Redis主从安装2.2.1 Redis集群3主3从的说明2.2.2 Redis集群配置2.2.3 主从容错切换迁移案例2.2.4 主从扩容案例2.2.5 主从缩容案例3.Dockerfile解析⭐️3.1 Dockerfile简介…

no matching host key type found. Their offer: ssh-rsa 问题解决

最近升级了Mac OS Ventura 13.0.1后发现ssh指定密钥登录服务器失败。 no matching host key type found. Their offer: ssh-rsa 进入当前用户的.ssh目录发现比之前系统多了一个config文件 查看sshd版本,发现升级了,需要指定算法参数 解决办法&#xff…

12月11日第壹简报,星期日,农历十一月十八

12月11日第壹简报,星期日,农历十一月十八1. 北京急救中心呼吁:无症状、轻症患者勿拨打120,为危重症患者留出通道;钟南山:发热患者可先在家做抗原检测,如持续发热再去医院检查。2. 湖北省第一条高…

解读YOLO v7的代码(一)模型结构研究

YOLO v7在今年7月份推出,模型的性能和速度相比以往版本有了很大的提升。我也想好好研究一下YOLO v7模型,因此把官方的代码库下载下来进行研究,尝试更好的理解这个模型。 从文档中我们可以看到,如果要从头开始训练,可以…

Linux系统的开机自启动

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Linux系统的开机自启动 - joshua317的博客 当你使用windows操作系统时,开机后总会有各种软件自我启动完成,你并没有在桌面上点击它们的图标启动。比如某些安全卫士,某些…