二、STM32MP1更新固件

STM32MP1更新固件方式

万事开头难,工欲善其事必先利其器,下面介绍2种给MP1更新固件的办法,一种是通过stm32提供的工具来烧录固件,另外一种是SD卡烧录固件方式。

使用STM32CubeProgrammer烧录固件

使用STM32CubeProgrammer这个软件来烧写系统是比较方便的,软件的安装教程可以查看各家参考文档,java依赖也需要安装。本文默认软件已经安装成功且可以正常使用。
烧录固件前开发板配置为USB启动(拨码开关为000),上电,otg接口的usb连接到电脑,然后打开STM32CubeProgrammer软件。
1.连接开发板
观察USB configuration下面的Port是否有usb出现(USB1),然后点击Connect连接开发板。
在这里插入图片描述
2.选择刷机配置文件
点击Open file打开选择的刷机配置文件,本文使用usb向emmc中烧录固件,故选择 E:\STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\08、系统镜像\02、出厂系统镜像\01、STM32CubeProg烧录固件包\flashlayout\atk_emmc-stm32mp157d-atk-qt.tsv文件
3.选择刷机镜像
点击界面上的Browse选择镜像所在的路径:本文是:E:\STM32资料\【正点原子】STM32MP157开发板(A盘)-基础资料\08、系统镜像\02、出厂系统镜像\01、STM32CubeProg烧录固件包
在这里插入图片描述
4.刷机
点击Download即可开始刷机,可以根据自己需要修改atk_emmc-stm32mp157d-atk-qt.tsv刷机配置文件,来选择刷某一单独镜像还是完整镜像。

使用SD卡烧录固件

a. 制作SD启动卡
Sd卡通过读卡器接入Ubuntu,sudo ./sdcard_update.sh /dev/sdb
b. 通过SD卡起来来烧录固件到emmc
从TF卡启动以后将要烧写到emmc的文件夹拷贝到开发板根文件系统下
./emmc_update.sh /dev/mmcblk2

通过先制作启动卡,然后从SD卡启动,将需要烧录的固件拷贝到根文件系统,再写入到emmc的分区中即可完成固件的烧录。下面看下sdcard_update.sh和emmc_update.sh两个脚本的关键内容:
sdcard_update.sh主要是通过dd命令将镜像烧录到sd卡对应山区然后对SD卡重分区

#将制作好的整个系统烧写到SD卡
dd if=./flashlayout_atk_sdcard-stm32mp157d-atk-qt.raw of=$device bs=1M conv=fdatasync status=progress
sync

sleep 1

echo "正在重定义分区大小..."
sgdisk -d 5 ${device}
sgdisk -a 1 -n 5:136226:0 -c 5:rootfs -t 5:8300 -u 5:e91c4e10-16e6-4c0e-bd0e-77becf4a3582 ${device}
sync
echo "SD卡启动系统烧录完成,请退出!"

emmc_update.sh脚本中类似,打开emmc的写权限以后使用dd命令烧录固件以后重新分区

echo "使能eMMC写flag"
echo 0 > /sys/class/block/mmcblk2boot0/force_ro
echo 0 > /sys/class/block/mmcblk2boot1/force_ro

echo "正在烧录tf-a,请稍候..."
execute "dd if=./tf-a/tf-a-stm32mp157d-atk-trusted.stm32 of=${device}boot0 conv=fsync"
execute "dd if=./tf-a/tf-a-stm32mp157d-atk-trusted.stm32 of=${device}boot1 conv=fsync"

echo "关闭eMMC写flag"
echo 1 > /sys/class/block/mmcblk2boot0/force_ro
echo 1 > /sys/class/block/mmcblk2boot1/force_ro
execute "mmc bootpart enable 1 1 ${device}"

echo "正在烧录bootfs和根文件系统,请稍候..."
execute "dd if=./atk_emmc-stm32mp157d-atk-qt.raw of=${device} bs=8M conv=sync status=progress"

echo "正在重定义分区大小..."
sgdisk -d 3 ${device}
sync
sgdisk -a 1 -n 3:136192:0 -c 3:rootfs -t 3:8300 -u 3:491f6117-415d-4f53-88c9-6e0de54deac6 ${device}
sync

echo "eMMC启动系统烧录完成!请拨码至010,从eMMC启动系统"

后续烧录固件都将采用SD烧录的方式。

STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 3)SRAM = 芯片内置的RAM区,就是内存啦。            在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。 BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。         在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。         在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。        因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。         根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载) ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 ————————————————
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值