裸机:SD卡启动详解

内存和外存的区别

内存和外存在计算机系统中扮演着不同的角色,它们之间存在显著的差异。以下是内存和外存之间几个主要方面的区别:

  1. 存储特性与易失性
  • 内存(Memory):通常指的是随机存取存储器(RAM),具有易失性。这意味着当计算机断电时,内存中的数据会立即丢失,因为它们依赖于电力来保持数据的存储状态。
  • 外存(External Storage):也称为辅助存储器,如硬盘、U盘、光盘等。外存是非易失性的,即使在没有电源的情况下,也能长期保存数据。
  1. 存取速度与性能
  • 内存:内存的存取速度非常快,因为它直接与CPU相连,CPU可以直接从内存中读取或写入数据,无需经过其他中介。这使得内存成为计算机中处理数据的主要场所。
  • 外存:外存的存取速度相对较慢,因为数据需要先通过输入/输出(I/O)设备传输到内存,再由CPU处理。这一过程增加了数据访问的延迟。
  1. 容量与成本
  • 内存:内存的容量相对较小,但价格较高。这是因为内存需要高速运行,其制造成本和技术要求都较高。
  • 外存:外存的容量通常很大,可以存储大量的数据和程序。同时,外存的价格相对较低,适合用于长期存储和备份大量数据。
  1. 使用场景与功能
  • 内存:主要用于临时存储正在运行的程序和数据。当计算机关闭或重启时,内存中的数据会被清空。内存是计算机进行数据处理和运算的关键部件。
  • 外存:不仅可以在计算机运行时存储数据,还可以用于备份、传输和共享数据。外存是计算机长期存储数据的重要场所,也是用户进行数据管理和维护的主要工具。
  1. 访问权限与方式
  • 内存:CPU可以直接访问内存中的数据,无需通过其他设备或接口。这使得内存成为CPU与数据之间的高速通道。
  • 外存:CPU无法直接访问外存中的数据,必须通过内存作为中介。外存中的数据需要先被读入内存,然后才能被CPU处理。
    综上所述,内存和外存在存储特性、存取速度、容量与成本、使用场景与功能以及访问权限与方式等方面都存在显著的差异。这些差异使得它们在计算机系统中各自扮演着重要的角色,共同支撑着计算机的正常运行和数据处理工作。

主流的外存设备介绍

1. 磁盘存储器

  • 硬盘
    :硬盘是计算机中最常用的外存设备之一,分为机械硬盘(HDD)和固态硬盘(SSD)两种。
  • 机械硬盘(HDD):由涂有磁性材料的铝合金原盘组成,通过磁头在盘片上读写数据。其优点是容量大、价格相对较低,但读写速度相对较慢,且抗震性较差。
  • 固态硬盘(SSD):以闪存为存储介质,通过电学原理存储数据。相比机械硬盘,固态硬盘具有读写速度快、延迟低、抗震性好等优势,但价格相对较高。随着技术的发展,固态硬盘的出货量在全球硬盘市场上占比不断提高。
  • 软盘
    :虽然现已较少使用,但软盘曾是重要的外存设备。它使用柔软的聚酯材料制成,表面涂有磁性材料,通过软盘驱动器读取数据。然而,由于其存储容量小、存取速度慢等缺点,软盘已被其他存储设备所取代。

2. 光盘存储器

光盘存储器利用光学方式进行信息存储,通过激光在介质上写入和读取信息。光盘存储器可分为多种类型,如CD-ROM、CD-R、CD-RW、DVD-ROM等。光盘存储器的优点是价格低、容量大、耐用,可用于长期保存数据。但其读出和传输速度相对较慢,且需要特定的读取设备。

3. 移动存储器

  • U盘(闪存盘):U盘采用Flash存储器技术,通过USB接口与计算机连接。它体积小、重量轻、携带方便,且读写速度较快。U盘已成为现代计算机中不可或缺的外存设备之一。
  • 移动硬盘:移动硬盘是一种便携式存储设备,通常采用USB或IEEE 1394接口与计算机连接。其容量大、兼容性好、速度快,适合存储大量数据并随身携带。

4. 磁带存储器

磁带存储器也被称为顺序存取存储器(SAM),其存储容量很大,但查找速度较慢。因此,它一般仅用作数据后备存储。计算机系统使用的磁带机主要有盘式磁带机、数据流磁带机及螺旋扫描磁带机三种类型。
总结
主流的外存设备包括硬盘(HDD和SSD)、光盘存储器、移动存储器(U盘和移动硬盘)以及磁带存储器。这些设备各有优缺点,用户可根据实际需求选择合适的存储设备。随着技术的发展,固态硬盘和移动存储器等新型存储设备在性能、容量和便携性方面不断提升,逐渐成为市场的主流。

纯粹的Flash:NandFlash、NorFlash

Flash存储技术中,NandFlash和NorFlash是两种重要的类型,它们在存储原理、特点、应用场景等方面存在显著差异。以下是对这两种Flash存储技术的详细介绍:

  1. NandFlash
    基本概念与特点:
  • 存储原理:NandFlash是一种基于NAND技术的非易失性存储器,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。
  • 高存储密度:NandFlash的存储密度远高于传统的Flash存储器,能够在单位面积内存储更多的数据。
  • 快速写入速度:与NorFlash相比,NandFlash的写入速度更快,尤其适用于需要频繁写入数据的场景。
  • 长寿命:NandFlash的存储单元可以承受较高的擦写次数,通常可达数百万次,具有较长的使用寿命。
  • 功耗低:NandFlash的功耗相对较低,有助于延长设备的续航时间。
    应用场景:
  • NandFlash广泛应用于移动设备、智能终端、固态硬盘(SSD)等领域,是这些设备中存储用户数据、应用程序和操作系统的重要组成部分。
  • 在数据中心、云存储等需要高容量、高可靠性存储解决方案的场景中,NandFlash也扮演着重要角色。
  1. NorFlash
    基本概念与特点:
  • 存储原理:NorFlash是一种非易失性存储器,由Intel在1988年首次开发。它采用随机访问方式读取和写入数据,具有较快的读取速度和较低的读取延迟。
  • 直接运行能力:由于NorFlash的内部结构与RAM相似,它可以直接运行存储在其中的应用程序,无需先将代码读入系统RAM中。
  • 较小的存储容量:与NandFlash相比,NorFlash的存储容量相对较小,一般只有几MB到几十MB。
  • 写入速度较慢:NorFlash的写入速度相对较慢,且擦除操作需要一次性擦除整个块的数据,不能单独擦除某个数据位。
    应用场景:
  • NorFlash常被用作嵌入式系统的引导存储器,用于存储操作系统的代码和引导程序,以实现设备的快速启动和稳定运行。
  • 在智能手机、打印机、数码相机等消费电子产品中,NorFlash也扮演着重要角色,用于存储程序代码、固件等关键数据。
    总结
    NandFlash和NorFlash各有优缺点,适用于不同的应用场景。NandFlash以其高存储密度、快速写入速度和长寿命等优势,在需要大容量、高可靠性存储解决方案的场景中占据主导地位;而NorFlash则以其直接运行能力和较快的读取速度,在嵌入式系统和需要快速启动的设备中发挥着重要作用。随着技术的不断进步和应用需求的增长,这两种Flash存储技术都将在各自的领域继续发挥重要作用。

SD卡、MMC卡、MicroSD、TF卡

SD卡、MMC卡、MicroSD(也被称为TF卡)是三种常见的存储卡类型,它们在尺寸、性能、应用场景等方面各有特点。以下是对这三种存储卡的详细介绍:

1. SD卡

定义与特点:

  • SD卡,全称Secure Digital Memory Card,是一种基于半导体快闪记忆器的新一代记忆设备。
  • 它由SD卡协会(SD Card Association)制定,于1999年首次推出。
  • SD卡具有小巧的尺寸、较大的存储容量和相对较低的成本,被广泛应用于数码相机、摄像机、智能手机、平板电脑、游戏控制器等便携式设备。
    类型与规格:
  • SD卡有不同的速度等级,包括Class 2、Class 4、Class 6、Class 10,以及更高速的UHS(Ultra High Speed)等级,如UHS-I、UHS-II、UHS-III。
  • SD卡有三种尺寸:标准SD卡、miniSD卡和microSD卡。其中,microSD卡是最小的,常用于智能手机和其他小型设备。
  1. MMC卡
    定义与特点:
  • MMC卡,全称Multimedia Card,是一种快闪存储器卡标准。
  • 它由西门子及SanDisk共同开发于1997年,技术基于东芝的NAND快闪记忆技术。
  • MMC卡大小与一张邮票差不多,约24mm x 32mm x 1.5mm,具有小型轻量的特点,重量在2克以下,并且耐冲击,可反复进行读写记录30万次。
    应用与现状:
  • MMC卡主要用于手机、平板电脑、音乐播放器和其他便携式设备。
  • 然而,随着Secure Digital(SD卡)的普及,MMC卡的使用已经逐渐被SD卡所取代。尽管如此,少数公司如诺基亚仍然支持MMC卡。

3. MicroSD(TF卡)

定义与特点:

  • MicroSD卡,也被称为TransFlash卡或TF卡,是一种小型的存储卡。
  • 它由SanDisk公司推出,后被SD卡协会采纳并正式更名为MicroSD卡。
  • MicroSD卡的体积非常小,为长15mm×宽11mm×高1mm,仅为标准SD卡的四分之一左右。
    应用与性能:
  • MicroSD卡广泛应用于智能手机、平板电脑、数码相机、行车记录仪等小型电子设备中。
  • 它不仅可以用于存储数据,还可以作为外部存储设备来扩展设备的存储容量。
  • 随着科技的进步,MicroSD卡的存储容量和读写速度不断提高,可以满足用户对大容量、高速度存储的需求。
    总结
    SD卡、MMC卡和MicroSD(TF卡)都是常见的存储卡类型,它们在尺寸、性能和应用场景上各有优势。SD卡以其广泛的兼容性和多样的速度等级成为许多设备的首选;MMC卡虽然逐渐被SD卡取代,但在少数设备中仍有应用;而MicroSD(TF卡)则以其小巧的体积和强大的性能成为移动设备的理想选择。
    iNand、MoviNand、eSSD
    iNand、MoviNand、eSSD是三种不同的存储技术或产品,它们在结构、功能和应用场景上各有特点。以下是对这三种技术的详细介绍:

1. iNand

