ARM SD卡启动详解

news2024/11/25 16:57:03

一、主流的外存设备介绍

内存和外存的区别:一般是把这种 RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把 ROM(read only memory,只读存储器,类似于 Flash SD 卡之类的,用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存。


1、软盘、硬盘、光盘、CD、磁带

(1) 存储原理大部分为磁存储,缺点是读写速度、可靠性等。优点是技术成熟、价格便宜。广泛使用在桌面电脑中,在嵌入式设备中几乎无使用。

(2) 现代存储的发展方向是 Flash 存储,闪存技术是利用电学原理来存储 1 和 0,从而制成存储设备。所以闪存设备没有物理运动(硬盘中的磁头),所以读写速度可以很快,且无物理损耗。


2、纯粹的 Flash:NandFlash、NorFlash

(1) 这些是最早出现的、最原始的 Flash 颗粒组成芯片。也就是说 NandFlash、NorFlash 芯片中只是对存储单元做了最基本的读写接口,然后要求外部的 SoC 来提供 Flash 读写的控制器,以和 Flash 进行读写时序。

(2) 缺陷:1、读写接口时序比较复杂。2、内部无坏块处理机制,需要 SoC 自己来管理 Flash 的坏块;3、各家厂家的 Flash 接口不一致,甚至同一个厂家的不同型号、系列的 Flash 接口都不一致,这就造成产品升级时很麻烦。

(3) NandFlash 分 MLC 和 SLC 两种。SLC 技术比较早,可靠性高,缺点是容量做不大(或者说容量大了太贵,一般 SLC Nand 都是 512MB 以下);MLC 技术比较新,不成熟,可靠性差,优点是容量可以做很大很便宜,现在基本都在发展 MLC 技术。


3、SD卡、MMC卡、TF(MicroSD)卡

SD 卡:Secure Digital Memory Card/SD card。
MMC 卡:Multi-Media Card。
TF 卡:Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card。

(1) 这些卡其实内部就是 Flash 存储颗粒,比直接的 Nand 芯片多了统一的外部封装和接口。

(2) 卡都有统一的标准,譬如 SD 卡都是遵照 SD 规范来发布的。这些规范规定了 SD 卡的读写速度、读写接口时序、读写命令集、卡大小尺寸、引脚个数及定义。这样做的好处就是不同厂家的 SD 卡可以通用。


4、iNand、MoviNand、eSSD

(1) 电子产品如手机、相机等,前些年趋势是用 SD卡/TF卡 等扩展存储容量;但是近年来的趋势是直接内置大容量 Flash 芯片而不是外部扩展卡。

(2) 外部扩展卡时间长了卡槽可能会接触不良导致不可靠。

(3) 现在主流的发展方向是使用 iNand、MoviNand、eSSD(还有别的一些名字)来做电子产品的存储芯片。这些东西的本质还是 NandFlash,内部由 Nand 的存储颗粒构成,再集成了块设备管理单元,综合了 SD卡 为代表的各种卡的优势和原始的 NandFlash 芯片的优势。

(4) 优势:1、向 SD 卡学习,有统一的接口标准(包括引脚定义、物理封装、接口时序)。2、向原始的 Nand 学习,以芯片的方式来发布而不是以卡的方式;3、内部内置了 Flash 管理模块,提供了诸如坏块管理等功能,让 Nand 的管理容易了起来。


5、SSD(固态硬盘)

嵌入式产品没用到,不做介绍。


二、SD卡的特点和背景知识

1、SD卡和MMC卡的关系

(1) MMC 标准比 SD 标准早,SD 标准兼容 MMC 标准。
(2) MMC 卡可以被 SD 读卡器读写,而 SD 卡不可以被 MMC 读卡器读写。


2、SD卡和 Nand、Nor 等 Flash 芯片差异

(1) SD卡/MMC卡等卡类有统一的接口标准,而 Nand 芯片没有统一的标准(各家产品会有差异)。


3、SD卡与MicroSD的区别

(1) 体积大小区别而已,传输与原理完全相同。


4、SD卡与TF卡的区别

(1) 外观上,SD卡大,而TF卡小;用途上,SD卡用于数码相机等,而TF卡广泛用于手机、GPS等;

(2) 时间上,SD卡1999年推出,TF卡于2004年推出;SD卡由日本松下、东芝与美国SanDisk共同推出,而TF卡由Motorola与SanDisk共同推出。

(3) SD卡有写保护,而TF卡没有,TF卡可以通过卡套转成SD卡使用。
在这里插入图片描述


三、SD卡的编程接口

1、SD卡的物理接口

(1) SD卡由 9 个针脚与外界进行物理连接,这 9 个脚中有 2 个地,1 个电源,6 个信号线。
在这里插入图片描述


2、SD 协议与 SPI 协议

(1) SD卡与SRAM/DDR/SROM之类的东西的不同:SRAM/DDR/SROM 之类的存储芯片是总线式的,只要连接上初始化好之后就可以由 SoC 直接以地址方式来访问;但是 SD 卡不能直接通过接口给地址来访问,它的访问需要按照一定的接口协议(时序)来访问。

(2) SD卡虽然只有一种物理接口,但是却支持两种读写协议:SD协议和SPI协议。


3、SPI 协议特点(低速、接口操作时序简单、适合单片机)

(1) SPI 协议是单片机中广泛使用的一种通信协议,并不是为 SD 卡专门发明的。
(2) SPI 协议相对 SD 协议来说速度比较低。
(3) SD卡支持 SPI 协议,就是为了单片机方便使用。


4、SD 协议特点(高速、接口时序复杂,适合有 SDIO 接口的 SoC)

(1) SD协议是专门用来和 SD 卡通信的。
(2) SD协议要求 SoC 中有 SD 控制器,运行在高速率下,要求 SoC 的主频不能太低。


5、S5PV210 的 SD/MMC 控制器

(1) 数据手册Section8.7,为 SD/MMC 控制器介绍。
(2) SD卡内部除了存储单元 Flash 外,还有 SD 卡管理模块,我们 SoC 和 SD 卡通信时,通过 9 针引脚以 SD协议/SPI 协议向 SD 卡管理模块发送命令、时钟、数据等信息,然后从 SD 卡返回信息给 SoC 来交互。工作时每一个任务(譬如初始化 SD 卡、譬如读一个块、譬如写、譬如擦除····)都需要一定的时序来完成(所谓时序就是先向 SD 卡发送 xx 命令,SD 卡回 xx 消息,然后再向 SD 卡发送 xx 命令····)。

在这里插入图片描述


四、S5PV210 的SD卡启动详解1

1、SoC 为何要支持 SD 卡启动

(1) 一个普遍性的原则就是:SoC 支持的启动方式越多,将来使用时就越方便,用户的可选择性就越大,SoC 的适用面就越广。

(2) SD卡有一些好处:譬如可以在不借用专用烧录工具(类似Jlink)的情况下对 SD 卡进行刷机,然后刷机后的 SD 卡插入卡槽,SoC 既可启动;譬如可以用 SD 卡启动进行量产刷机(量产卡)。像我们 X210 开发板,板子贴片好的时候,内部 iNand 是空的,此时直接启动无法启动;板子出厂前官方刷机时是把事先做好的量产卡插入 SD 卡卡槽,然后打到 iNand 方式启动;因为此时 iNand 是空的,所以第一启动失败,会转而第二启动,就从外部 SD2 通道的 SD 卡启动了。启动后会执行刷机操作对 iNand 进行刷机,刷机完成后自动重启(这回重启时 iNand 中已经有 image 了,所以可以启动了)。刷机完成后 SD 量产卡拔掉,烧机 48 小时,无死机即可装箱待发货。


2、SD 卡启动的难点在哪里(SRAM、DDR、SDCard)

(1) SRAM、DDR 都是总线式访问的,SRAM 不需初始化即可直接使用,而 DDR 需要初始化后才能使用,但是总之 CPU 可以直接和 SRAM/DRAM 打交道;而 SD 卡需要时序访问,CPU 不能直接和 SD 卡打交道;NorFlash 读取时可以总线式访问,所以 Norflash 启动非常简单,可以直接启动,但是 SD/NandFlash 不行。

(2) 以前只有 Norflash 可以作为启动介质,台式机笔记本的 BIOS 就是 Norflash 做的。后来三星在 2440 中使用了 SteppingStone 的技术,让 NandFlash 也可以作为启动介质。SteppingStone (翻译为启动基石)技术就是在 SoC 内部内置 4KB 的 SRAM,然后开机时 SoC 根据 OMpin 判断用户设置的启动方式,如果是 NandFlash 启动,则 SoC 的启动部分的硬件直接从外部NandFlash 中读取开头的 4KB 到内部 SRAM 作为启动内容。
在这里插入图片描述

(3) 启动基石技术进一步发展,在 6410 芯片中得到完善,在 210 芯片时已经完全成熟。210 中有 96KB 的 SRAM,并且有一段 iROM 代码作为 BL0,BL0 再去启动 BL1(210 中的 BL0 做的事情在 2440 中也有,只不过那时候是硬件自动完成的,而且体系没有 210 中这么详细)。


3、S5PV210 的启动过程回顾

(1) 210 启动首先执行内部的 iROM(也就是 BL0),BL0 会判断 OMpin 来决定从哪个设备启动,如果启动设备是 SD 卡,则 BL0 会从 SD 卡读取前 16KB(不一定是 16,反正 16 是能工作的)到 SRAM 中去启动执行(这部分就是 BL1,这就是 steppingstone 技术)。
(2) BL1 执行之后剩下的就是软件的事情了,SoC 就不用再去操心了。


4、SD 卡启动流程(bin 文件小于16KB 和大于16KB )

(1) 启动的第一种情况是整个镜像大小小于 16KB。这时候相当于我的整个镜像作为 BL1 被steppingstone 直接硬件加载执行了而已。

(2) 启动的第二种情况就是整个镜像大小大于 16KB。(只要大于 16KB,哪怕是 17KB,或者是 700MB 都是一样的)这时候就要把整个镜像分为 2 部分:第一部分 16KB 大小,第二部分是剩下的大小。然后第一部分作为 BL1 启动,负责去初始化 DRAM ,并且将第二部分加载到 DRAM 中去执行( uboot 就是这样做的)。


5、最重要的但是却隐含未讲的东西

(1) 问题:iROM 究竟是怎样读取 SD卡/NandFlash 的?
(2) 三星在 iROM 中事先内置了一些代码去初始化外部 SD卡/NandFlash,并且内置了读取各种 SD卡/NandFlash 的代码在 iROM 中。BL0 执行时就是通过调用这些 device copy function 来读取外部 SD卡/NandFlash 中的 BL1 的。
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


五、 S5PV210 的SD卡启动详解2

1、SoC 支持 SD 卡启动的秘密(iROM代码)

(1) 三星系列 SoC 支持 SD卡/NandFlash 启动,主要是依靠 SteppingStone 技术,具体在S5PV210 中支持 steppingstone 技术的是内部的 iROM 代码。
在这里插入图片描述


2、扇区和块的概念

(1) 早期的块设备,就是软盘硬盘这类磁存储设备,这种设备的存储单元不是以字节为单位,而是以扇区为单位。磁存储设备读写的最小单元就是扇区,不能只读取或写部分扇区。这个限制是磁存储设备本身物理方面的原因造成的,也成为了我们编程时必须遵守的规律。

(2) 一个扇区有好多个字节(一般是 512 个字节)。早期的磁盘扇区是 512 字节,实际上后来的磁盘扇区可以做的比较大(譬如 1024 字节,譬如 2048 字节,譬如 4096 字节),但是因为原来最早是 512 字节,很多的软件(包括操作系统和文件系统)已经默认了 512 这个数字,因此后来的硬件虽然物理上可能支持更大的扇区,但是实际上一般还是兼容 512 字节扇区这种操作方法。

(3) 一个扇区可以看成是一个块 block(块的概念就是:不是一个字节,是多个字节组成一个共同的操作单元块),所以就把这一类的设备称为块设备。常见的块设备有:磁存储设备硬盘、软盘、DVD 和 Flash 设备(U盘、SSD、SD卡、NandFlash、Norflash、eMMC、iNand)。

(4) linux 里有个 mtd 驱动,就是用来管理这类块设备的。

(5) 磁盘和 Flash 以块为单位来读写,就决定了我们启动时 device copy function 只能以整块为单位来读取 SD卡。


4、用函数指针方式调用 device copy function

在这里插入图片描述


在这里插入图片描述

typedef unsigned int bool;

// 第一种方法:宏定义
#define CopySDMMCtoMem(z,a,b,c,e)(((bool(*)(int, unsigned int, unsigned short, unsigned int*, bool))(*((unsigned int *)0xD0037F98)))(z,a,b,c,e))


// 第二种方法:用函数指针方式调用
typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);


