s5pv210开发与学习:1.3之SD卡学习

2023-05-16

目录

拓展阅读


SD

内存(RAM)与外存(ROM)的区别:

RAM:random access memory.随机访问存储器.特点是任意字节读写(随机访问),掉电丢失.

ROM:read only memory.只读存储器.用于存储东西. 用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存.

5类外存:

原理工作方式

典型应用

速度

可靠性

价格

应用方面

电磁

磁存储.物理运动,摩擦,有损耗

磁带,软盘,CD,光盘,机械硬盘

便宜

PC机

flash

闪存设备:利用电学原理来存储,无损耗

nandflash,norflash

SD卡,MMC卡,MicroSD卡,TF卡

inand,movinand,TF卡,ESSD

SSD

SD卡相关分区内容设置

注:

1个block为512个byte.

2048block 为 1M

SD卡存储规则

第一个block(block0) 不能使用.

BL1必须从block1开始写起.长度为16kb(32个block)

BL2,KERNEL长度自己定.

BL1与BL2,BL2与kernel之间最好留有一定的空白区域(隔离安全带).

SD卡相关功能代码

Device Copy Function

iROM中事先内置了一些代码去初始化外部SD卡/NandFlash,并且内置了读取各种SD卡/NandFlash的代码在iROM中。BL0执行时就是通过调用这些device copy function来读取外部SD卡/NandFlash中的BL1的。这些函数代码我们是不知道具体的源码,只知道这些函数的首地址存储在IROM中的特定位置:

IROM里面有一些连续区域,存放着相关Device Copy Function相关类型启动介质函数的首地址.

Device Copy Function使用方法:

由于每种启动介质的函数类型不同,故在使用时候要注意:

1.定义的函数指针类型(输入参数类型及个数,返回值类型)不同.

2.以上图里面存放的仅仅是函数的首地址,类型为uint型,正确的使用方法是先定义一个正确的符合要求的函数指针变量p,

如:

1.*(uint *)0xd0037f98 //按照uint类型读取读取内存地址为0xd0037f98里面的值,.这个值是CopySDMMCtoMem函数代码地址的首地址

2.定义一个函数指针类型pF,其类型是CopySDMMCtoMem函数类型.用以指向CopySDMMCtoMem函数.

3.定义一个函数指针变量p1,并指向CopySDMMCtoMem函数

 pF p1=(pF)( *(uint*)0xd0037f98) 将内存里面的值强制转化为pF型

4.调用p1

*p1;或p1; 

宏定义方法:

#define CopySDMMCtoMem(z,a,b,c,e)(((bool(*)(int, unsigned int, unsigned short, unsigned int*,bool))(*((unsigned int *)0xD0037F98)))(z,a,b,c,e))

函数指针调用方法:

( ( bool(*)(int, unsigned int, unsigned short, unsigned int*, bool))(*((unsigned int *)0xD0037F98)) )

makefile  调用子文件夹下的makefile

第一种方式:

cd lib; make; cd...

进入lib文件夹,执行make命令,再cd出来.

第二种方式:

make –C ./BL1 :表示进入到BL1文件夹里执行里面的makefile命令

make clean –C ./BL2 :表示进入到BL2文件夹里执行里面的make clean命令

ubuntu在目标文件夹中中输入 write2sd命令,执行write2sd这个脚本.

write2sd脚本内容:

#!/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卡命令

dd:linux烧录,读写磁盘命令

if:in file

of:out file

seek:第几个扇区开始.

以上语句表明要烧录2次.

SD卡在ubuntu中烧录的方法:

SD卡通过读卡器连接到PC上,此时进入ubuntu,

点击”断开连接”.如果可移动设备中没有SD卡出现,则需要在XP中开启VMware USB Arbitration Service服务.

XP中开启VMware USB Arbitration Service服务

:如果ubuntu中没有SD选项,则需要开启此项服务.

开启方法:

XP系统>控制面板>管理工具,开启VMware USB Arbitration Service服务

如何确定有SD卡插入:

ubuntu在目标文件夹中中输入 dev/sd*命令:

dev/sd*:一切设备都是文件,此目录下存放着sd卡的文件描述符.

sdb1:

b位为a,b,c,d,e,,f,代表存储设备的编号.一般SD卡为b,硬盘为a .

       1代表第几个分区.

注意:烧录脚本中的sd*要和实际中的一致.

如果里面的/dev/sdb 文件类型不对(看颜色),则需要删除它(rm –f /dev/sdb),再重新插入SD卡后即可.

烧录:直接在目录中执行  ./write2sd,直到出现以下信息表明烧录完成

注意:有些生成的镜像文件很大,(LCD显示图片等程序),大于16kb,这时候就必须要进行代码重定位,实现分步加载.BL1仅仅做一些初始化工作,BL2则是真正运行的主程序代码.分步加载的时候还要注意SD卡烧写的扇区个数要达到整个程序的文件大小.