定义与特点:

  • iNand是一种小型的、便于集成的高速NAND闪存SD接口芯片。它内部集成了串行控制器和高速NAND闪存,形成了一个完整的子系统。
  • iNand在单个设备中集成了扩展卡式Flash的优点,如接口标准统一(时序、物理封装、引脚定义)、通用性强等。
  • iNand芯片内部具有Flash管理模块,包括坏块管理和ECC校验等功能,这些功能减轻了主系统CPU和RAM的负担,提高了系统的整体性能。
    应用场景:
  • iNand广泛应用于高档消费电子产品中,如MP4播放器、GPS通信设备、个人媒体播放器及移动电话等。这些设备需要高性能、高可靠性的存储解决方案,而iNand正是满足这些需求的理想选择。

2. MoviNand

定义与特点:

  • MoviNand是三星公司开发的一款符合eMMC标准的内嵌式存储器。它采用了先进的30nm工艺,是一种高容量NAND快闪记忆体解决方案。
  • MoviNand集成了MMC接口、快闪存储器设备及主控制器,所有组件都封装在一个小型的BGA封装中。这种设计使得MoviNand具有高速、高可靠性和易于集成的特点。
    应用场景:
  • MoviNand适用于高端手机和其他移动消费电子设备。这些设备对存储性能的要求较高,而MoviNand凭借其高速读写能力和高可靠性,成为这些设备的理想存储解决方案。

3. eSSD

定义与特点:

  • eSSD,即Enterprise Solid-State Drive,是企业级固态硬盘。它利用闪存技术实现数据的存储和读写,具有极高的性能、可靠性和耐用性。
  • eSSD的接口速度高达每秒数百兆字节(MB/s),读写延迟非常低,能够实现数据的实时响应。同时,eSSD还具有较高的抗震能力和数据保护机制,确保了数据的安全性和稳定性。
    应用场景:
  • eSSD通常用于服务器和数据中心等高负载环境。这些环境对存储性能和数据安全性的要求极高,而eSSD凭借其卓越的性能和可靠性,成为这些应用场景的首选存储解决方案。
    综上所述,iNand、MoviNand和eSSD在结构、功能和应用场景上各有特点。它们分别满足了不同领域和设备对存储技术的需求,为现代电子设备的发展提供了强有力的支持。

SSD(固态硬盘)

SSD(固态硬盘,Solid State Drive)是一种采用闪存技术作为存储介质的计算机存储设备。与传统的机械硬盘(HDD)相比,SSD具有显著的优势,主要包括更快的读写速度、更低的功耗、更高的可靠性以及更好的抗震性。以下是关于SSD的详细介绍:
一、结构与核心组件
SSD的主要组件包括闪存芯片、控制芯片、接口和缓存等部分。

  • 闪存芯片:是SSD的核心部件,负责存储数据。根据制造工艺和存储单元的排列方式,闪存可以分为SLC(单层单元)、MLC(多层单元)、TLC(三层单元)和QLC(四层单元)等类型。其中,SLC速度最快、寿命最长但成本最高;QLC则存储密度最高、成本最低但性能和寿命较差。
  • 控制芯片:负责管理和控制数据的读写操作,执行错误校正、优化性能和延长闪存寿命等任务。不同品牌和型号的SSD通常会使用不同的控制芯片,这也是影响SSD性能的重要因素之一。
  • 接口:用于连接电脑主板,实现数据传输。常见的接口有SATA(串行ATA)、PCIe(Peripheral Component Interconnect Express)和M.2等。不同接口的传输速率和性能差异较大。
  • 缓存:为了提高数据读写速度,SSD通常会配备一定容量的缓存。缓存可以是DRAM(动态随机存取存储器),也可以是闪存本身的一部分。缓存的存在可以有效减少数据访问的延迟。
    二、工作原理
    SSD的工作原理主要基于闪存的存储机制。闪存是一种非易失性存储介质,即使在断电的情况下也能保持数据。在SSD中,数据的读写操作通过控制芯片来完成。读操作相对简单,控制芯片从指定地址读取数据并传输给主机。写操作则复杂得多,因为闪存的写入速度较慢,且在写入数据之前需要先擦除原有数据。为了优化性能和延长闪存寿命,控制芯片会使用“垃圾回收”和“磨损均衡”等技术。
    三、优势与特点
    1.读写速度快:SSD的读写速度远超传统HDD,可以大幅提高电脑的整体性能。
    2.功耗低:SSD没有机械运动部件,因此能耗更低,有利于节能环保。
    3.使用寿命长:SSD的闪存芯片寿命长且不易受到机械损伤,因此使用寿命更长。
    4.抗震性强:SSD没有机械臂和磁盘等易受损的部件,因此抗震性更强,不易受到外部冲击的影响。
    5.噪音低:SSD在工作时几乎不产生噪音,为用户提供了更加安静的使用环境。
    四、应用场景
    SSD已经广泛应用于各种计算设备中,包括个人计算机、服务器、移动设备等。在个人计算机领域,SSD可以作为系统盘使用,以加快系统的启动速度和软件的加载速度;在服务器领域,SSD的高性能和低延迟特性使其成为处理高并发、大数据量等场景的理想选择;在移动设备领域,SSD的小巧尺寸和高速性能使其成为提升移动设备性能的关键因素之一。

SD卡

SD卡,全称Secure Digital Memory Card,是一种基于半导体快闪记忆器的新一代记忆设备。它由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,并于2000年首次发布。SD卡因其便携性、大容量、高性能和安全性等特点,在现代电子设备中得到了广泛应用。

一、SD卡的特点

1.大容量:随着技术的不断进步,SD卡的存储容量也在不断增加,目前市面上已有高达数TB的SD卡产品,能够满足用户存储大量数据的需求。
2.高性能:SD卡具有较快的读写速度,能够满足高清视频、大型游戏等应用的需求。高速SD卡如UHS-I、UHS-II等规格,更是提供了更快的传输速度。
3.安全性:SD卡采用了加密技术,可以保护存储在其中的数据安全。同时,SD卡还具有一定的错误检测和校正能力,以确保数据的完整性和可靠性。
4.便携性:SD卡体积小巧,重量轻,便于携带和使用。无论是数码相机、智能手机还是平板电脑等设备,都可以轻松插入SD卡进行数据存储和扩展。

二、SD卡的类型

SD卡根据不同的容量和速度,可以分为多个种类和规格。常见的SD卡类型包括:
1.标准SD卡:这是最早的SD卡规格,容量从8MB到2GB不等。由于其体积较大,现在已逐渐被更小的规格所取代。
2.MiniSD卡:MiniSD卡是SD卡发展而来的一种更小更轻便的版本,它可以通过适配器转换成标准SD卡使用。但由于MicroSD卡的普及,MiniSD卡现已较少使用。
3.MicroSD卡(TF卡):MicroSD卡是目前最小的SD卡规格,也被称为TransFlash卡或TF卡。它同样可以通过适配器转换成标准SD卡使用,广泛应用于智能手机、平板电脑等移动设备中。

三、SD卡的应用场景

SD卡因其便携性、大容量和高速传输等特点,在各个领域都有广泛的应用。以下是一些主要的应用场景:
1.数码相机:SD卡作为数码相机的存储介质,可以方便地拍摄大量照片和视频,并随时将数据传输到电脑或其他设备进行编辑和分享。
2.智能手机:随着智能手机功能的不断扩展,用户对于存储空间的需求也在不断增加。Micro SD卡作为手机扩容的重要工具,可以大大提升手机的存储容量,满足用户对于下载应用、存储照片和视频等需求。
3.平板电脑:平板电脑通常内置存储空间有限,而Micro SD卡可以提供额外的存储空间,使得用户可以更加方便地存储和管理文件。
4.车载设备:在车载导航、行车记录仪等设备中,SD卡常被用作存储地图数据、行车记录等信息的介质。
5.工业应用:在工业自动化、机器人等领域,SD卡也发挥着重要作用,用于存储程序、配置数据等关键信息。

四、SD卡的选择与使用注意事项

在选择和使用SD卡时,需要注意以下几个方面:
1.兼容性:不同的设备可能对SD卡的类型和规格有不同的要求,因此在购买SD卡时,需要确保所选SD卡与设备的插槽和接口兼容。
2.容量与速度:根据实际需求选择合适的容量和速度等级。如果需要存储大量数据或进行高速数据传输,应选择容量较大、速度较快的SD卡。
3.品牌与质量:选择知名品牌和质量可靠的SD卡,可以确保数据的稳定性和安全性。避免购买劣质或假冒产品,以免造成数据丢失或设备损坏。
4.正确使用与保养:在使用SD卡时,应注意避免频繁插拔和震动,以免损坏插槽或SD卡本身。同时,定期备份重要数据,以防万一。

SD卡和MMC卡的关系

SD卡(Secure Digital Memory Card)和MMC卡(MultiMediaCard)都是基于Nand Flash技术的移动存储卡,但它们之间存在一些关键的区别和发展历程。
历史与发展:

  • MMC卡于1997年由西门子和SanDisk推出,是最早的基于Nand Flash技术的存储卡之一。
  • SD卡则是在MMC卡的基础上发展而来,于1999年首次由松下、东芝和SanDisk公开发布。SD卡的设计初衷是为了提供一种更安全、更高速、更大容量的存储解决方案。
    外观与尺寸:
  • 早期SD卡和MMC卡的外观尺寸很类似,但SD卡比MMC卡厚约0.7mm。
  • 随着技术的发展,SD卡逐渐推出了多种规格,如MiniSD和MicroSD(TF卡),以适应不同设备的需求。而MMC卡则逐渐转向了嵌入式领域,发展出了eMMC标准。
    功能与兼容性:
  • SD卡不仅具有存储功能,还具备加密功能,可以保护存储在其中的数据安全。而MMC卡则主要注重存储功能,没有内置加密功能。
  • 早期SD卡对MMC卡的兼容性较强,多数支持SD卡插槽的设备都可以同时支持MMC卡。但随着技术的发展,二者之间的差异逐渐增大,走向了不同的发展方向。
    当前市场地位:
  • 目前,SD卡在移动存储卡领域的地位稳固,不断向大容量和高速度方向发展,推出了一系列接口标准。
  • MMC卡则基本退出了历史舞台,转而在嵌入式领域得到了广泛应用,如智能手机、平板电脑等设备中的eMMC存储芯片。
    SD卡与MicroSD的区别
    尺寸与外观:
  • SD卡是标准尺寸的存储卡,通常用于数码相机、摄像机等设备。
  • MicroSD卡(也称为TF卡)是SD卡的一种小型化版本,体积更小、更轻便,常用于智能手机、平板电脑等移动设备中。
    功能与应用:
  • SD卡和MicroSD卡在功能上没有本质区别,都具备存储数据的能力。
  • 由于MicroSD卡体积小、重量轻,因此更适合用于需要便携性的设备中。同时,MicroSD卡也可以通过适配器转换成标准SD卡使用,以兼容更多设备。
    SD卡与TF卡的区别
    名称与定义:
  • SD卡是Secure Digital Memory Card的缩写,是一种基于半导体快闪记忆器的新一代记忆设备。
  • TF卡是TransFlash卡的简称,实际上是MicroSD卡的另一种称呼。它们在本质上是同一种东西,只是名称不同。
    功能与用途:
  • SD卡和TF卡在功能上没有区别,都具备存储数据的能力。
  • 由于TF卡体积小巧、重量轻,因此更常用于智能手机、平板电脑等便携设备中。而标准SD卡则更适用于数码相机、摄像机等需要较大存储容量的设备。
    综上所述,SD卡、MMC卡、MicroSD卡和TF卡之间存在一定的联系和区别。它们各自在不同的领域和场景中发挥着重要作用,为用户提供了便捷的数据存储解决方案。