// 实际使用时
pCopySDMMC2Mem p1 = (pCopySDMMC2Mem)0xD0037F98;
p1(x, x, x, x, x);		// 第一种调用方法
(*p1)(x, x, x, x, x);	// 第二种调用方法

(1) 第一种方法:宏定义方式来调用。好处是简单方便,坏处是编译器不能帮我们做参数的静态类型检查。
(2) 第二种方法:用函数指针方式来调用。


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

15子空间投影

子空间投影 从向量的投影入手,延伸到高维投影,并将投影使用矩阵形式给出。做投影也即向另一个向量上做垂线。上一章讨论的Axb无解时的最优解求解时,并没有解释这个最优解为何“最优”,本节课给出相应的解释。相对简单的二维空间的…

MyBatis -- resultType 和 resultMap

MyBatis -- resultType 和 resultMap一、返回类型&#xff1a;resultType二、返回字典映射&#xff1a;resultMap一、返回类型&#xff1a;resultType 绝⼤数查询场景可以使用 resultType 进⾏返回&#xff0c;如下代码所示&#xff1a; <select id"getNameById"…

企业如何借助制造业ERP系统,做好生产排产管理?

随着市场竞争越来越激烈&#xff0c;生产制造行业订单零碎化趋势越发突出。面对品种多&#xff0c;数量小&#xff0c;批次多&#xff0c;个性化需求也多的生产方式&#xff0c;PMC生产排产管理变得非常困难&#xff1b;同时生产过程还会有各种不确定的临时性因素出现&#xff…