SD卡重定位

SD卡重定位copy到DDR中的代码(BL2)必须放在已经初始化过的DDR中

S5PV210DDR内存地址范围:

DRAM0:0x20000000~0x3FFFFFFF(512MB),对应引脚是Xm1xxxx

DRAM1:0x40000000~0x7FFFFFFF(1024MB),对应引脚是Xm2xxxx

X210DDR内存地址范围:

DRAM0:0x20000000~0x2FFFFFFF(256MB)

DRAM1:0x40000000~0x4FFFFFFF(256MB)

DDR初始化

SDRAM(DDR)初始化使用一个函数sdram_asm_init,函数在sdram_init.S文件中实现,是一个汇编函数。

分散加载SD

文件结构

BL1:包含

link.lds 链接脚本.链接到0xd0020010

start.S:汇编文件.主要功能是

关看门狗,

设置SVC栈,设置完成后就可以调用C函数了

开关icache

初始化DDR(bl sdram_asm_init函数),初始化DDR后就可以把代码拷贝至DDR中运行了.

重定位: bl copy_bl2_2_ddr  将SD卡中的BL2拷贝至DDR某处.并跳转到此处运行

makefile:设置编译规则,其中

bootloader1.bin:可以用USB烧录.

BL1.bin:是复制到SD卡中用SD卡烧录. BL1.bin是bootloader1.bin经过mkv210加工转化增加头文字校验信息得到的专门用于SD卡烧录的镜像文件.

mkv210_image.c:加工文件.

s5pv210.h: s5pv210头文件.

sd_relocate.c:SD卡复制及跳转函数

其中

p1(2, SD_START_BLOCK, SD_BLOCK_CNT, (unsigned int *)DDR_START_ADDR, 0);              // 读取SD卡相关内容到DDR指定位置中

//2:代表SD卡通道号.

//SD_START_BLOCK:SD卡复制的起始扇区号.

//SD_BLOCK_CNT:SD卡要复制扇区的个数.

//DDR_START_ADDR:0x23E00000 //为长跳转的地址,与重定位的链接脚本地址要一致

pBL2Type p2 = (pBL2Type)DDR_START_ADDR;//实现强制长跳转.

BL2:包含

start.S:汇编文件,实现长跳转ldr pc, =main

link.lds 链接脚本.链接到长跳转的地址0x23E00000并从此处开始运行

makefile:设置编译规则,此makefile已经不需要将生成的bin文件再通过mkv210加工转化增加头文字校验信息得到的专门用于SD卡烧录的镜像文件.

开机,IROM自动将SD卡中的block1-block32扇区的内容(BL1)加载至iram中运行,当DDR初始化完毕的时候,就可以将SD卡其他内容复制到DDR中.

复制完毕后,用一长跳转指令,跳转到DDR中去执行BL2.

拓展阅读

1.SD卡编程接口

2.SD卡

3.想学习SD卡的编程

4.Cortex A8 | ARM裸机编程学习

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

