i.mx6ull 裸机开发 ----第七章

I.MX6ULL开发板

启动模式设置步骤

  1. 三大模式

    • 熔丝:烧录一次,发布产品
    • 外部:USB、串口等
    • 内部:SD卡、eMMC、NAND
    设置方法:

    (BOOT_MODE0\BOOT_MODE1 )

  2. 内部介质

  • SD
  • eMMC
  • Nand
    设置方法:
    BT_CFG1[4:7]
  1. 接口编号

    设置方法:

    BOOT_CFG2[3]

  2. 介质属性

  • SD/eMMC:位宽(BT_CFG2[5] )

2. I.MX6ULL镜像文件分析(类似于单片机的bootloaer)

开发板启动分析:首先自带的boot ROM程序会读取外部存储器中的IVT表与DCD数据,获取Boot data数据与DCD数据,就知道了内存的信息与时钟等硬件寄存器信息,与镜像加载的地址与大小,便把外部存储器的镜像加载到内存中。

boot ROM程序:存在与芯片内部得一段代码

选择内部启动方式,启动boot ROM程序

  • 初始化时钟、外部DDR3
  • 从外部存储介质加载代码

1. 五要素,

  • 空偏移:就是外部存储器并不是从00000开始的,会有一定的偏移
    • 芯片厂商设定
  • Image vector table,简称IVT
    • 关键数据位置
  • Boot data:启动数据
    • 镜像加载地址、大小
  • Device configuration data:简称DCD
    • 保存关键外设的寄存器配置信息(时钟、DDR3相关)
  • bin文件
    • 真正程序文件
8.7.1 Image Vector Table and Boot Data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iLAU0nu6-1616986570694)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704091452248.png)]

(1)空偏移

镜像不是从介质头部开始存储的,不同介质分别对应一段偏移地址

8.7.1 Image Vector Table and Boot Data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLwSDwMM-1616986570695)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704092110555.png)]

  • Boot Device Type:不同启动介质
  • Image Vector Table Offset :镜像有效数据偏移位置
  • Initial Load Region Size:boot rom程序读取程序大小
(2)IVT表

记录关键数据的位置

8.7.1.1 Image vector table structure

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LwYEZNY-1616986570696)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704093152444.png)]

  • header:IVT的长度、大小
  • entry:程序运行地址
  • dcd:内存中DCD数据地址
  • boot data:内存中boot data地址
  • self:内存中IVT自己所在地址
(3)Boot data

记录"镜像"在内存中的加载地址和大小

8.7.1.2 Boot data structure

[外图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnqPeKdL-1616986570697)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704094321719.png)]

  • start:镜像在内存中的加载地址,包括空偏移
  • length:镜像长度,包括空偏移
(4)DCD表

外设寄存器配置信息,初始化关键外设

8.7.2 Device Configuration Data (DCD)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCtaenNo-1616986570698)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100124427.png)]

  • Header:记录DCD大小、版本
  • CMD:寄存器初始化列表
Table 8-28. Write data command format

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-roqfr3AT-1616986570699)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100650049.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MMfOUsCw-1616986570700)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200704100705185.png)]

  • Tag:DCD命令,一般为写寄存器
  • Length:表示命令的大小
  • Parameter:设置写寄存器方式(写值/清位/设置位)
  • Address:寄存器地址,主要是时钟、DDR3相关外设地址
  • Value:具体置

3. SDK方式烧录镜像

1. 获取NXP官方SDK

  • 官方网站:
    https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/i-mx-applications-processors/i-mx-6-processors/i-mx-6ull-single-core-processor-with-arm-cortex-a7-core:i.MX6ULL?&tab=Design_Tools_Tab&
  • 野火大学堂
    Linux系统开发板->i.MX 6ul系列开发板->基本资料->
    embed_linux_tutorial\base_code\bare_metal\sdk_nxp

2. Linux安装SDK

./XXX.run

3. SDK中镜像相关工具

(1)说明文档

tools\imgutil\readme.txt

(2)使用要点

tool/imgutil

  • 复制bin文件到imgutil/evkmcimx6ull文件下,并重命名为sdk20-app.bin
  • 执行编译命令,得到img文件
    • flash:mkimage.sh flash
    • sd:mkimage.sh sd

4. mkimage.sh

  • 根据dcd.config文件,由dcdgen.bin程序生成DCD表
  • imgutil.bin程序生成img可烧录镜像

5. 野火烧录工具

embed_linux_tutorial\base_code\bare_metal\download-tool

4.ARM-V7架构

1. 运行模式

  • User(USR):用户模式
    linux系统用户进程,资源访问受限

  • System(SYS):系统模式
    linux内核就是运行在系统模式下面的:共用寄存器,资源自由访问

  • IRQ:一般中断模式
    硬件产生中断信号

  • FIQ:快速中断模式
    时间紧急的中断,高速信号的传输、采集

  • Supervisor(SVC):管理模式
    默认模式,系统初始化,软中断

  • Abort(ABT):数据访问终止模式
    非法访问地址或寄存器、段错误

  • Undef(UND):未定义指令模式
    程序跑飞、篡改

  • Monitor:用于用户安全扩展模式

  • Hyp :用于虚拟化扩展

2. 寄存器组

通用寄存器
  • r0~r3:用来传递函数参数、暂存数据
  • r4~r11:用来保存被调函数的局部变量、暂存数据 (放在寄存器的值速度要更快一些)
  • r12:记录函数调用过程中上一次sp指针的值
  • r13(sp):函数堆栈寄存器(指向堆栈的指针)
  • r14(lr):记录函数返回地址(比如在执行完中断后,要再执行之前的程序,这就保存了函数的返回地址)
  • r15(pc):程序计数器(就是指向程序指令的指针,指向谁,就执行相对应的指令)
程序状态寄存器
  • cpsr:该寄存器包含运算标志位(比如加减时候需要进位等)、中断禁止位、当前运行模式标志(就是记录当前CPU的状态,比如用户模式、系统模式)等一些状态位以及一些控制位
  • spsr:发生异常切换模式时,将cpsr复制到发生异常的模式下的spsr(就是程序状态复制寄存器)
系统寄存器

cp15协处理器:内存、缓存、中断等

5. VSCode编辑器

1. 启动

code

2. 使用特点

  • 无需新建项目,直接打开文件夹
  • 不同目录下的文件夹,可保存在工作区
  • 默认预览模式

3.推荐插件

  • c/c++:函数跳转、自动补全
  • Chinese:中文
  • material theme UI
  • CodeSpell Checker:拼写检查
  • Bracket Pair Colorizer:括号着色器
  • rainbow-highlighter:变量彩虹高光
    • shift + alt + z
    • shift + alt + a

4. 高效工作

  • 移动光标到行首:home
  • 移动光标到行尾:end
  • 跳转文档头部:ctrl+home
  • 跳转文档尾部:ctrl+end
  • 花括号跳转:ctrl+shift+\
  • 文件跳转:ctrl+p
  • 行跳转:ctrl+g
  • 批量修改:F2

版权声明:本文为qq_35713188原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。