上手飞凌OKMX6UL-C开发板,256M NAND Flash,256M DDR3,支持从SD卡启动烧写程序。原来没接触过,通过这两天阅读 IMX6ULRM,有了初步的认识,特进行记录。
1.imx6ul启动方式的选择
imx6ul的启动方式通过内部寄存器Boot Mode[1:0]和电子熔丝位的值或是IO引脚的电平量的组合来决定启动方式的选择。
寄存器Boot Mode[1:0]的值以复位时读入的Boot1 和 Boot0引脚的电平量为依据。

开发板OKMX6UL-C采用内部启动(internal BOOT)的方式,配合相应GPIO引脚选择启动方式。GPIO引脚对应的Boot_CFG配置表:

从上面的配置可以得出:BOOT_MODE[1:0]= 10 b, BOOT_CFG[7:4]= 010x b 选择的是从SD卡启动。

2.SD卡启动流程
SD卡启动还可以设置Fast Boot,High Speed 模式,具体参照手册 IMX6ULRM 的8.5.3.1 Expansion Device eFUSE Configuration,这里采用默认的模式。

SD/eSD普通启动模式初始化开始后,SD/eSD的速率设置为 347.22kHz。在identification阶段,ROOM启动代码会检测电压值,以及SD卡的容量。
在sd卡初始化过程中,ROOT启动代码会尝试给SD卡设置boot 分区。如果失败了,启动代码会将此卡识别为普通的sd卡;如果成功了,会将此卡识别为eSD卡。
等初始化完成后,启动代码会切换到高速(普通模式25M,高速模式50M)。

在启动过程,程序镜像必须包含以下几个部分:
2.1. Image vector table(IVT) - ROOM启动代码用以检查程序镜像其他部分(Boot Data 、DCD等)存放地址的指针表,分配了固定的地址。
2.2. Boot data - 存有程序镜像地址、镜像大小、和插入标志的表
2.3. DCD - IC configuration data
2.4. User code and data

Image vector table(IVT) 包含程序镜像的入口,DCD的指针,和一些其他启动用到指针。IVT存放在固定的位置,不用的启动设备位置不一样,如下表:

可见,sd卡IVT存放在偏移量 1K bytes的位置,启动代码会首先找到这个地址查看IVT,然后读取4K 镜像代码到iram,开始执行。

3.sd卡的制作
从上可知,用于烧写的程序的sd卡需要特殊制作,将uboot镜像放在偏移地址1K的位置,这样 imx6ul 的irom启动代码才能读到uboot镜像,进而执行uboot烧写程序的流程。
sd卡制作脚本部分片段:

cat << EOM################################################################################Partitioning Boot################################################################################
EOMmkfs.vfat -F 32 -n "boot" ${DRIVE}1  #将sd卡格式化,vfat格式,及windows下fat32
fi#Add directories for images
export START_DIR=$PWD
export PATH_TO_SDBOOT=boot
#export PATH_TO_SDROOTFS=rootfs
export PATH_TO_TMP_DIR=$START_DIR/tmpecho " "
echo "Mount the partitions "
rm -rf $PATH_TO_SDBOOT
mkdir $PATH_TO_SDBOOT
#mkdir $PATH_TO_SDROOTFSsudo mount -t vfat ${DRIVE}1 boot/  #将sd卡挂载在 boot目录下
#sudo mount -t ext3 ${DRIVE}2 rootfs/echo " "
echo "Emptying partitions "
echo " "
sudo rm -rf  $PATH_TO_SDBOOT/*
#sudo rm -rf  $PATH_TO_SDROOTFS/*cat << EOM
################################################################################Copying files now... will take minutes################################################################################Copying boot partition
EOMecho "untar update.tar.bz2 to boot partition"
sudo tar xvf update.tar.bz2 -C ${PATH_TO_SDBOOT} #将update.tar.bz2解压到sd卡中
echo "Buring th u-boot.imx to sdcard"
dd if=/dev/zero of=${DRIVE} bs=1k seek=384 conv=fsync count=129
dd if=boot/bin/u-boot.imx of=${DRIVE} bs=1k seek=1 conv=fsync #将u-boot.imx放在sd卡1k地址处

dd if=boot/bin/u-boot.imx of=${DRIVE} bs=1k seek=1 conv=fsync ,这条语句把uboot镜像u-boot.imx放到sd卡的1k地址处,启动后iroom启动代码会读取到u-boot.imx,将4k的代码读到iram,开始运行uboot。

指令解析:dd 转换、复制文件
参数: if=FIle 从File中读取数据
of=File 写数据到File
bs 一次读写的数据字节数
seek=BLOCKS 写文件时跳过BLOCKS * bs字节再写,如上 seek*bs=1K,即从SD卡的1k位置开始写数据

imx6ul的sd卡启动过程分析相关推荐

  1. ZYNQ-7000如何生成从Flash和SD卡启动的镜像文件

    将PL与PS部分一起使用,并且通过JTAG下载到板子运行.对于ZYNQ,有多种启动方式,比如从JTAG启动.从QSPI(即Flash)启动,从SD卡启动等.对于从JTAG启动的,我们直接运行程序就OK ...

  2. WINCE6.0+S3C6410基于SD卡启动

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  3. imx6 android SD卡启动

    工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...

  4. S5PV210体系结构与接口09:SD卡启动详解

    目录 1. MMC技术演进 1.1 NandFlash & NorFlash芯片 1.2 MMC卡 & SD卡 & MicroSD卡(TF卡) 1.2.1 代际关系 1.2.2 ...

  5. imx533 配置 制作SD卡启动文件系统

    制作SD卡启动文件系统 [1]对SD卡分区 按飞思卡尔文档列出的分区表用fdisk分区: Partition Type/Index Name Start Offset Size File System ...

  6. 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT

    [TINY4412]U-BOOT移植笔记:(9)SD卡启动U-BOOT 宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64 目标板[底板]: Tiny4412SDK - 1506 目标板 ...

  7. 基于S3C2440丛SD卡启动WinCE(或其它程序)的实现

    [楼主位] liuweiele Liuwei 积分:687 派别: 等级:------ 来自: 系统上电后,如果发现SD卡中有boot.ini文件,便按boot.ini文件中的指定参数运行,否则继续启 ...

  8. 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)

    嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...

  9. 第十一天: SD卡原理分析及SD卡启动详解

    主流的外存设备 内存和外存的区别: 一般是把这种(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器 ...

  10. SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统

    uboot编译平台环境:64位win8.1的虚拟机vmware10下的ubuntu-12.04.5-64bit 交叉编译工具链为:  arm-linux-gcc-4.5.1 uboot压缩包:    ...

最新文章

  1. CentOS 7系统安装配置图文详解
  2. 2、RabbitMQ-simplest thing(简单队列)
  3. HDU1978 记忆化搜索
  4. python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...
  5. 大数据时代的电信运营商的机遇
  6. linux系统——fread()与read()函数族区别
  7. oracle rollup 小计,Oracle Group By 用法之 —— Rollup (小计功能)
  8. 关于分布式计算的一些概念
  9. php是硬件还是软件,计算机操作系统是管理计算机硬件和软件的什么
  10. python课程开课吧怎么样-廖雪峰总结的Python商业爬虫教程,请查收!
  11. Hibernate 缓存机制(转)
  12. 三级分销系统源码如何上传?
  13. 计算机桌面快捷win10,win10系统桌面计算机快捷图标不见了的修复方案
  14. 2021泰迪杯B题数据处理4.1
  15. 快速在多个word文件里面检索到关键字
  16. Matlab绘制散点图(scatter函数)
  17. 两阶段目标检测详解--FastRCNN
  18. Javascript运行环境
  19. 五分钟了解设计模式六大原则(上)
  20. iOS 图形处理 Core Graphics Quartz2D 教程

热门文章

  1. html网页上展示晶圆的坐标图,一种测试不良芯片晶元坐标分布的方法与流程
  2. tan和cot的梗_sin cos tan cot 之间的关系
  3. Win10 Edge浏览器设置默认bing/google为搜索引擎教程
  4. Pandas 库之 DataFrame
  5. H3C无线网络延时大、数据丢包,不能上网,原来是有BUG
  6. 清朝12位皇帝简介【顺康雍乾嘉道咸同光宣】
  7. 算法:中国象棋中马的最少步数走法和不重复周游走法的实现(利用图论算法中的BFS和DFS)
  8. 万能网页视频下载教程
  9. 通过Java实现恩尼格玛密码机
  10. java中钟摆运动的代码_仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)...