详解pandas的read_csv函数

一、官网参数 pandas官网参数网址&#xff1a;pandas.read_csv — pandas 1.5.2 documentation 如下所示&#xff1a; 二、常用参数详解 1、filepath_or_buffer(文件) 一般指读取文件的路径。比如读取csv文件。【必须指定】 import pandas as pddf_1 pd.read_csv(r"C:…

Xilinx FPGA电源设计与注意事项

1 引言随着半导体和芯片技术的飞速发展&#xff0c;现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源&#xff0c;使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。当采用FPGA进行设计电路时&#xff0c;大多数FPGA对上电的电…

软件测试复习06:基于经验的测试

作者&#xff1a;非妃是公主 专栏&#xff1a;《软件测试》 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录软件缺陷基于缺陷分类的测试缺陷模式探索性测试软件缺陷 主要由以下几种原因造成&#xff1a; 疏…

Redux相关知识(什么是redux、redux的工作原理、redux的核心概念、redux的基本使用)(十一)

系列文章目录 第一章&#xff1a;React基础知识&#xff08;React基本使用、JSX语法、React模块化与组件化&#xff09;&#xff08;一&#xff09; 第二章&#xff1a;React基础知识&#xff08;组件实例三大核心属性state、props、refs&#xff09;&#xff08;二&#xff0…

