Linux,uboot,kernel启动流程,S5PV210芯片的启动流程,DRAM控制器初始化流程

一、S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析

1、DRAM的地址空间
在这里插入图片描述

1)从地址映射图可以知道,S5PV210有两个DRAM端口。 DRAM0的内存地址范围:0x200000000x3FFFFFFF512MB);DRAM1:的内存地址范围:0x400000000x7FFFFFFF1024MB);
2)S5PV210实际最多能接1.5G的内存。32位的CPU理论上能接4G的内存,但是ARM结构的机器是统一编址,寄存器会占掉一部分地址空间,所以实际是达不到4G的内存;

2、DRAM端口的引脚
在这里插入图片描述

DRAM端口的引脚:32根数据线(Xm1_DATAn) + 14根地址线(Xm1_ADDRn) + 3根片选信号线(Xm1_BAn) + 控制信号线。

3、DRAM控制器

DRAM是比较复杂的器件,初始化DRAM需要根据数据手册里的时序说明来写代码,没有对DRAM有深入的了解是没法写出合适的代码。但是DRAM的接口统一,于是在复杂CPU里集成了DRAM控制器,编程人员只需要操作寄存器就可以发出相应的时序,而不用去管时序是如何产生的。DRAM控制器简化了使用Soc开发人员的工作,我们只需要知道DRAM的大致过程和关键的参数就可以去初始化DRAM。

4、DRAM初始化
数据手册里初始化步骤
在这里插入图片描述

DRAM控制器支持多个版本的DRAM的,比如S5PV210支持LPDDR、LPDDR2、DDR2。不同版本的DRAM初始化步骤是不一样的,上面就是初始化DDR2的部分初始化步骤。初始化DDR2的代码就是按照上面的步骤进行的,但是上面的步骤很粗略,很多细节没有列举出来,但是可以辅助我们阅读DDR2的初始化代码;

实际代码初始化流程分析

代码来源:uboot中对DRAM的初始化代码,下面只是从逻辑上梳理了初始化过程,要结合代码才能真正理解整个初始化过程;
(1)设置GPIO引脚的驱动强度;
(2)设置DRAM控制器的DLL,给DRAM控制器提供稳定的时钟信号;
(3)关掉DRAM的自动重刷新;
(4)配置DRAM的相关参数:行地址、列地址、自动重刷新间隔、DRAM的有效地址空间、Memory Burst Length、数据线宽度、DRAM类型等关键参数;
(5)根据数据手册里的初始化步骤,依次给DRAM发命令进行初始化。发命令的实质就是按照时序去初始化DDR2,只不过时序由DRAM控制器产生,我们不再操心。
(6)最终DDR2初始化成功,后面的程序都重定位到DDR2中执行;

二、S5PV210芯片的启动流程

1、内存

1、只读
ROM,irom,不需要初始化,上电就可读2、可随机读写,任何地址
SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用。
DRAM 动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。

单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM
嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质
PC机: 内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM

2、外存

