首页 > 其他分享 >万事开头难 - 介绍IMX6ULL启动方式

万事开头难 - 介绍IMX6ULL启动方式

时间:2023-07-03 11:04:09浏览次数:44  
标签:启动 eFUSE BOOT 万事开头难 设置 GPIO IMX6ULL 设备



交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
交流群二:QQ群:536785813(单片机-嵌入式)
公 众 号:百问科技


版本

日期

作者

说明

V1

2020

韦东山

技术文档

不同开发板,启动方式不一样,今天我们来介绍imx6ull开发板的启动方式,这非常重要。若不了解清楚启动方式,后面的所有开发工作便无从谈起。

本文摘自100ask_imx6ull 开发板 配套学习手册-《嵌入式Linux应用开发完全手册_韦东山全系列视频文档全集V2.5》.pdf

1.1 IMX6ULL 启动方式

参考资料:
开发板资料网盘
路径:
06_Datasheet(数据手册)
-> Core_board->CPU->IMX6ULLRM.pdf”
中《Chapter 8: System Boot》。

网盘地址:
100ASK_IMX6ULL

链接:
https://eyun.baidu.com/s/3smDzFAH 密码:LDCn

1.1.1芯片手册讲解

IMX6ULL芯片内部有一个boot ROM,上电后boot ROM上的程序就会运行。它会根据BOOT_MODE[1:0]的值,以及eFUSE或GPIO的值决定后续的启动流程。
注:eFUSE即熔丝,只能烧写一次,一般正式发布产品时烧写最终值;平时调试时通过GPIO来设置开发板的启动方式。
boot ROM上的程序功能强大,可以从USB口或串口下载程序并把它烧写到Flash等设备上,也可以从SD卡或EMMC、Flash等设备上读出程序、运行程序。
问题来了:

① boot ROM是从USB口下载、运行程序,还是从SD卡等设备上读出、运行程序,这由谁决定?

由BOOT_MODE[1:0]的值来决定启动方式,它们来自于2个引脚BOOT_MODE1、BOOT_MODE0。这2个引脚在上电时是输入引脚,芯片启动后采集这2个引脚的值,存入BOOT_MODE寄存器。以后这2个引脚就可以用于其他功能,不会影响到BOOT_MODE寄存器。

BOOT_MODE[1:0]的值确定了4种启动模式,如下图:

万事开头难 - 介绍IMX6ULL启动方式_linux


在100ASK_IMX6ULL中,这2个引脚对应的原理图如下:

万事开头难 - 介绍IMX6ULL启动方式_人工智能_02

00模式
在我们的开发过程中很少用到,简单介绍一下:在这种模式下,GPIO的值被忽略。Boot ROM会根据eFUSE的值来选择启动设备、设置启动设备。但是,对于刚出厂的芯片eFUSE值可能是错乱的、不适合你的设备的,怎么办?eFUSE中有一个值BT_FUSE_SEL,它的出厂值是0,表示eFUSE未被烧写。

boot ROM程序发现BT_FUSE_SEL为0时,它会通过USB或串口来下载程序;发现BT_FUSE_SEL为1时,才会根据eFUSE的值选择启动设备,读出、运行该设备上的程序。

01模式
boot ROM程序通过USB或串口下载、运行程序,这个模式可以用来烧写EMMC等设备。我们的开发板出厂时,就是通过这个模式下载、烧写出厂程序的。

10模式
称之为内部模式,简单地说就是从SD卡、EMMC等设备启动程序。这就引入下面第2个问题。

② 如何选择启动设备?

00模式下是通过eFUSE的值选择启动设备,我们不关心。

10模式下既可以通过eFUSE的值也可以通过GPIO的值来选择启动设备,但是到底通过谁来决定?eFUSE中有一个值BT_FUSE_SEL,对,又是它。它的初始值为0,表示eFUSE未被烧写。

在10模式下,当BT_FUSE_SEL为0时就会通过GPIO来选择启动设备;当BT_FUSE_SEL为1时就会通过eFUSE来选择启动设备。

在开发阶段,我们使用GPIO来选择设备,这就引入下面第3个问题。

③ 如何通过eFUSE或GPIO选择、设置启动设备?

通过eFUSE或GPIO不仅能选择启动设备,还可以设置启动设备。为什么还需要设置?比如Nand Flash参数各有不同,有些的页大小是2048,有些是4096。这些参数不同,boot ROM程序读Nand Flash的方法就不同,我们必须把这些参数告诉boot ROM:通过eFUSE或GPIO来标明这些参数。

