通常在系统开发完成或测试时,需要将编译好的新版本U-Boot, Linux kernel和文件系统写入到Flash存储芯片内,我们称之为系统更新。PanGu开发板提供了两种系统更新的方法,USB方法和SD卡方法。

 

PanGu开发板上支持多种启动模式和设备启动选择,由SW1来控制。SW1是一个三位拨码开关,可支持选择从QSPI Flash、eMMC、SD其中一种设备来启动。
PanGu开发板通过Boot Switch(SW1)拨码开关来选择STM32MP157芯片工作的模式。

Boot ModeBit1Bit2Bit3
Micro SD CardONOFFON
eMMCOFFONOFF
QSPI FlashONOFFOFF
USB updateOFFOFFOFF

SD卡更新

PanGu开发板支持从Micro SD卡来更新Linux系统到板载的eMMC存储器。
SD卡更新步骤

  1. 切换开发板启动拨码(SW1)到SD Card启动方式

  2. 插入可启动的更新系统SD Card

  3. 插入电源后,自动启动并开始烧写

 

Linux系统下制作SD更新卡
使用以下命令把PanGu-SDCardUpdate-qt5-20190719200733.img.gz文件写入到Micro SD卡,Micro SD卡的容量建议大于8GB最佳。

gzip -dc PanGu-SDCardUpdate-qt5-20190719200733.img.gz | sudo dd of=/dev/sdb bs=10M conv=fdatasync status=progress

Windows操作系统使用USB Image Tool工具来将img.gz文件写入SD卡
切换设备启动模式(SW1)为Micro SD启动方式,连接好电源后,PanGu开发板会从Micro SD卡的系统来启动,并自动完成更新操作,更新成功后LED D17会常亮。如果失败,LED D16和D17都会熄灭。
更新成功后,拔出SD卡,切换设备启动模式(SW1)为eMMC启动。

USB更新

由于STM32CubeProgrammer在Windows平台下使用时,烧写速度会非常慢,建议使用Linux系统下来烧写。
我们测试到在Windows下烧写时间在20分钟左右,Linux下烧写时间在5分钟左右,仅供参考!

PanGu开发板使用USB方式更新系统到板载的eMMC存储器内。
更新的准备工作

  1. 切换启动拨码(SW1)至USB udpate模式

  2. 需要使用Micro USB数据线,连接PanGu开发板的USB OTG接口(J5),另一端连接PC的USB Host接口

  3. 安装并启动STM32CubeProg软件工具来烧写系统

STM32CubeProg虽然有图形界面,但也支持命令行来烧写。

安装STM32CubeProg烧写工具

在PanGu目录内下载好STM32CubeProg软件,解压并安装。

$ cd $HOME/PanGu
$ mkdir STM32CubeProgrammer
$ cd STM32CubeProgrammer
$ unzip SetupSTM32CubeProgrammer.zip
$ ./SetupSTM32CubeProgrammer-2.0.0.linux

接下来根据提示按选择安装即可,默认安装在当前用户的家目录下,$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer。
为了使用方便,可以把STM32CubeProgrammer的程序目录配置为PATH变量。

$ export PATH=$PATH:$HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin

可以查看版本来确认配置是否配置正确。

$ STM32_Programmer_CLI --version
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.0.0
      -------------------------------------------------------------------

STM32CubeProgrammer version: 2.0.0

这里显示版本为2.0.0,说明PATH配置正确,这样我们就可以直接输入命令来使用,而不用每次都需要敲命令的路径。

Linux下由于USB设备权限的原因,需要配置下udev,STM32CubeProgrammer里面有udev配置文件,可以让系统允许普通模式访问PanGu的USB烧写模式。

sudo cp $HOME/STMicroelectronics/STM32Cube/STM32CubeProgrammer/Drivers/rules/50-usb-conf.rules /etc/udev/rules.d/
sudo service udev restart
sudo udevadm control --reload

Linux系统下烧写

下面以Linux下烧写为例,Windows的程序名称是STM32_Programmer_CLI.exe。
烧写前,需要先把PanGu开发板的设备启动模式切换为USB update模式。
查看USB设备是否识别正常。

$ STM32_Programmer_CLI -l usb
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.0.0
      -------------------------------------------------------------------

