ARM芯片开发(S5PV210芯片)——SD卡启动

2023-11-06

1、SD卡启动

顾名思义就是启动代码存放在SD卡中,设备从SD卡中启动。用SD卡启动有一些好处:譬如可以在不借用专用烧录工具(类似Jlink)的情况下对SD卡进行刷机,然后刷机后的SD卡插入卡槽,SoC既可启动;譬如可以用SD卡启动进行量产刷机(量产卡)。

2、支持SD卡启动的条件

SD卡启动不是每款芯片都支持的,因为SD卡有个难点,就是SD卡不能上电直接使用也不能通过总线与CPU相连,要通过Soc的SD卡控制器发命令才能与SD卡通信。这个有个矛盾点,SD卡需要初始化才能使用,但是能初始化SD卡的启动代码又在SD卡上,这就陷入了死锁。所以之前的设备都是用Norflash做启动介质,因为NorFlash上电即可使用,还可以片内执行。为了解决SD卡的启动问题,三星提出了启动基石(SteppingStone)的技术。

3、SteppingStone

SteppingStone技术就是在Soc内部内置小容量的IROM和IRAM,在IROM中内置一些固定的代码,其中就包含SD卡的初始化函数,然后SD卡初始化的代码可以在IRAM中执行,这样外部的SD卡初始化的问题就解决了。只需要将启动方式设置成SD卡启动,上电Soc就会去初始化SD卡,然后就可以去SD卡上读取启动代码,顺利启动设备。之所以能提前内置SD卡的初始化函数,是因为SD卡是有协议标准的,无论哪个厂家的SD卡都是遵照SD卡协议,这样的好处就是只要你接入的是标准的SD卡那内置的SD卡函数都能成功初始化,这都是标准化带来的好处。

4、启动方式的选择

S5PV210芯片支持不止一种启动方式,包括iNand、SD卡、Uart等,所以要选择启动方式为SD卡才能顺利从SD卡启动。启动方式的选择是硬编码,不是通过软件去设置。S5PV210可以在上电去读取某几个引脚的高低电平来知道当前设置的启动方式,在外部表现就是开发板上有OM脚,通过去拨动OM脚去施加高/低电平来设置启动方式。具体怎么设置,可以去查数据手册。

5、数据手册中关于SD卡启动的说明

5.1、Global Variable(0xD0037488)

在这里插入图片描述

该表格中列出的是某些特殊地址代表的含义,可以理解成全局变量,因为你已经知道地址就可以直接去取该地址处的数据。0xD0037488是在Soc的IRAM中,硬件会根据当前的启动方式自动赋值。S5PV210支持SD卡通道0和通道2启动,当通过OM脚设置成从通道0启动时,0xD0037488地址处的值为EB000000,设置成通道2启动时,0xD0037488地址处的值为EB200000。在uboot中可以读取该地址处的值来知道当前从哪个SD卡通道启动。

5.2、 设备复制函数

在这里插入图片描述

表格中列出的地址中保存的数据是各个内置函数所在IROM中的地址,也就是相当于告诉你函数指针,你只需要将得到的地址强制转换成对应函数类型的函数指针就可以操作。其中0xD0037F98地址中保存的就是从SD卡读取数据函数所在的地址,该函数就包含了对SD卡的初始化。需要强调,不可直接将表格中的地址强制转换成函数指针去操作,该地址保存的是函数所在的地址,你可以发现表格中的地址都是相差4字节,怎么可以放下一个函数,但是4字节刚好是一个指针的大小,要得到函数所在地址要做一次转换。

5.3、SD卡赋值函数操作说明

在这里插入图片描述

表格中高亮的部分就是通过宏定义的方式去引用SD卡赋值函数,但是更推荐用函数指针的方式去引用,因为宏定义不会检查参数类型,而函数会。下面提供用函数指针去引用该函数,摘抄自uboot。

//定义函数指针类型
typedef u32(*copy_sd_mmc_to_mem)(u32 channel, u32 start_block, u16 block_size, u32 *trg, u32 init);
//取0xD0037F98地址处的数据强制转换成SD卡复制函数进行操作
copy_sd_mmc_to_mem copy_bl2 =(copy_sd_mmc_to_mem) (*(u32 *) (0xD0037F98));

5.3.1、SD卡赋值函数参数说明

channel:SD卡通道号,表示当前要从哪个SD卡通道读取数据;
start_block:从SD卡的哪个扇区开始读;
block_size:读取多少个块;
trg:将读取到的数据存放到哪个地址;
init:是否初始化,一般填0;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM芯片开发(S5PV210芯片)——SD卡启动 的相关文章

随机推荐

  • ElasticSearch6.X时间范围查询无效bug

    ElasticSearch6 X时间范围查询无效bug 1 es6 8 1版本时间范围查询 原始写法如下 GET oms historyalarm historyalarm recent historyalarm recent search
  • C# WPF 滚动字幕实现

    原文 C WPF 滚动字幕实现
  • 服务器显卡驱动安装NVIDIA-1080Ti

    服务器显卡驱动安装 主要参考的安装方式 以下操作在主机中 并非使用远程登录方式 未验证远程登录方式是否可行 需要 显卡驱动的 run 文件 显卡驱动安装第一种方法 https askubuntu com questions 149206 h
  • MYSQL ERROR 1130: Host is not allowed to connect to this MySQL server错误解决

    E RROR 1130 Host XXXXXX is not allowed to connect to this MySQL server 错误的解决方法 方法一 执行命令 mysql gt GRANT ALL PRIVILEGES ON
  • el-select 下拉框有值却无法选中

    场景 el select 下拉框数据是从接口获取的大量数据 点击选项后 在 change 函数中查看是值已经发生变化了 但在页面上没有显示新改变后的值 也就是下拉框的值无法选中 解决方法 在 el select 的 change 事件绑定
  • tensorflow问题:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0

    在 tensorflow 实战Google深度学习框架 中的7 2 1节 Tensorflow图像处理函数 一段小代码 使用Tensorflow读入图像 代码如下 运行时发生错误如下 解决方法 问题原因 第一 第二 我们来看下tf gfil
  • idea java 远程调试_使用idea开启远程调试

    jar程序运行在远程服务器上出现错误 又没有明确的错误日志能够查看得到 无从下手 这篇文章获取可以帮助一二 这里我来分享一种通过idea实现远程调试的方法 几个及其简单的操作就可以使我们定位远程服务器的错误时更加得心应手 一 在idea端进
  • websocket中spring注入service对象失败问题处理

    因为在spring中controller service dao默认都为单例模式 而websocket为多线程的 websocket初始化时 非连接用户 会将 Autowired的对象注入成功 后面创建socket链接后会注入为null 因
  • 复现XSS漏洞

    一 设置漏洞环境 首先 我们需要一个包含XSS漏洞的Web应用 我们可以使用一个简单的示例页面来模拟漏洞 以下是一个基本的示例代码 h1 欢迎来到我们的网站 h1
  • pygame入门

    二 创建游戏窗口 要使用pygame首先需要进行初始化 import pygame 初始化pygame pygame init 想要运行一个游戏 一定要有用于运行游戏的窗口 创建窗口pygame display set mode 在括号里可
  • C++总结笔记(十一)—— Lambda表达式的应用

    文章目录 一 Lambda表达式是什么 二 程序示例 1 在STL中的使用 一 Lambda表达式是什么 Lambda表达式时C 11引入的语法 本质上是一个匿名函数 用 三个符号组成表达式 格式为 capture list params
  • CSS清除浮动及手写clearfix

    清除浮动的方法 使用clear both清除浮动 clear both意思就是清除浮动 clear clear both verflow方法的使用 当给父元素设置了overflow样式 不管是overflow hidden或overflow
  • android 浅探打包安装APK

    打包安装过程 Run as Android Application 1 生成apk文件 1 生成 dex文件 DVM java gt javac gt class gt dx bat gt dex 架构 寄存器 cpu上一块高速的缓存 2
  • 谷歌地图旋转图片marker(图片旋转转base64)

    custom rotate icon method for Google map var RotateIcon function options this options options this rImg options img new
  • QT中使用winsock创建Tcp连接传文件

    第一步链接库 qmake LIBS lws2 32 cmake target link libraries send send是项目名称替换自己的 PUBLIC lt
  • 小程序动画 animation 的常规使用

    公司小程序项目比较多 最近正好有时间看一下小程序的动画 同时记录一下我的学习过程 看到这个文章的 我建议你直接去小程序后台 https developers weixin qq com miniprogram dev api ui anim
  • 从零开始教你如何完成一个基于Vite+Vue3+TS的后台管理系统

    项目大致效果 心动了吗 没错 没错 你没看错 在学习了前端也有一年多的时间了 先后学习了 html css html5 css3 js 微信小程序 nodejs vue react ts等 现在也是时候来对之前学的知识进行一个综合的练习了
  • c语言文件操作

    目录 一 什么是文件 1 1 程序文件 1 2 数据文件 1 3 文件名 二 文件的打开和关闭 2 1 文件指针 2 2 文件的打开和关闭 2 3 文件的顺序读写 编辑 三 文件的随机读写 3 1 fseek ftell rewind 四
  • Android WebView加载本地统一HTML界面样式文件并填充内容

    前言 之前加载HTMl图文都是使用TextView 但是现在需要统一三个端的样式 给出了一个HTML文件 我想反正都是HTML格式的 TextView应该也没问题 我就将文本直接填充进去 一运行 发现Html fromHtml 无法解析 l
  • ARM芯片开发(S5PV210芯片)——SD卡启动

    1 SD卡启动 顾名思义就是启动代码存放在SD卡中 设备从SD卡中启动 用SD卡启动有一些好处 譬如可以在不借用专用烧录工具 类似Jlink 的情况下对SD卡进行刷机 然后刷机后的SD卡插入卡槽 SoC既可启动 譬如可以用SD卡启动进行量产