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

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

1.1 IMX6ULL 启动方式

参考资料:

开发板资料网盘

路径:

06_Datasheet(数据手册)

-> Core_board->CPU->IMX6ULLRM.pdf”

中《Chapter 8: System Boot》。

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种启动模式,如下图:

BOOT_MODE

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

原理图

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来选择不同的启动设备。

BOOT_CFG1设置

从上图可知,既可以使用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》,摘录如下。

Fusemap

当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,设置这些引脚

BOOT_CFG

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

1.1.2 IMX6ULL启动方式选择

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

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

表格如下:

表格

拔码开关中的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_DATA07~05为0b010时选择SD/TF卡启动,LCD1_DATA07~05为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种启动方式的设置示意图如下:

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

1.1.3 GPIO boot overrides

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

我们把它摘录出来。

总结

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

精品推荐

文中提到的100ask_imx6ull,是用来学习嵌入式Linux的不错选择,0利润,外设丰富,一千多页文档,一百多讲视频,开源共享。

韦东山 IMX6ULL和正点原子_万事开头难 - 介绍IMX6ULL启动方式相关推荐

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

    不同开发板,启动方式不一样,今天我们来介绍imx6ull开发板的启动方式,这非常重要.若不了解清楚启动方式,后面的所有开发工作便无从谈起. 本文摘自100ask_imx6ull 开发板 配套学习手册- ...

  2. idea 父文件_万事开头难!最新MyBatis程序配置教程(IDEA版)

    文章来源:万事开头难!最新MyBatis程序配置教程(IDEA版) 原文作者:Baret~H 来源平台:CSDN 实验环境:IDEA2020.1+MySQL8.0.21+Mybatis3.5.5+Ju ...

  3. 韦东山 IMX6ULL和正点原子_【调试笔记】韦东山:在100ASK_IMX6ULL板子上支持其他型号的屏幕...

    目录 1. 我担心这有点尴尬 2. 移植思路 3. 移植LCD驱动 3.1 确定LCD参数 3.2 修改设备树 3.3 完善驱动 4. 移植触摸屏驱动 4.1 确定触摸屏型号 4.2 在设备树中指定触 ...

  4. 韦东山 IMX6ULL和正点原子_正点原子Linux第五十七章Linux MISC驱动实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第五十七章Linux MISC驱动实验 misc的意思是 ...

  5. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十三章Linux设备树(一)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 前面章节中我们多次提到"设备树 ...

  6. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第四十四章设备树下的LED驱动实验...

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 上一章我们详细的讲解了设备树语法以及在驱 ...

  7. 韦东山 IMX6ULL和正点原子_「正点原子Linux连载」第十二章官方SDK移植试验

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第十二章官方SDK移植试验 在上一章中, ...

  8. 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三章 M ...

  9. 韦东山 IMX6ULL和正点原子_「正点原子FPGA连载」第十一章RGB LCD彩条显示(一)

    1)实验平台:正点原子达芬奇FPGA开发板 2) 摘自[正点原子]达芬奇之Microblaze 开发指南 3)购买链接:https://detail.tmall.com/item.htm?id=624 ...

最新文章

  1. java abort_Java中“...”的使用
  2. Java如何封装参数_java规范(一)------方法设计---返回多参数的方法怎么封装
  3. 160309_Qt Essentials
  4. 深度浅析:国民产业链两大泡沫
  5. 唐诗辑注 —— 辛夷坞、南园十三首、问六十九
  6. python neo4j_在Python中使用Neo4j的方法
  7. 格力手机2刷机 格力手机二代刷机 GREE G0215D刷机教程
  8. javascript代码混淆的原理
  9. 苹果id登陆不上去怎么回事_创建苹果id是出现请联络iTunes支持人员完成交易是怎么回事?...
  10. STAP旁瓣干扰抑制与干扰对抗仿真
  11. k2p H大老毛子 padavan 2月20日固件
  12. Excel表格中如何换行
  13. 非智能手机通信录备份并还原至Android智能手机方法
  14. 萌新扫盲2—双绞线的“一百米诅咒”
  15. R.Koo 改良后的分页类(主要是显示属性)
  16. php的表达爱意的一句代码,表达爱意的诗句(精选50句)
  17. 一步一步实现WPF透明化窗口
  18. 各种浏览器的内核是什么
  19. c# char unsigned_关于C ++:将unsigned char *复制到unsigned char *
  20. android代码修改mp3文件封面,从android中的mp3文件中提取专辑封面

热门文章

  1. postcss-pxtorem px转成rem 项目配置
  2. Python实现《谁说菜鸟不会数据分析(入门篇)》的案例
  3. php 判断是否ipv6,PHP功能使用正则表达式验证IPv4和IPv6
  4. Thymeleaf语法详解
  5. 后验概率与条件概率区别
  6. codemirror编辑html,CodeMirror的使用方法
  7. codeMirror 学习 重置编辑器 代码对比 一行格式化
  8. Selenium下载路径
  9. cxfreeze打包python2.7为exe可执行程序
  10. HPH写好的答题小程序怎么放到微信小游戏里,微信开发者工具