硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5518|回复: 4
收起左侧

[BOOT/IAP] STM32H7的系统BootLoader知识点研究整理(2020-02-17)

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117571
QQ
发表于 2020-2-17 14:43:11 | 显示全部楼层 |阅读模式
一、除了使用boot引脚控制运行系统BootLoader,也可以上电后跳转,跳转前注意以下问题:
(1)禁止所有外设时钟
(2)禁止使用的PLL
(3)禁止所有中断。
(4)清除所有中断挂起标志。

退出系统BootLoader的方法:
(1)退出boot激活条件,产生硬件复位。
(2)使用Go命令执行用户代码。

重要注意事项:
(1)如果使用Go命令,对于BootLoader中使用的硬件外设寄存器,跳转前是不会设置到复位值的,如果用户代码中恰好也用到这些寄存器,需要重新配置。这里要特别注意的是BootLoader会用到看门狗,并且喂狗时间设为最长了,如果用户代码里面要用到看门狗请根据需要重新配置,并且看门狗一旦开启是无法关闭的。
(2)对于具有双bank特性的STM32,为了能够从用户代码跳转到系统boot,需要将系统boot代码区使用寄存器SYSCFG重映射到0x0000 0000(除了STM32F7系列)。对于STM32F7系列,需要禁止nDBOOT / nDBANK 特性,然后跳转到系统boot区。
(3)如果用到系统bootl的DFU/USB接口,需要用到HSE时钟,这个时钟的频率是通过内部HSI/MSI检测出具体频率。因此,由于外部温度等各种情况,内部HSI的精度会受到影响,从而影响检测出来的HSE时钟有较大误差,最终导致DFU/CAN运行失败。



二、BootLoader的内存管理:

使用bootloader命令进行的所有写操作都只能对齐字(地址应该是4的倍数。 要写入的数据数量也必须是4的倍数(接受未对齐的半页写地址)。

1、有些产品不支持批量擦除操作。 使用BootLoader进行批量擦除时,有两个选项可用:
(1)使用扇区擦除命令一个一个删除。
(2)将保护级别设置为1,然后设置为0(使用读保护命令,然后使用读非保护命令),将导致大批量擦除操作。


2、STM32 L1和L0系列的Bootloader除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作Data Memeory(数据存储区,貌似是指的EEPROM)

数据存储区支持读写操作,而不支持擦除命令,如果要擦除,写0即可。另外对此存储区的写操作必须是4字节对齐(写的地址),并且写入的数据也是4的倍数。

3、F2, F4, F7 和 L4除了支持操作内部Flash,内部SRAM,可选字节等,还支持操作OTP存储区。仅支持读写操作,不支持擦除命令。

4、F2, F4 和 F7系列的内部Flash写格式依赖于供电电压范围,默认的写操作只支持字节(半字,字和双字是不支持的),为了增加些操作速度,用户施加足够的电压范围以允许写操作按半字,字或双字,并通过虚拟内存位置的boot程序更新此配置。该内存位置不是物理地址,但可以根据协议使用常规的BootLoader读/写操作。 该存储位置包含4个字节,分别为如下表所述。

1.png

1.png
2.png
3.png
4.png
6.png









回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117571
QQ
 楼主| 发表于 2020-2-18 09:19:23 | 显示全部楼层
更新完毕。
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2020-2-18 09:21:05 | 显示全部楼层
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2020-2-18 09:55:55

6

主题

68

回帖

86

积分

初级会员

积分
86
发表于 2024-9-8 12:39:50 | 显示全部楼层
你说的这些问题是对的,但是没有说到点上!

H7 最大的问题是 iCache 和DCache。这两点内容您只字未提
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117571
QQ
 楼主| 发表于 2024-9-8 15:28:50 | 显示全部楼层
casy99 发表于 2024-9-8 12:39
你说的这些问题是对的,但是没有说到点上!

H7 最大的问题是 iCache 和DCache。这两点内容您只字未提

Cache只有在多主控的数据一致性问题情况下才需要,其它情况均不需要管理。

之前做的, 全部是基于H7的,我这里没有数据一致性问题,所以全都不需要。

基于NAND,eMMC,SD卡和U盘的BootLoader实战,带CRC完整性校验(2022-06-16)
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=113053

【实战技能】单片机bootloader的CANFD,I2C,SPI和串口方式更新APP视频教程(2022-08-01)
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=114491


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-15 20:48 , Processed in 0.045706 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表