首先看看要设置哪些eFUSE或GPIO来选择不同的启动设备。

万事开头难 - 介绍IMX6ULL启动方式_编程语言_03


从上图可知,既可以使用eFUSE也可以使用GPIO来选择启动设备,换句话说GPIO可以覆盖eFUSE的值。

哪些GPIO覆盖哪些eFUSE?

这可以查看IMX6ULL芯片手册《Chapter 8: System Boot》里的《GPIO boot overrides》,我们把它摘出来放在1.1.3小节里。

选择启动设备后,还需要标明一些参数。比如选择EMMC启动时,EMMC接在哪一个接口,eSDHC1还是eSDHC2?它的速度如何?比如选择TF卡启动时,TF卡接在哪一个接口,eSDHC1还是eSDHC2?它的速度如何?

假设使用EMMC启动,或是TF卡启动,怎么设置eFUSE或GPIO?这些信息可以查询IMX6ULL芯片手册《Chapter 5: Fusemap》,摘录如下。

万事开头难 - 介绍IMX6ULL启动方式_linux_04

当BOOT_MODE设置为0b00时,通过eFUSE选择启动设备,通过eFUSE获得设备的参数。

当BOOT_MODE设置为0b10时,通过eFUSE或GPIO来选择启动设备,获得设备的参数;使用eFUSE还是GPIO由eFUSE中的BT_FUSE_SEL决定,它默认是0,表示使用GPIO。

以BOOT_MODE为0b10为例,解析一下上图。要设置为SD卡、TF卡启动,有2个设置方法

  • a. 设置eFUSE的BOOT_CFG1[7:5]为0b010,

或 b. 查看《3.1.3 GPIO boot overrides》确定BOOT_CFG1[7:5]对应的GPIO为LCD1_DATA07~05,把这3个引脚设置为0b010。

根据SD卡、TF卡的性能,可以设置eFUSE或GPIO来表示它能否提供更高的速度:

  • a. 设置eFUSE的BOOT_CFG1[4:0],

或 b. 查看《3.1.3 GPIO boot overrides》确定BOOT_CFG1[4:0]对应的GPIO为LCD1_DATA04~00,设置这些引脚。

IMX6ULL有两个SD卡、TF卡接口,使用哪一个接口?请看下表:

a. 设置eFUSE的BOOT_CFG2[4:3]可以确定使用eSDHC1或eSDHC2,

或 b. 查看《3.1.3 GPIO boot overrides》确定BOOT_CFG2[4:3]对应的GPIO为LCD1_DATA12~11,设置这些引脚

万事开头难 - 介绍IMX6ULL启动方式_开发板_05


通过eFUSE或GPIO,还可以标明启动设备的更多参数,具体细节可以参考芯片手册《Chapter 5: Fusemap》,作为硬件开发人员需要去细细研究;作为软件开发人员,实际上只需要看开发板手册知道怎么设置启动开关即可。

1.1.2 IMX6ULL启动方式选择

100ASK_IMX6ULL开发板上的红色拨码开关用来设置启动方式、选择启动设备,支持这3种方式:EMMC启动、SD卡启动、USB烧写。

板子背后画有一个表格,表示这3种方式如何设置。

表格如下:

万事开头难 - 介绍IMX6ULL启动方式_编程语言_06


拔码开关中的SW3、SW4用来设置BOOT_MODE,ON表示0,OFF表示1。

所以当SW3、SW4设置为ON、OFF时,BOOT_MODE为0b10,将会使用SD卡、TF卡、EMMC等设备启动。

刚出厂的开发板中BT_FUSE_SEL默认为0,表示使用GPIO来设置参数。即使用LCD1_DATA07~05来选择启动设备。

100ASK_IMX6ULL开发板只支持SD/TF卡、EMMC启动,LCD1_DATA0705为0b010时选择SD/TF卡启动,LCD1_DATA0705为0b011时选择EMMC启动。

这两种启动设备对应的LCD1_DATA07~06的值相同,都是0b01,这在核心板上已经通过电阻设置好,我们只需要在拨码开关上设置SW1(对应LCD1_DATA05)就可以。

IMX6ULL上有2个EMMC Flash接口,也复用为2个SD/TF卡接口,通过LCD1_DATA12~11来选择接口。

0b00对应eSDHC1接口,0b01对应eSDHC2接口。LCD1_DATA12的值在核心板上已经通过电阻设置好。