Arduino 开发ESP8266(ESP12F)模块

①ESP12F模块的硬件说明如上图所示&#xff0c;其他引脚均引出。②准备好硬件之后就是要下载Arduino IDE&#xff0c;目前版本为2.0.3&#xff0c;下载地址为&#xff1a;https://www.arduino.cc/en/software&#xff0c;如下图所示③安装Arduino IDE较为简单&#xff0c;安装之…

aws cloudformation 在堆栈中使用 waitcondition 协调资源创建和相关操作

参考资料 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.htmlhttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-waitcondition.html 本文介绍cloudformation的waitcondition条件&#xff0c;wait…

Win10之bandicam录音无声音问题

0.问题描述&#xff1a;在Xubuntu22.04中通过gnome-boxes跑win10&#xff0c;但是win10本机录音机录音ok&#xff0c;使用bandicam录屏却没声音的问题&#xff0c;以下是分析步骤。1.Linux端设置选择Xbuntu声音图标speaker选择声卡&#xff1a;sof-hda-dsp Speaker Headphonesm…

DFS剪枝

目录 一、前言 二、剪枝 1、概念 2、类别 三、例题 1、剪格子&#xff08;lanqiaoOJ题号211&#xff09; 2、路径之谜&#xff08;2016年决赛&#xff0c;lanqiaoOJ题号89&#xff09; 3、四阶幻方&#xff08;2015年决赛&#xff0c;lanqiaoOJ题号689&#xff09; 4、…

