【北京迅为】《STM32MP157开发板使用手册》-第七章 设置启动模式(必看)

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第三部分 开发板固件烧写

第七章 设置启动模式(必看)

7.1 uboot模式

在确认电源、串口控制台等连接好以后,按下开发板上的开关按键,启动开发板,串口控制台会打印 u-boot 启动信息(用户手册第六章有串口软件以及串口控制台软件的安装和使用方法)。读秒的过程中如果输入任何值,将进入uboot 模式,在 PC 的串口上可以看到类似下图所示的系统启动的信息。为了和 Ubuntu、Win7 的命令行区分,在文档的后面,我们统一将“在超级终端的命令行里面输入命令”的过程叫做“进入超级终端的 uboot 模式,输入命令”。

7.2 设置拨码开关 

STM32MP157 有三个 BOOT 引脚:BOOT0~BOOT2,这三个 BOOT 引脚通过拉高/拉低来设置从哪种设备启动,虽然在实物图上我们设置了四位开关,但实际上只有三位拨码开关,分别为SW1、SW2、SW3,当拨码开关拨到on,开关导通,对应的BOOT被3.3V电压拉高,显示状态为1,相反当拨码开关拨到off,开关断开,对应的BOOT被拉低,显示状态为0。

下面为STM32MP157我们以后要用到的三种状态:

拨码开关编号

1

2

3

4

EMMC 启动

0

1

0

0

USB 烧写

0

0

0 

0

TF卡启动

1

0

1

0

7.3 镜像说明

我们以最小系统的镜像为例,来讲镜像之中每一个文件的作用。镜像文件的文件树如下图所示:

7.3.1 tsv配置文件

首先要讲解的是.tsv配置文件,该文件是STM32CubeProgrammer 脚本文件,确定要烧写到 EMMC 和TF卡的哪个地址区域存放路径如下图所示

我们以EMMC的配置文件为例,使用命令“vim emmc.tsv”进入该文件,可以看到该文件的格式如下图,每一个内容间隔为一个TAB键,建议大家以后在修改的时候在我们写好的基础上直接改,以免格式出错,或者使用文本编辑软件来辅助修改。 

下面我们将对每一个字段进行详细的讲解,所参考的官方文档连接如下 https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32CubeProgrammer_flashlayout 

字段

字段对应的作用

Opt

选项字段

Id

会根据这个 id 来决定烧写分区

Name

分区名字

Type

制定烧写的类型,仅 uboot 使用。

Device

指定烧写的设备类型与编号

Offset

分区的起始位置

Binary

要烧录的文件

  1. Opt字段

Opt 是第一个项,此选项通过‘-’、‘P’、‘D’和‘E’这四个字符定义操作方法.

‘-’:none,也就是空选项,分区或者设备无需修改,如果 Device 域为 none,那么 Opt 强制为‘-’。

‘P’:向分区或者设备烧写固件。

‘E’:空分区或设备,表示对应的分区或设备不更新,相关的 Id 项会被跳过。

‘D’:删除分区或设备。

允许的组合选项如下所

‘-’:空选型。

‘P’:更新分区或设备,也就是向分区或设备烧写固件。

‘PE’:不更新,也就是指定某个分区或者设备不需要烧写固件,这样我们就可以单独 只更新 tf-a、uboot、kernel 或者 rootfs。

‘PD’:删除并更新,也可以写作 DP。

‘PDE’:删除并且保持为空,也可以写作 PED/DPE/DEP/EPD/EDP。

  1. Id字段

STM32CubeProgrammer 通过 Id 域来确定烧写方法,会通过 Id 域来识别下一个要烧写到设备里面的二进制文件:

ROM 或者 FSBL:二进制文件要加载到 RAM 中

SSBL(uboot):二进制文件要烧写到 Flash 中。

范围

分区

0x01~0x0F

带有 STM32 头部信息的 Boot 分区,如 SSBL、FSBL、其他(TEE 或 M4 固件)

0x10~0xF0

不带头部的用户编程分区,如 uiamge、dtb、rootfs、vendorfs、userfs

 其中 0X01 和 0X03 这两个 ID 是给 FSBL 和 SSBL 留着的,它们会被加载到 RAM 中。一些默认的 Id 含义如下表所示:

Id

分区

0x00

内部使用,用户不能使用此 ID!

0x01

FSBL(第一阶段拷贝),ROM 代码使用,会加载到 RAM 中

0x03

SSBL,FSBL 使用,加载到 RAM 中

0xF1~0xFD

虚拟分区,内部使用

0xF1

命令获取阶段。

0xF2

OTP

0xF3

SSP

0xF4

PMIC NVM

0xFE

操作结束

0xFF

复位

  1. Name字段

这是一个字符串描述符,它指示目标存储段

  1. Type字段
  2. GPT

    MTD

    类型

    SD卡

    e • MMC

    NAND闪存

    NOR闪存

    内存

    Binary

    X

    X

    X

    X

    X

    Binary(N)

    文件

    FileSystem

    X

    X

    X

    X

    dtb

    System

    x

    x

    UBI

    UBI

    kernel

    Rawimage

    X

    user data

    X

    X

由于我们的开发板的存储为EMMC类型,所以我们只在下面列出了EMMC 下的 Type 域含义:

Binary:原始的二进制文件。

FileSystem:linux 文件系统,为 ext2/ext4/fat 格式。

System:Linux 内核。

  1. Device字段

Device 域指定 Uboot 设备树定义的设备和索引(从 0 开始),不同的设备其设备名字和索引不同。我们只是列出了EMMC的设备和索引。

mmc+索引:如 mmc0、mmc1、mmc2 等,对应 SD 卡或 EMMC。比如 SD 卡和 EMMC分别接到 MP1 的 SDMMC1 和 SDMMC2 接口上,那么 SD 卡和 EMMC 分别为 mmc0 和 mmc1。

  1. Offset字段 

Offset 就是偏移,支持的值如下:

boot1:EMMC 的第一个启动区域分区。

boot2:EMMC 的第二个启动区域分区。

  数字:具体的偏移值,单位为字节。

(7)Binary字段 

也就是我们要烧写到开发板的二进制文件。

7.3.2 tf-a镜像文件

如下图所示,烧写会用到两个tf-a的二进制文件,这里的tf-a镜像文件是由TF-A的源码编译来的,具体的编译过程请查看“第十一章 编译TF-A”。

 

tf-a-stm32mp157a-itop-serialboot.stm32文件在使用STM32CubeProgrammer进行USB烧写的时候起作用,而tf-a-stm32mp157a-itop-trusted.stm32文件才是真正要烧写到EMMC的文件。

7.3.3 u-boot.stm32

 

可以看到这里存在三个u-boot镜像,这三个uboot的作用是不一样的,就和上一小节之中的tf-a文件相同,在otg-uboot.stm32文件是用来进行辅助烧写的,而tf_u-boot.stm32文件和emmc_u-boot.stm32文件是真正烧写到TF卡和emmc里面的,这三个uboot文件不能搞乱,如果我们以后对uboot源码进行了修改,那么只需要将修改后编译出来的u-boot.stm文件替换掉uboot目录下对应的镜像即可。具体的uboot编译对应的章节为“第十二章 编译uboot”。

7.3.4 bootfs.ext4

 

bootfs.ext4文件存放的是内核和设备树,即uImage文件和.dtb文件。具体设备树和内核的编译以及.ext4文件的制作在“第十二章 编译Linux内核”。 

7.3.5 rootfs.ext4 

 rootfs.ext4对应的为文件系统,文件系统的制作可以参考“第十五章 制作最小Linux系统”。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值