LCD1_DATA11的值通过拨码开关SW2来设置:ON表示0,对应eSDHC1接口,100ASK_IMX6ULL的TF卡接口使用了eSDHC1接口;OFF表示1,对应eSDHC2接口,100ASK_IMX6ULL的EMMC接口使用了eSDHC2接口。

这3种启动方式的设置示意图如下:

万事开头难 - 介绍IMX6ULL启动方式_开发板_07


要注意的是,设置为USB启动时,不能插上SD卡、TF卡。刚出厂的板子在EMMC上烧写了系统,你可以设置为EMMC启动方式。

1.1.3 GPIO boot overrides

IMX6ULL中既可以通过eFUSE也可以通过GPIO来选择、设置启动设备,在手册里大部分场合只列出了eFUSE,对应的GPIO需要查表:IMX6ULL芯片手册《Chapter 8: System Boot》里的《GPIO boot overrides》。

我们把它摘录出来。

万事开头难 - 介绍IMX6ULL启动方式_linux_08

总结

整篇读下来,概念有点多,你可能会感觉有点抽象,其实现在不理解启动方式原理没关系,现在只要记住《3种启动方式的设置示意图》即可,清楚怎么拨码对应什么启动方式,原理留到后期再研究也行。


标签:启动,eFUSE,BOOT,万事开头难,设置,GPIO,IMX6ULL,设备
From: https://blog.51cto.com/weidongshan/6609522

相关文章

  • Linux系统驱动之编程_配置LCD控制器_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置LCD控制器_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULL......
  • Linux系统驱动之编程_配置引脚_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置引脚_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pd......
  • Linux系统驱动之分析内核自带的LCD驱动程序_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全分析内核自带的LCD驱动程序_基于IMX6ULL参考资料,GIT仓库里:IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLR......
  • 【调试笔记】韦东山:在100ASK_IMX6ULL板子上支持其他型号的屏幕
    论  坛:http://bbs.100ask.net/(学术答疑)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档在100ASK_IMX6ULL板子上支持其他型号的屏幕1.在100ASK_IMX6ULL底板上如何接其他厂家的屏幕很多学员有过STM32的学习经验,他们手上的开发板很多,LCD也很多。一个LCD还挺贵的,不能浪......
  • 全志 Linux 系统启动优化 启动优化速度方式 优化启动流程 优化uboot 优化kernel等
    文章目录1概述2启动速度优化简介2.1启动流程2.2测量方法2.2.1printktime2.2.2initcall_debug2.2.3bootgraph.2.2.4bootchart2.2.5gpio+示波器.2.2.6grabserial.2.3优化方法2.3.1boot0启动优化2.3.1.1非安全启动.2.3.1.2安全启动2.3.2uboot启动优化2.3.2.1完全去......
  • classfinal加密java代码并且启动
    maven插件方式配置参数解释: 参数说明-file加密的jar/war完整路径-packages加密的包名(可为空,多个用","分割)-libjarsjar/war包lib下要加密jar文件名(可为空,多个用","分割)-cfgfiles需要加密的配置文件,一般是classes目录下的yml或propertie......
  • 集群启动命令介绍
    常用的进程启动命令如下:一键启动YARN集群:$HADOOP_HOME/sbin/start-yarn.sh会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager会基于workers文件配置的主机启动NodeManager一键停止YARN集群:$HADOOP_HOME/sbin/stop-yarn.sh......
  • docker启动RabbitMQ以及常见问题解决
    docker启动MQ容器下载docker镜像dockersearchrabbitmqdockerpullrabbitmqdockerrun-d--hostnamemy-rabbit--namerabbit-p15672:15672-p5672:5672rabbitmq:latest启动容器后浏览器无法访问dockerexec-it3b124f0c9712/bin/bashrabbitmq-pluginsenab......
  • 基于嵌入式Tomcat的War包启动器
    前言最近针对java项目的部署方式进行整理,jenkins/tomcat/windows工具/linux脚本/web部署平台等等发现war包通过tomcat部署比较繁琐,等待时间长,配置规则复杂对于小白很不友好,也难以接入到自定义的部署工具/平台中之前开发的Jar包部署平台是servlet开发通过嵌入式tomcat部署,借此打......
  • 关于数据库启动失败
      今天在启动mysql连接DBearver的时候,发现MySQL的服务无法启动,一直报上图1中的错误,以管理员身份运行命令提示符的时候,出现上图2中的错误。 解决方案:1.找到Mysql安装路径,将data文件中的内容全部删除2.将my.ini文件中的路径改为:(\改成\\)#mysql-5.7.26-winx64的路径datad......