s5pv210开发与学习:1.3之SD卡学习 的相关文章

  • 【SLAM】VINS-MONO解析——回环检测和重定位

    9 回环检测与重定位 本部分内容涉及到的代码大部分在pose graph文件夹下 xff0c 少部分在vins estimator里 原创内容 xff0c 转载请先与我联系并注明出处 xff0c 谢谢 xff01 系列内容请点击 xff1a
  • API开发手册在线中文版

    Android中文版 api手册地址 xff1a http www matools com api android Bootstrap 3 api手册地址 xff1a http www matools com api bootstrap3
  • 项目规划时间轴流程图

    项目规划时间轴流程图 项目规划时间轴流程图 对一个项目从开始到竣工的整个过程进行总结归纳 时间线图 又叫时间轴图 能以历史进程为载体 将过往的重要事项或者里程碑 标注在轴线上 并加以说明 它的作用是能够可视化内容 以图文的形式呈现出来 时间
  • 架构功能图

    支付系统功能架构图 支付业务的基础系统的复杂性和稳定性是支付业务是否能够及时安全处理的根本 该支付系统功能架构图收集了支付宝的系统架构 完整的支付系统整体架构 从产品分类 模块功能和业务流程 了解支付产品服务的设计 支付系统要兼并合规性 易
  • Web开发技术架构图

    Web开发技术架构图 大型web系统架构动态应用 是相对于网站静态内容而言 是指以c c 43 43 php Java perl net等服务器端语言开发的网络应用软件 比如论坛 网络相册 1 学习Web开发原理 包括MVC MTV等Web
  • 大数据架构图

    大数据管理数据处理过程图 大数据 big data 指无法在一定时间范围内用常规软件工具进行捕捉 管理和处理的数据集合 是需要新处理模式才能具有更强的决策力 洞察力 大数据处理的主要流程包括数据收集 数据存储 数据处理 数据应用等主要环节
  • hutool定时器的使用封装

    启动定时器 建议在main 入口放置 支持秒级别定时任务 CronUtil setMatchSecond true 启动 CronUtil start 使用deamon模式 xff0c CronUtil start true 轮子 impo
  • 网络拓扑架构图

    阿里云应用网络拓扑图 云应用网络架构是指建立在可编程的基础设施之上 基于统一的运行管理平台 按需的分配资源 的网络架构 云网络架构在物理链路 主机网络 网关 控制器四个纬度上全面升级 大大提高了整体网络性能 公司办公网络拓扑图 对于很多大型
  • Kubernetes(K8S)中文文档

    Kubernetes K8S 中文文档 前言Kubernetes是什么 互动教程 Kubernetes 基础概述使用Minikube 部署 Kubernetes 集群使用 kubectl 创建 DeploymentKubernetes 中浏
  • ASCII纯文本绘制流程图

    我们使用纯文本写代码 xff0c 有了Markdown又可以使用纯文本写文档 xff0c 那么图片 xff0c 能不能使用纯文本描述呢 xff1f Text Flow是什么 xff1f Text Flow xff1a 一个强大的在线ASCI
  • ioDraw - 超好用的在线白板,能够手绘各种流程图、架构图

    今天 xff0c 推荐给大家的是一款超级好用的在线绘图工具 xff0c ioDraw在线白板 关于 ioDraw在线白板 一款非常轻量的在线白板工具 xff0c 可以直接在浏览器打开 xff0c 轻松绘制具有手绘风格的图形 比如可以绘制这样
  • ioDraw - 免费的在线图表制作工具

    介绍 xff1a ioDraw是一款数据可视化图表库 xff0c 提供直观 xff0c 生动 xff0c 可交互 xff0c 可个性化定制的数据可视化图表 xff0c 支持折线图 柱状图 饼图 散点图等 地址 xff1a https www
  • 在线流程图绘制工具测评-ioDraw

    对于产品经理和程序员而言 xff0c 流程图制作工具绝对是刚需 xff0c 比起流程图制作软件 xff0c 我更喜欢在线工具 今天跟大家分享一个好用的流程图在线制作工具 ioDraw xff0c 他是免费的 且简单易上手 xff0c 功能强
  • 一款免费好用的代码在线比较工具

    在线代码对比工具 xff08 码工具 xff09 是一款免费的在线文本对比工具 xff0c 无需注册 xff0c 可以在线对两段文本进行对比 xff0c 检测 比较两个文本有什么不同的差异 xff0c 以便修改 xff0c 常用于程序代码
  • LTE学习笔记之接口协议

    LTE 接口协议 三层两面三层两面 空中接口UuL2功能模块用户面控制面 L3功能模块 xff08 控制面 xff09 RRC模块1 系统信息广播2 寻呼3 RRC连接管理4 无线资源控制5 移动性管理NAS信令 地面接口同级接口 X2用户
  • 从零开始构建gRPC的Go服务

    介绍 Protocol Buffers and gRPC是用于定义通过网络有效通信的微服务的流行技术 许多公司在Go中构建gRPC微服务 xff0c 发布了他们开发的框架 xff0c 本文将从gRPC入门开始 xff0c 一步一步构建一个g
  • 在Spring Boot上启用HTTPS

    折腾了很久 xff0c 最新教程 一 获取免费证书 怎么申请不做教程 xff1b 下载证书 xff1a 一定要下载jks的 二 配置springboot 将下载下来的jks文件放进这里 xff1a 然后就是yml文件配置 xff1a key
  • 操作系统整体思路把握

    操作系统定义及功能 硬件资源管理 处理机 存储 设备 文件 和用户服务 现代操作系统比早期阶段操作系统区别在于有了进程管理 多道程序设计的基础 虚拟机观点 裸机 gt 操作系统的形成过程台 人工操作阶段 lt 纸带输入数据 xff0c 人工
  • 《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(二)

    声明 xff1a 此系列答案配套 计算机组成与系统结构 xff08 第二版 xff09 裘雪红 李伯成 西安电子科技大学出版社 一书相关内容 所有内容为博主个人编辑 xff0c 仅作参考学习交流之用 xff0c 转载请注明出处 如发现错误
  • 《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(三)

    声明 xff1a 此系列答案配套 计算机组成与系统结构 xff08 第二版 xff09 裘雪红 李伯成 西安电子科技大学出版社 一书相关内容 所有内容为博主个人编辑 xff0c 仅作参考学习交流之用 xff0c 转载请注明出处 如发现错误

随机推荐