=====  DFU Interface   =====

Total number of available STM32 device in DFU mode: 1

  Device Index           : USB1
  USB Bus Number         : 001
  USB Address Number     : 001
  Product ID             : DFU in HS Mode @Device ID /0x500, @Revision ID /0x0000
  Serial number          : 003B00323438510238333630
  Firmware version       : 0x0110
  Device ID              : 0x0500

然后,使用提供的烧写包,使用cd命令切换到烧写包目录下,执行烧写命令,并等待烧写完成。

STM32_Programmer_CLI -c port=usb1 -w flashlayout_i2som-image-weston/FlashLayout_emmc_stm32mp157a-panguboard-basic.tsv

烧写完成后,切换设备启动模式(SW1)为eMMC方式,重新上电后,PanGu开发板就从板载的eMMC存储器启动了。

macOS系统下烧写

/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI -c port=usb1 -w flashlayout_i2som-image-weston/FlashLayout_emmc_stm32mp157a-panguboard-basic.tsv

 

eMMC的分区结构如下:

分区名eMMC分区分区格式内容
fsbl1mmcblk1boot0RAWu-boot-spl.stm32
fsbl2mmcblk1boot1RAWu-boot-spl.stm32
ssblmmcblk1RAWu-boot.img
bootfsmmcblk1p4Ext4bootfs.ext4
vendorfsmmcblk1p5Ext4vendorfs.ext4
rootfsmmcblk1p6Ext4rootfs.ext4
userfsmmcblk1p7Ext4userfs.ext4

烧写原理

USB烧写时,使用的配置文件是flashlayout_i2som-image-weston/FlashLayout_emmc_stm32mp157a-panguboard-basic.tsv。配置文件中规定了烧写文件和设备分区地址信息。配置文件内容如下:

#Opt	Id	Name	Type	IP	Offset	Binary
-	0x01	fsbl1-boot	Binary	none	0x0	tf-a-stm32mp157a-panguboard-trusted.stm32
-	0x03	ssbl-boot	Binary	none	0x0	u-boot-stm32mp157a-panguboard-trusted.stm32
P	0x04	fsbl1	Binary	mmc1	boot1	u-boot-spl.stm32-stm32mp157a-panguboard-basic
P	0x05	fsbl2	Binary	mmc1	boot2	u-boot-spl.stm32-stm32mp157a-panguboard-basic
P	0x06	ssbl	Binary	mmc1	0x00080000	u-boot-stm32mp157a-panguboard-basic.img
P	0x21	bootfs	System	mmc1	0x00280000	st-image-bootfs-openstlinux-weston-pangu-20190722120938.bootfs.ext4
P	0x22	vendorfs	FileSystem	mmc1	0x04280000	st-image-vendorfs-openstlinux-weston-pangu-20190722120938.vendorfs.ext4
P	0x23	rootfs	FileSystem	mmc1	0x05280000	i2som-image-weston-openstlinux-weston-pangu-20190722120938.rootfs.ext4
P	0x24	userfs	FileSystem	mmc1	0x34100000	st-image-userfs-openstlinux-weston-pangu-20190722120938.userfs.ext4

配置文件共有7列,Binary代表目标烧写文件,对应的文件如下:

文件名说明替换说明
u-boot-spl.stm32-stm32mp157a-panguboard-basicU-Boot SPLU-Boot有修改或重新编译
u-boot-stm32mp157a-panguboard-basic.imgU-Boot imageU-Boot有修改或重新编译
st-image-bootfs-openstlinux-weston-pangu-20190722120938.bootfs.ext4存放kernel image, DeviceTree文件启动文件Yocto编译后的新文件
st-image-vendorfs-openstlinux-weston-pangu-20190722120938.vendorfs.ext4存放第三方库文件Yocto编译后的新文件
i2som-image-weston-openstlinux-weston-pangu-20190722120938.rootfs.ext4i2som-image-weston系统的根目录文件Yocto编译后的新文件
st-image-userfs-openstlinux-weston-pangu-20190722120938.userfs.ext4存放用户应用程序Yocto编译后的新文件
作者:SteveChen  创建时间:2024-09-18 11:51
最后编辑:SteveChen  更新时间:2024-09-18 11:52
上一篇:
下一篇: