|
本帖最后由 astankvai 于 2021-2-5 22:28 编辑
学习一款单片机, 首先要了解其启动流程以及存储器映射,但是, TKM在这方向的资料, 基本等于0。 于是分析代码:
1. BOOT引脚接地,该设置理解为 从 ROM启动
2. PA1 , 可以理解为: 当PA1为高电平时,从系统ROM启动(ROM的地址在芯片规格书中写的是 0x1FFF 0000- 0x1FFF 3FFF), 共16KB。 这个有点像ST的DFU, 内置的bootloader. 当PA1为0时,从用户程序启动(可以理解为通常所说的0地址). 但是,这里相当于浪费资源, 应该设计成根据boot脚的电平来进DFU boot还是跑其他用户应用。
3. PA13, 这个是一个自定义的bootloader使用的检测入口, 当该引脚为高电平时, 停留在boot中(这个usb boot是在用户程序空间的,占用用户程序空间). 这个boot不是必须的。 用户可以自己编写。
4. QSPI. 从规格书可以看到, QSPI 没有提到映射到程序存储空间,是copy代码到ram执行还是XIP, 这个我们不知道。 但是, 从下载工程的配置以及下载算法可以分析出, QSPI 被映射到程序存储空间 0x70020000, 长度2MB. 如果使用大容量SPI NOR, 估计可能会有问题,用QSPI访问没有问题,但是映射空间方式可能访问不了。 更新:看了程序, 0x70020000是 SDRAM的起始地址, 由此看来,程序是从spi nor中被copy到sdram中,然后在ram执行的。
5. 中断向量的重映射。 如果自己写bootloader,这个是必须要关心的, 但是规格书没有提到相关的信息。 示例程序一开始就有一个RemapInterrupt函数, 这个就是中断向量的重映射,可以分析map文件。 SCB->VTOR = 0;
SCB->VTOR |= 0x1<<29; 示例代码有相关程序, 但是规格书或是TRM中, 没有任何相关信息。
6. SRAM。 从程序 看,起始地址是0x2000 0000, 大小未知。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|