OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6308|回复: 2

STM32H750 QSPI 内存映射和分散加载的区别

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2020-4-13
在线时间
14 小时
发表于 2020-6-8 22:10:27 | 显示全部楼层 |阅读模式
3金钱
最近在学习stm32H750板子上的QSPI FLASH,在片内flash存放boot程序,然后设置QSPI flash为内存映射模式,然后跳转到QSPI flash执行用户程序。用户程序从0x90000000也就是QSPI FLash的起始地址开始执行,目前都是测试运行都正常了。但是有一个疑问希望原子哥能解惑一下。我这种做法是在boot里主动初始化了QSPI,然后进行跳转才能在qspi flash执行用户程序。但是北极星开发板上的很多例程都是通过分散加载文件把部分程序放在了qspi flash区。就比如最简单的跑马灯例程,工程里没有执行任何qspi初始化和设置相关的代码,为什么也能将程序放到qspi flash上运行。   那我用片内boot 片外应用程序的方法是不是多此一举,直接用分散加载文件就能达到同样的效果?
  1. #define m_stmflash_start                                0X08000000                //m_stmflash(STM32内部FLASH)域起始地址
  2. #define m_stmflash_size                                        0X20000                        //m_stmflash(STM32内部FLASH)大小,H750是128KB

  3. #define m_qspiflash_start                                0X90000000                //m_qspiflash(外扩QSPI FLASH)域起始地址
  4. #define m_qspiflash_size                                0X800000                //m_qspiflash(外扩QSPI FLASH)大小,W25Q64是8MB

  5. #define m_stmsram_start                                        0X24000000                //m_stmsram(STM32内部RAM)域起始地址,定义在D1,AXI SRAM
  6. #define m_stmsram_size                                        0X80000                        //m_stmsram(STM32内部RAM)大小,AXI SRAM共512KB

  7.   

  8. LR_m_stmflash m_stmflash_start m_stmflash_size {                //LR_m_stmflash加载域
  9.   ER_m_stmflash m_stmflash_start m_stmflash_size {                //ER_m_stmfalsh运行域,起始地址为:m_stmflash_start,大小为:m_stmflash_size
  10.     *.o (RESET, +First)                                                                        //优先(+FIRST)将RESET(中断向量表)段放这个域,实际上就是把中断向量表拷贝到m_stmflash_start
  11.                                                                                                                 //RESET是一个段名,表示中断向量表(在.s文件定义);+FIRST表示时第一个要加载的.
  12.         * (InRoot$Sections)                                                                //将所有的库段(C/C++标准库)放在root region.如__main.o,__scatter*.o等
  13.         * (Veneer$Code)
  14.         libinit.o
  15.         libinit2.o
  16.         libshutdown.o
  17.         libshutdown2.o
  18.         __rtentry.o
  19.         __rtentry2.o
  20.         __rtentry4.o
  21.         rtexit.o
  22.         rtexit2.o
  23.        
  24.         use_no_semi_2.o
  25.         heapauxi.o
  26.         use_no_semi.o
  27.         sys_stackheap_outer.o
  28.         exit.o
  29.         libspace.o
  30.         fpinit.o
  31.         lludivv7m.o
  32.         startup_stm32h750xx.o
  33.          
  34.         rt_locale_intlibspace.o  
  35.         lc_numeric_c.o
  36.         lc_ctype_c.o

  37.         startup_stm32h750xx.o
  38.         system_stm32h7xx.o
  39.         stm32h7xx_hal.o
  40.         stm32h7xx_hal_cortex.o
  41.         stm32h7xx_hal_rcc.o
  42.         stm32h7xx_hal_gpio.o
  43.         stm32h7xx_hal_msp.o
  44.        
  45.         main.o
  46.     sys.o
  47.         usart.o
  48.         delay.o
  49.   }
  50.   RW_m_stmsram m_stmsram_start m_stmsram_size {                        //RW_m_stmsram运行域,起始地址为:m_stmsram_start,大小为:m_stmsram_size.
  51.    .ANY (+RW +ZI)                                                                                //将所有用到的RAM都放在这个区域
  52.   }
  53. }

  54. LR_m_qspiflash m_qspiflash_start m_qspiflash_size {                //LR_m_qspiflash加载域
  55.    ER_m_qspiflash m_qspiflash_start m_qspiflash_size {        //ER_m_qspiflash加载域,起始地址为:m_qspiflash_start,大小为:m_qspiflash_size
  56.     .ANY (+RO)                                                                                         //将只读数据(+RO)放这个域,任意分配.相当于程序就是存放在这个域的.
  57.   }                                                                                                                         
  58. }
复制代码


最佳答案

查看完整内容[请看2#楼]

好吧,在时钟初始化函数中发现了把qspi设置成内存映射模式的代码
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2020-4-13
在线时间
14 小时
 楼主| 发表于 2020-6-8 22:10:28 | 显示全部楼层
好吧,在时钟初始化函数中发现了把qspi设置成内存映射模式的代码
回复

使用道具 举报

2

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2020-10-15
在线时间
33 小时
发表于 2023-2-15 08:43:03 | 显示全部楼层
您好,为何将APP程序下载到外部flash起始地址,调试的时候flash里面都是FF
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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