1、都是不可随机访问地址,只能按块,页,一次性读或写NorFlash:特点是容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质。
NandFlash:(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,也就是说不能上电CPU直接读取,需要CPU先运行一些初始化软件,然后通过时序接口读写。
emmc:和nandflash,一样,区别是集成好多nand颗粒,有坏快管理,比nandflash贵,好用
ufs:新出来的一种大容量存储器,比emmc还大,可以到500GB,和硬盘一样大,和emmc差不多。

3、方案设计

一般PC机都是:很小容量的BIOS(NorFlash)+ 大容量的DRAM + 很大容量的硬盘(类似于NandFlash)。
一般的单片机: 很小容量的NorFlash + 很小容量的SRAM(全部是上电即可使用) 。
嵌入式系统:因为NorFlash很贵,所以现在很多嵌入式系统倾向于不用NorFlash,直接用:SoC内置SRAM + 外接的大容量Nand + 外接的大容量DRAM。

4、S5PV210启动方式设计

S5PV210 使用的启动方式是:外接的大容量 Nand Flash 硬盘 + 外接的大容量 DRAM 内存 + SoC 内置 SRAM。
实际上 S5PV210 的启动还要更好玩一些,S5PV210 内置了一块 96KB 大小的 SRAM(叫 iRAM),同时还有一块内置的 64KB 大小的 NorFlash(叫 iROM)。

210 的启动过程大致是:

S5PV210内部有 iROM 和 iRAM,因此启动时分两个阶段:内部启动阶段和外部启动阶段。对于内部启动阶段各种S5PV210的开发板都是相同的,对于外部启动阶段,不同开发板会有不同。
S5PV210出厂时内置了 64KB iROM和 96KB iRAM。iROM 中预先内置烧录了一些代码(称为 iROM 代码),iRAM 属于 SRAM(不需软件初始化,上电即可使用)。210启动时首先在内部运行 iROM 代码,然后由 iROM 代码开启外部启动流程。

第一步:CPU 上电后,先从内部 IROM(NOR Flash)中读取预先设置的代码,执行。这一段 IROM 代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存 的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式,sd卡启动,还是nandflash启动,看uboot,kernel烧录在那里),然后从相应的外部存储器去读取启动代码到内部 SRAM(叫 iRAM)。第二步:从 SRAM(叫 iRAM) 去运行刚上一步读取来的启动代码,然后执行。这一段启动代码就会负责初始化 Nand Flash 硬盘, 初始化 DRAM 内存 ,初始化板卡,然后将 OS 从 Nand Flash 硬盘读取到 DRAM 内存 , 然后运行。

在这里插入图片描述

IROM(NOR Flash)和 iRAM(SRAM)的地址空间,0xD0020000 - 0xD0037FFF
在这里插入图片描述

思路:因为启动代码的大小是不定的,有些公司可能 96kb 就够了,有些公司可能 1MB 都不够。所以刚才说的两步的启动方式不合适。三星的解决方案是:把启动代码分为两半(BL1 和 BL2),这两部分协同工作来完成启动。

实际的启动方式如下:

第一步:CPU 上电后先从内部 IROM 中读取预先设置的代码(BL0),执行。这一段 IROM 代码首先做了一些基本的初始化(CPU 时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部 SRAM(叫 iRAM)。第二步:从 SRAM(叫 iRAM)去运行刚上一步读取来的 BL1(16KB),然后执行。BL1 负责初始化 NandFlash 硬盘,然后将 BL2 读取到 SRAM(叫 iRAM)(剩余的 80KB)然后运行第三步:从 SRAM(叫 iRAM)运行 BL2,BL2 初始化 DRAM 内存,然后将 OS 读取到 DRAM 内存中,然后启动 OS,启动过程结束。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
device copy function 的解释
The S5PV210 internally has a ROM code of block copy function for boot-u device. Therefore, developer may not needs to
implements device copy functions. These internal functions can copy any data from memory devices to SDRAM. User can
use these function after ending up the internal ROM boot process completely.

S5PV210内部有一个用于引导-u设备的块拷贝功能的ROM代码。因此,开发人员可能不需要实现设备复制功能。
这些内部函数可以将任何数据从内存设备复制到SDRAM。用户可以在完全结束内部ROM启动过程后使用这些功能。
也就是, IROM 代码(BL0)拥有针对各种启动介质(NOR Flash/eSSD/OneNand/Nand Flash)的块拷贝函数。因此,开发人员可能不需要实现设备复制功能。这些内部函数可以将任何数据从启动介质设备复制到SDRAM。用户可以在完全结束 IROM(BL0)阶段后使用这些拷贝函数,将 BL1 代码拷贝到 IRAM(internel SRAM)中执行。
如下,内置函数
在这里插入图片描述
bl0,bl1,内置copy函数
在这里插入图片描述

完整的启动框架图
在这里插入图片描述

3、Second boot support

When 1 st boot mode fails, SD/MMC boot will be tried through SD/MMC channel 2 with 4-bit data
当第一启动模式失败时,SD/MMC卡启动模式下将会从SD/MMC2通道尝试再次启动。
这种二级启动是一种冗余设计。SoC 中第一启动介质故障而导致不能启动时,可以从备用启动介质启动。一步检查外部启动介质
在这里插入图片描述

使用 iROM 启动的好处
1、降低BOM成本。因为 iROM 可以使 SOC 从各种外设启动,因此可以省下一块 boot rom(专门用来启动的rom,一般是norflash)
2、支持各种校验类型的nand flash
3、可以在不使用编程器的情况下使用一种外部存储器运行程序来给另一种外部存储器编程烧录。这样生产时就不用额外购买专用编程器了,降低了量产成本。

总结
在这里插入图片描述
在这里插入图片描述

不同启动介质sd,emmc,nandflash,烧录uboot时,块地址
在这里插入图片描述

可以看到,对于 SD卡、MMc、eSSD的启动介质,BL1 代码应该拷贝到启动介质的 1 号扇区;
而对于其他启动介质,BL1 代码应该拷贝到启动介质的 0 号扇区。

** Header information data for Boot Code description,BL1数据格式**

The BL1 must have header data. The header data is used for being copied to internal SRAM by iROM code. 
The header data has two information. One is size of BL1 and Another is checksum data of BL1.BL1必须有报头数据。报头数据被用于通过iROM代码复制到内部SRAM。
头数据有两个信息。一个是BL1的大小,另一个是BL1的校验和数据。因为irom是不知道拷贝多大的,所以就像网络通信数据报头一样
需要告诉包号,大小,现在8年后,回来终于明白了,为啥要加数据头了,后面才是真正有用的数据段。

在这里插入图片描述
When loading BL1, iROM check size of BL1 in header data and copy BL1 to internal SRAM.
After coping BL1, iROM sum data of copied BL1 and compare it to checksum data in header data of BL1.
If it is success, BL1 start. otherwise iROM will try second boot(4-bit SD/MMC) from SDMMC channel 2 port.

当加载BL1时,iROM检查头数据中BL1的大小,并将BL1复制到内部SRAM。
拷贝BL1后,将复制的BL1的iROM数据求和,并将其与BL1头数据中的校验和数据进行比较。
如果成功,BL1开始。否则iROM将尝试从SDMMC通道2端口进行第二次引导(4位SD/MMC)。
这样校验目的是保证启动代码绝对正确,防止数据错误,被篡改。做芯片安全启动时,就有md5,计算数据,然后通过公钥匙私钥匙算法
验证启动代码的正确性。

在这里插入图片描述

朱友鹏开发板学习过来的额。

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

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

相关文章

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用(建议)3.1 使用方式一3.2 使用方式二(建议) 一、应用权限管理 应用权限保护…

SpringCloud Alibaba之Seata处理分布式事务

(学习笔记,必用必考) 问题:Transactional 的9种失效场景? 1、介绍 1.1、简介 官网地址:Apache Seata 源码地址:Releases apache/incubator-seata GitHub Seata是一款开源的分布式事务解决…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【文件系统】上

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…

linux StarRocks 安装

一、检查服务器是否支持avx2,如果执行命令显示空,则不支持,那么安装后无法启动BE cat /proc/cpuinfo |grep avx2我的支持显示如下: 二、安装 docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -p 9001:9000 --privilegedtrue…

ps证件照蓝底换白底

ps证件照蓝底换白底 1、打开 Photoshop,导入需要处理的照片。 2、左侧工具栏中选择“魔棒工具”,点击证件照的背景区域进行选择。 3、使用快捷键 Shift F5 或者从顶部菜单选择“编辑” -> “填充”,在弹出的对话框中选择“填充内容”中…

内网渗透-红日1

红日靶场1 渗透测试过程外网打点突破边界内网横向权限维持最后 渗透测试过程 本文章只说明渗透测试思路和技巧,对域靶场搭建不进行赘述 web-ip外网设置为 192.168.119.130,kali和外网ip同网段 外网打点 kali扫描目标ip nmap扫描目标网段   nmap -P…

三菱FX5UPLC-MODBUS/TCP通信

1、使用FX5的MODBUS/TCP通信功能时,可与将FX5作为从站并通过以太网连接的各种MODBUS/TCP主站设备进行通信。 2、对应主站功能及从站功能,1台FX5可同时使用为主站及从站。 3、1台CPU模块中可用作MODBUS串行通信功能的通道数最多为8个连接。 4、在主站中&a…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

sqli-lab靶场学习(三)——Less8-10(盲注、时间盲注)

Less8 第八关依然是先看一般状态 http://localhost/sqli-labs/Less-8/?id1 然后用单引号闭合: http://localhost/sqli-labs/Less-8/?id1 这关的问题在于报错是不显示,那没办法通过上篇文章的updatexml大法处理。对于这种情况,需要用“盲…

皮科医生对网红药膏的说明

维A酸乳膏 阿达帕林凝胶 (粉刺 黑头 炎症性痘痘 痘印) 局部点涂 维A酸乳膏(0.01%) 0.1% 晚上使用 点涂 不能见光 做好防晒 过氧化苯酰 灭杀痤疮杆菌 发炎痘痘 效果好 先局部点涂试用 抗生素 红霉素眼膏 浓度低 结膜炎 治疗痘痘 痤疮对红霉素 耐药性强 夫西地酸软膏 脓疱性 丘…

基于单片机的无线宠物自动喂食系统设计

本设计研究了一种无线宠物自动喂食器,其功能是先将宠物饲料放入其中,通过设定喂食时间点,当到达这一时间点后,系统开始播报语音同时控制步进电机转动,自动进行喂食。本设计主要研究怎么设定时间并进行投喂,…

java项目之常规应急物资管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 基于SpringBootVue的…

2024年 5 个优秀的Flutter图标库

2024年 5 个优秀的Flutter图标库 视频 https://youtu.be/jJV_1WUBXB8 https://www.bilibili.com/video/BV1Fw4m1k7A4/ 前言 原文 top-5-flutter-icon-libraries-202 best flutter icon library 作为Flutter开发者,您一定需要优质的图标资源来美化应用程序。 虽然官方提供了…

经典报童问题的2类扩展实例:带广告的报童问题和多产品报童问题

文章目录 1 引言2 经典报童问题3 带广告的报童问题3.1 论文解读3.2 样本均值近似方法 4 多产品报童问题4.1 论文解读4.2 算法模型4.3 简单实例求解4.4 复杂实例求解 5 总结6 相关阅读 1 引言 中秋已过,国庆未至,趁着这个空窗期,学点新知识&a…

二分查找算法(2) _在排序数组中查找元素的第一个和最后一个_模板

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 二分查找算法(2) _在排序数组中查找元素的第一个和最后一个_模板 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评…

NLP-transformer学习:(7)evaluate实践

NLP-transformer学习:(7)evaluate 使用方法 打好基础,为了后面学习走得更远。 本章节是单独的 NLP-transformer学习 章节,主要实践了evaluate。同时,最近将学习代码传到:https://github.com/Mex…

【Linux篇】网络编程基础(笔记)

目录 一、服务器模型 1. C/S 模型 2. P2P模型 二、服务器编程框架 1. I/O处理单元 2. 逻辑单元 3. 网络存储单元 4. 请求队列 三、网络编程基础API 1. socket 地址处理 API (1)主机字节序和网络字节序 (2)通用socket地…

【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构

唯有梦想才配让你不安, 唯有行动才能解除你的不安。 --- 卢思浩 --- 从零开始掌握序列化 1 知识回顾2 序列化与编写协议2.1 使用Json进行序列化2.2 编写协议 3 封装IOService4 应用层 --- 网络计算器5 总结 1 知识回顾 上一篇文章我们讲解了协议的本质是双方能够…

4--SpringBoot项目中分类管理

目录 新增分类 分类分页查询 启用禁用分类 根据类型查询 修改分类 本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理 详解(一)-C…

基尔霍夫衍射理论

一、矢量理论到标量理论 前提条件:介质同时具有线性、各向同性、均匀性且无色散。 结论:电场和磁场的所有分量的行为完全相同,可由单一的一个标量波动方程描述,标量理论可以完全准确的代替矢量理论。 若介质不具备上述前提,则用标量理论来表征矢 量理论就会引入误差。 …