P1028 [NOIP2001 普及组] 数的计算————C++

题目 [NOIP2001 普及组] 数的计算 题目描述 给出自然数 nnn&#xff0c;要求按如下方式构造数列&#xff1a; 只有一个数字 nnn 的数列是一个合法的数列。在一个合法的数列的末尾加入一个自然数&#xff0c;但是这个自然数不能超过该数列最后一项的一半&#xff0c;可以得到…

linux(debian系列)配置seetaface6

seetaface6依赖于opencv&#xff0c;另外我们需要界面&#xff0c;所以也需要Qt&#xff08;你也可以选择其他的&#xff09;。 这里的目标是配置好环境&#xff0c;能够编译并运行seetaface6给的demo。 那个demo中用到了sqlite数据库&#xff0c;所以我们还需要安装sqlite。…

Cosmos 基础(一)

Cosmos 区块链互联网 Cosmos是一个不断扩展的生态系统&#xff0c;由相互连接的应用程序和服务组成&#xff0c;为去中心化的未来而构建。 Cosmos 应用程序和服务使用IBC(the Inter-Blockchain Communication protocol, 区块链间通信协议)连接。这一创新使您能够在主权国家之…

僵尸进程孤儿进程

目录 1. 僵尸进程 2. 孤儿进程 1. 僵尸进程 僵尸状态&#xff1a;一个进程已经退出&#xff0c;但是还不允许被OS释放&#xff0c;处于一个被检测的状态。 僵死状态&#xff08;Z-Zombies&#xff09;是一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返…

学习记录663@项目管理之项目范围管理

什么是项目范围管理 项目范围管理包括确保项目做且只做所需的全部工作&#xff0c;以成功完成项目的各个过程。它关注的焦点是:什么是包括在项目之内的&#xff0c;什么是不包括在项目之内的&#xff0c;即为项目工作明确划定边界。通俗地讲&#xff0c;项目范围管理就是要做范…

Dubbo框架学习(第二章Dubbo3拥抱云原生)

由于在微服务领域有两大框架统治&#xff0c;一个是springCloud的全家桶&#xff0c;一个是Dubbo。我用Dubbo比较少&#xff0c;所以也是学习状态。Dubbo框架学习&#xff0c;资料来源于cn.dubbo.apache.org。第二章Dubbo3拥抱云原生新一代的 Triple 协议基于 HTTP/2 作为传输层…

计算机网络第五章、第六章

1.传输层定义&#xff1a;为应用层提供通信服务使用网络层的服务传输层的功能&#xff1a;传输层提供进程和进程之间的逻辑通信复用和分用传输层对收到的报文进行差错检测传输层的两种协议传输层的两个协议&#xff1a;1.面向连接的传输控制协议TCP&#xff1a;传送数据之前必须…

人工智能辅助药物发现(1)肿瘤靶点识别

目录基于AI的靶点识别概述肿瘤建模肿瘤转录组转录组异质性单细胞转录组数据分析单细胞表观肿瘤模型肿瘤中的表观遗传模型基于甲基化测序技术的肿瘤表观遗传模型基于染色质可及性的肿瘤表观遗传模型多模态肿瘤建模靶点识别基于单细胞RNA的靶点发现基于表观的靶点发现基于多组学的…

点击化学交联剂N3-SS-N3,叠氮-二硫键-叠氮简介,CAS:352305-38-5

英文名称&#xff1a;Azidoethyl-SS-ethylazide N3-SS-N3 N3-S-S-N3 化学式&#xff1a;C4H8N6S2 分子量&#xff1a;204.3 CAS&#xff1a;352305-38-5 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于…