1 .怎么理解常说的“可以用单片机的norflash执行代码”这句话?
CPU取值、解码并执行。
的哪些媒体可以运行程序,实际上就是CPU可以从那里获取指示,供以后解码和运行。
2 .单片机一般用内部norfalsh执行代码
Soc读取内部的NorFlash时可以进行总线访问,这对于Soc来说更方便,从Soc直接用地址方式进行访问,而且NorFlash不需要初始化,定时很简单。
PS:NAND闪存接口的管理很复杂,需要专用的控制器。
3 .单片机内部的norflash中执行代码面临的困境
在用ST制作GUI界面时,最大的问题是芯片内部的flash最多只有2米。 在现在的时代,2米也放不下几张照片。
如果讨厌你的单片机的norflash不够大呢? 因为不管你换到多么大的单片机norflash都没什么大不了的:
在方案1.ST中,使用添加到M7内核芯片的QSPI控制器,使用户可以将代码放置在外部存储器上并当场执行。
方案2 .使用SDRAM将代码运送到SDRAM内执行。
与场景1对应的方式称为XIP。
与方案2对应的方式称为BootROM,顾名思义,是从ROM向RAM输送代码并执行的,所以称为BootROM。
4. norflash不够的解决方案1 -- XIP
(1) .使用外部闪存(外部QSPI或FMC-NOR闪存)“当场执行”。
)2) .用户APP的代码必须链接到目标的执行内存地址(外部QSPI或FMC-NOR闪存)。
(3) .需要内存映射支持
上述(1)意味着XiP可以直接在外部闪存中执行代码,称为“就地”,使得芯片可以直接在内部flash的地址0x0800 0000上执行。
上述)2)表示在编译用户APP应用程序的代码时,将链接目标更改为外部闪存的地址。 例如,如果STM32 H7系统在系统总线上为QSPI Flash分配的地址为0x9000 0000,则代码的地址将更改为0x9000 0000。
XIP模型的操作流程
XiP的启动方法实际上利用了引导加载器。 该引导加载器显示了一种非常不同的方法,即将qspi闪存映射到名为系统总线0x9000 0000的地址。
映射后,访问0x9000 0000地址时,系统总线会自动去读取QSPI FLASH 0地址的数据。 这个时候自动去读!
例如,uint32_ttemp=*(uint32_t* )0x90000000 )可以直接获取QSPI FLASH的第0到第3个地址数据。
映射完成后,关闭所有中断和缓存,然后跳转到用户程序的运行。
通过利用STM32H7的QSPI、XIP方式,可以在W25QXX系列芯片内运行程序。
5 . norflash不足的解决方案2 -- BootROM
(1) .从闪存启动,配置外部RAM存储器(SDRAM或SRAM ),
首先,将用户APP应用程序的二进制文件(sd卡或SPI -闪存)从闪存复制到外部SDRAM或外部SRAM,然后跳转到用户APP应用程序并执行。
)2) .用户APP的代码应链接到目标的执行内存地址(外部SDRAM或SRAM )。
该模型是通用的,适用于FMC能够驱动外部RAM的所有ST芯片。 当然链接地址一定是外部RAM存储器的地址。 关于闪存,可以是任何存储器,也可以是SPI闪存、TF卡、I2C存储器。
例如,STM32f407ZGSRAM(32MB ) TF卡将程序编译成二进制文件并放入TF卡中。 每次将新程序更新为TF卡时,要运行的程序都会更新。 感觉就像用Linux TF卡启动一样。