SPI协议

SPI协议(Serial Peripheral Interface),即串行外围设备接口,是由摩托罗拉公司提出的一种高速、全双工、同步的通信总线。它被广泛地应用于ADC、LCD等设备与MCU(微控制器)之间,特别是在需要较高通讯速率的场合。以下是对SPI协议的详细解析:
一、SPI协议的基本组成
SPI协议使用四条信号线进行通信,分别为:
1.SCK(Serial Clock):时钟信号线,由主设备产生,用于通讯数据的同步。时钟频率决定了通讯的速率,不同的设备支持的最高时钟频率不同。
2.MOSI(Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据。
3.MISO(Master Input, Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据,从机的数据由这条信号线输出到主机。
4.CS/SS(Slave Select/Chip Select):从设备选择信号线,也称为NSS、CS等。这条线用于选择指定的从设备,使主设备能够单独地与特定从设备通信,避免数据线上的冲突。
二、SPI协议的工作模式
SPI协议通过CPOL(时钟极性)和CPHA(时钟相位)的不同组合,定义了四种工作模式:
1.模式0(CPOL=0, CPHA=0):空闲态时,SCLK处于低电平;数据采样是在第1个边沿(上升沿),数据发送是在下降沿。
2.模式1(CPOL=0, CPHA=1):空闲态时,SCLK处于低电平;数据发送是在第1个边沿(上升沿),数据采样是在下降沿。
3.模式2(CPOL=1, CPHA=0):空闲态时,SCLK处于高电平;数据采样是在第1个边沿(下降沿),数据发送是在上升沿。
4.模式3(CPOL=1, CPHA=1):空闲态时,SCLK处于高电平;数据发送是在第1个边沿(下降沿),数据采样是在上升沿。
三、SPI协议的特点
1.高速传输:SPI协议能够实现高速的数据传输,具体速率取决于设备支持的时钟频率。
2.全双工通信:SPI协议支持全双工通信,即在同一时刻,主设备可以发送数据给从设备,同时从设备也可以发送数据给主设备。
3.简单灵活:SPI协议相对简单,且具有较强的灵活性,可以根据需要选择不同的工作模式。
4.主从结构:SPI协议采用主从结构,一个SPI通信系统中只能有一个主设备,但可以有多个从设备。
四、SPI协议的应用
SPI协议被广泛应用于各种需要高速、全双工通信的场合,如ADC、LCD等外设与MCU之间的通信。此外,SPI协议还常被用于FPGA、DSP等可编程控制器与外设之间的通信。
五、SPI协议的扩展
为了进一步提高数据传输效率,Motorola公司在标准的SPI协议基础上,开发出了多种扩展协议,如Dual SPI、Quad SPI等。这些扩展协议通过增加数据线位数的方式,实现了更高的数据传输速率。
综上所述,SPI协议是一种高效、灵活的通信协议,具有广泛的应用前景。随着技术的不断发展,SPI协议及其扩展协议将在更多领域发挥重要作用。
SD卡的物理接口
SD卡(Secure Digital Memory Card)的物理接口通常包括几个关键的引脚,这些引脚用于实现与主机设备的通信。SD卡的物理接口主要包括:

  • CLK(时钟引脚):用于传输时钟信号,控制数据传输的速率和同步。
  • CMD(命令引脚):用于传输命令,包括初始化命令、读写命令等。
  • DAT0-DAT3(数据引脚):标准SD卡支持最多4个数据引脚,用于传输数据。高速SD卡(如SDHC、SDXC)可能支持更多数据引脚以实现更高的数据传输速率。
    此外,SD卡还可能包括其他引脚,如VDD(电源引脚)、VSS(接地引脚)以及写保护引脚等,但这些引脚并非所有SD卡都具备,且其具体功能可能因SD卡类型和版本而异。
    在这里插入图片描述

SD协议与SPI协议

SPI协议特点:

  • 低速:相对于SD协议,SPI协议的数据传输速率较低,适合对速度要求不高的应用。
  • 接口操作时序简单:SPI协议的操作时序相对简单,易于实现,适合单片机等简单设备使用。
  • 适合单片机:由于操作简单、引脚数量少,SPI协议非常适合与单片机等微控制器进行通信。
    SD协议特点:
  • 高速:SD协议支持较高的数据传输速率,适合需要快速数据传输的应用。
  • 接口时序复杂:SD协议的操作时序相对复杂,包括命令传输、数据响应等多个阶段,需要复杂的逻辑控制。
  • 适合有SDIC接口的SoC:SD协议通常用于具有SD接口控制器的SoC(系统级芯片)中,这些SoC内部集成了SD卡控制逻辑,可以方便地实现与SD卡的通信。

在这里插入图片描述

S5PV210的SD/MMC控制器

S5PV210是一款集成了ARM Cortex-A8内核的高性能微处理器解决方案,它支持多种外设接口,包括SD/MMC控制器。S5PV210的SD/MMC控制器具有以下主要特点:

  • 高性能:S5PV210的SD/MMC控制器支持高速数据传输,能够满足高性能应用的需求。
  • 多通道支持:S5PV210提供了多个SD/MMC接口通道,可以同时支持多个SD/MMC设备的连接和操作。
  • 灵活的数据传输模式:支持多种数据传输模式,包括DMA(直接内存访问)模式,可以显著提高数据传输效率。
  • 丰富的功能:除了基本的读写操作外,还支持卡检测、卡识别、卡初始化等多种功能,方便用户进行卡管理和维护。

(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卡启动详解
SoC为何要支持SD卡启动
(1)一个普遍性的原则就是:SoC支持的启动方式越多,将来使用时就越方便,用户的可选择性就越大,SoC的适用面就越广。
(2)SD卡有一些好处:譬如可以在不借用专用烧录工具(类似Jlink)的情况下对SD卡进行刷机,然后刷机后的SD卡插入卡槽,SoC既可启动;譬如可以用SD卡启动进行量产刷机(量产卡)。像我们X210开发板,板子贴片好的时候,内部iNand是空的,此时直接启动无启动;板子出厂前官方刷机时是把事先做好的量产卡插入SD卡卡槽,然后打到iNand方式启动;因为此时iNand是空的所以第一启动失败,会转而第二启动,就从外部SD2通道的SD卡启动了。启动后会执行刷机操作对iNand进行刷机,刷机完成后自动重启(这回重启时iNand中已经有image了,所以可以启动了)。刷机完成后SD量产卡拔掉,烧机48小时,无死机即可装箱待发货。

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中这么详细)。

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

SD卡启动流程(bin文件小于16KB时和大于16KB时)
(1)启动的第一种情况是整个镜像大小小于16KB。这时候相当于我的整个镜像作为BL1被steppingstone直接硬件加载执行了而已。
(2)启动的第二种情况就是整个镜像大小大于16KB。(只要大于16KB,哪怕是17KB,或者是700MB都是一样的)这时候就要把整个镜像分为2部分:第一部分16KB大小,第二部分是剩下的大小。然后第一部分作为BL1启动,负责去初始化DRAM并且将第二部分加载到DRAM中去执行(uboot就是这样做的)。
1.10.4.5、最重要的但是却隐含未讲的东西
(1)问题:iROM究竟是怎样读取SD卡/NandFlash的?
(2)三星在iROM中事先内置了一些代码去初始化外部SD卡/NandFlash,并且内置了读取各种SD卡/NandFlash的代码在iROM中。BL0执行时就是通过调用这些device copy function来读取外部SD卡/NandFlash中的BL1的。

在这里插入图片描述

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

扇区和块的概念
(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卡。

任务:大于16KB的bin文件使用SD卡启动

(1)总体思路:将我们的代码分为2部分:第一部分BL1小于等于16KB,第二部分为任意大小,iROM代码执行完成后从SD卡启动会自动读取BL1到SRAM中执行;BL1执行时负责初始化DDR,然后手动将BL2从SD卡copy到DDR中正确位置,然后BL1远跳转到BL2中执行BL2.
(2)细节1:程序怎么安排?程序整个分为2个文件夹BL1和BL2,各自管理各自的项目。
(3)细节2:BL1中要完成:关看门狗、设置栈、开iCache、初始化DDR、从SD卡复制BL2到DDR中特定位置,跳转执行BL2.
(4)细节3:BL1在SD卡中必须从Block1开始(Block0不能用,这个是三星官方规定的),长度为16KB内,我们就定为16KB(也就是32个block);BL1理论上可以从33扇区开始,但是实际上为了安全都会留一些空扇区作为隔离,譬如可以从45扇区开始,长度由自己定(实际根据自己的BL2大小来分配长度,我们实验时BL2非常小,因此我们定义BL2长度为16KB,也就是32扇区)。
(5)细节4:DDR初始化好之后,整个DDR都可以使用了,这时在其中选择一段长度足够BL2的DDR空间即可。我们选0x23E00000(因为我们BL1中只初始化了DDR1,地址空间范围是0x20000000~0x2FFFFFFF)。

#!/bin/sh
sudo dd iflag=dsync oflag=dsync if=./BL1/BL1.bin of=/dev/sdb seek=1
sudo dd iflag=dsync oflag=dsync if=./BL2/BL2.bin of=/dev/sdb seek=45
  • sudo
    : 这个命令用于以超级用户(root)的权限执行后续的 dd 命令。因为写入磁盘设备(如 /dev/sdb)通常需要管理员权限。
  • dd
    : 是实际执行数据复制和转换的命令。
  • iflag=dsync
    : 这是一个输入标志(input flag),dsync 表示使用同步I/O操作进行读取,但仅当实际读取数据时才进行磁盘同步。这有助于减少不必要的磁盘I/O操作,但可能不是所有系统都支持这个选项。
  • oflag=dsync
    : 这是一个输出标志(output flag),与 iflag=dsync 类似,但用于写操作。它确保在写入数据到磁盘之前,先同步目标文件系统的元数据到磁盘。
  • if=./BL1/BL1.bin
    : 指定输入文件(input file)为当前目录下的 BL1/BL1.bin。
  • of=/dev/sdb
    : 指定输出文件(output file)为磁盘设备 /dev/sdb。注意,这里不是写入文件,而是直接写入磁盘设备。
  • seek=1
    : 这个选项指定了写入操作开始前,在输出文件(这里是磁盘设备)中跳过的块数(以512字节为单位)。因此,BL1.bin 的内容将从 /dev/sdb 的第二个块(块编号为1,因为计数从0开始)开始写入。这通常用于在磁盘的特定位置(如引导扇区之后)写入数据。
  • if=./BL2/BL2.bin
    : 指定了不同的输入文件,即 BL2/BL2.bin。
  • seek=45
    : 这次,在写入 BL2.bin 的内容之前,跳过了45个块(即大约22.5KB,因为每个块512字节)。这意味着 BL2.bin 的内容将从 /dev/sdb 的第46个块开始写入。

烧录启动实验
1.10.7.2、代码分为2部分启动(上一节讲的)的缺陷
(1)代码分为2部分,这种技术叫分散加载。这种分散加载的方法可以解决问题,但是比较麻烦。
(2)分散加载的缺陷:第一,代码完全分2部分,完全独立,代码编写和组织上麻烦;第二,无法让工程项目兼容SD卡启动和Nand启动、NorFlash启动等各种启动方式。

uboot中的做法
(1)第二种思路:程序代码仍然包括BL1和BL2两部分,但是组织形式上不分为2部分而是作为一个整体来组织。它的实现方式是:iROM启动然后从SD卡的扇区1开始读取16KB的BL1然后去执行BL1,BL1负责初始化DDR,然后从SD卡中读取整个程序(BL1+BL2)到DDR中,然后从DDR中执行(利用ldr pc, =main这种方式以远跳转从SRAM中运行的BL1跳转到DDR中运行的BL2)。

再来分析uboot的SD卡启动细节
(1)uboot编译好之后有200多KB,超出了16KB。uboot的组织方式就是前面16KB为BL1,剩下的部分为BL2.
(2)uboot在烧录到SD卡的时候,先截取uboot.bin的前16KB(实际脚本截取的是8KB)烧录到SD卡的block1~bolck32;然后将整个uboot烧录到SD卡的某个扇区中(譬如49扇区)
(3)实际uboot从SD卡启动时是这样的:iROM先执行,根据OMpin判断出启动设备是SD卡,然后从S卡的block1开始读取16KB(8KB)到SRAM中执行BL1,BL1执行时负责初始化DDR,并且从SD卡的49扇区开始复制整个uboot到DDR中指定位置(0x23E00000)去备用;然后BL1继续执行直到ldr pc, =main时BL1跳转到DDR上的BL2中接着执行uboot的第二阶段。

总结:uboot中的这种启动方式比上节讲的分散加载的好处在于:能够兼容各种启动方式。

bl led_blink    // ledblink是C语言实现的一个函数
ldr pc, =led_blink
  • bl led_blink 是标准的函数调用方式,它保留了返回地址并跳转到函数执行。
  • ldr pc, =led_blink(如果 = 被理解为伪指令的一部分)可能用于直接跳转,但这不是ARM汇编的标准用法,且可能依赖于特定的编译器或汇编器。在标准ARM汇编中,你需要首先获取函数的地址,然后才能使用 ldr 或其他跳转指令。

解决X210开发板的软开关按键问题

X210开发板的软启动电路详解
(1)210供电需要的电压比较稳定,而外部适配器的输出电压不一定那么稳定,因此板载了一个文稳压器件MP1482.这个稳压芯片的作用就是外部适配器电压在一定范围内变化时稳压芯片的输出电压都是5V。
(2)MP1482芯片有一个EN(Enable)引脚,这个引脚可以让稳压芯片输出或关闭输出。EN为高电平时有输出电压,EN引脚为低电平时稳压芯片无输出。
(3)两个因素可以影响EN引脚的电平:第一个是POWER按键(SW1),POWER按键按下时EN为高电平,POWER按键弹起时EN为低电平;第二个是POWER_LOCK(EINT0)引脚,这个引脚为POWER_LOCK模式下高电平,则EN为高;若这个引脚为EINT0模式或者为POWER_LOCK模式但输出为低电平,则EN为低。
(4)图中还有EINT1引脚,这个引脚的作用是用来做中断,提供给CPU用来唤醒的。

在这里插入图片描述

为什么要软启动
(1)一般的电路设计都是用拨码开关来做电源开关的(打到一侧则接通,打到另一侧则关闭)。这种方式的优点是设计简单,缺点是电路太简单,整个主板要么有电要么没电无法做休眠模式、低功耗模式等。
(2)软启动电路是比较接近于实际产品的,其他开发板的硬开关其实是简化版的,和实际产品还有差异。

开发板供电置锁原理和分析
(1)软开关在设计时有一个置锁电路,用EINT0(也就是GPH0_2)引脚来控制的。
(2)EINT0这个引脚是有复用设计(两个完全不相干的功能挤在同一个引脚上,同时我们只能让这个引脚用于其中一种功能,这就叫复用)的,一个是GPIO(也就是GPH0_2引脚)、一个是PS_HOLD_CONTROL。(注意:EINT0功能算是GPIO下的一个子功能)
(3)PS_HOLD在Section2.4 Power Management章节下的4.10.5.8节下。
(4)PS_HOLD_CONTROL寄存器(0xE010E81C),共有3个位有用。
bit0, 0表示这个引脚为GPIO功能,1表示这个引脚为PS_HOLD功能
bit9,0表示这个引脚方向为输入,1表示这个引脚方向为输出
bit8,0表示这个引脚输出为低电平,1表示输出为高电平。
分析:我们要使用软启动置锁,则需要将bit0、8、9都置为1即可。
在这里插入图片描述
写代码+实验验证
(1)要想让开发板和普通的开发板一样,一按下按键程序运行后即可松手不会断电,则只要在程序的开头部分添加代码去置锁开关板即可。
(2)置锁代码的方法是:给PS_HOLD_CONTROL寄存器的bit0、8、9均写入1即可。
(3)注意:此时开发板已经置锁,POWER按键已经失效,关机时需要按下复位按键。

BL1

start.S

/*

 */

#define WTCON		0xE2700000

#define SVC_STACK	0xd0037d80
#define IRQ_STACK	0xd0037f80

.global IRQ_handle	
.global _start					// 把start链接属性改为外部,这样其他文件就可以看见start了
_start:
	//置锁
	ldr r0, =0xE010E81C
	ldr r1, =0x301
	str r1, [r0]
	
	// 第1步:关看门狗(向WTCON的bit5写入0即可)
	ldr r0, =WTCON
	ldr r1, =0x0
	str r1, [r0]
	
	// 第2步:初始化时钟
	// bl clock_init
	ldr sp, =SVC_STACK
	
	// 第3步:设置SVC栈

	ldr sp, =SVC_STACK
	
	//第4步:开/关icache
	mrc p15,0,r0,c1,c0,0;			// 读出cp15的c1到r0中
	//bic r0, r0, #(1<<12)			// bit12 置0  关icache
	orr r0, r0, #(1<<12)			// bit12置1  开icache
	mcr p15,0,r0,c1,c0,0;

	//初始化ddr
	bl sdram_asm_init


	//第5步:重定位,从SD卡第45扇区开始,复制32个扇区内容到DDR的0x23E00000
	bl copy_bl2_2_ddr
	
	
	//直接去调用自己定义的main函数
	//bl main

	
	//从这里之后就可以开始调用C程序了
	//bl led_blink					// ledblink是C语言实现的一个函数

	
//汇编最后的这个死循环不能丢
	b .
	
//保护/回复现场
// IRQ_handle:
// 	// 设置IRQ栈
// 	ldr sp, =IRQ_STACK
//	// 保存LR寄存器
//	// 因为流水线 所以PC的值会比真正执行的代码+8,
// 	sub lr, lr, #4
// 	// 保存r0-r12和1r到irg模式下的栈上面
// 	stmfd sp!, {r0-r12, lr}//进栈保存现场
// 	// 调用真正的中断处理函数
//	bl irq_handler
// 	// 处理完成开始恢复现场,其实就是做中断返回,关键是将T0-r12,pc,cpsr一起恢复
//	ldmfd sp!, {r0-r12, pc}^//执行结束,将需要返回的地址赋值给PC


BL2

start.S

/*

 */

#define WTCON		0xE2700000

#define SVC_STACK	0xd0037d80
#define IRQ_STACK	0xd0037f80

.global IRQ_handle	
.global _start					// 把start链接属性改为外部,这样其他文件就可以看见start了
_start:


	
	//从这里之后就可以开始调用C程序了
	//bl led_blink					// ledblink是C语言实现的一个函数
	//ldr pc, =led_blink
	ldr pc, =main	

	
//汇编最后的这个死循环不能丢
	b .
	
//保护/回复现场
IRQ_handle:
	// 设置IRQ栈
	ldr sp, =IRQ_STACK
	// 保存LR寄存器
	// 因为流水线 所以PC的值会比真正执行的代码+8,
	sub lr, lr, #4
	// 保存r0-r12和1r到irg模式下的栈上面
	stmfd sp!, {r0-r12, lr}//进栈保存现场
	// 调用真正的中断处理函数
	bl irq_handler
	// 处理完成开始恢复现场,其实就是做中断返回,关键是将T0-r12,pc,cpsr一起恢复
	ldmfd sp!, {r0-r12, pc}^//执行结束,将需要返回的地址赋值给PC
	
	

总结

BL1 的大小不能超过16KB
将代码分为BL1和BL2 烧录,需要使用Linux命令行写入SD卡

#!/bin/sh
sudo dd iflag=dsync oflag=dsync if=./BL1/BL1.bin of=/dev/sdb seek=1
sudo dd iflag=dsync oflag=dsync if=./BL2/BL2.bin of=/dev/sdb seek=45

写入SD卡失败,就重新运行Ubuntu,确保SD卡状态正确

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值