【ART-PI】使用STM32H750的隐藏2MB ROM

  • 一:KEIL MDK开发环境
  • 二:RT-Thread Studio开发环境

ART-PI使用的主控MCU为STM32H750XBH6,官方芯片手册介绍该MCU片内FLASH只有128KB,但是实测2MB均可正常使用,该2MB内存自测或者学习可以使用,但产品开发不建议使用,毕竟官方未说明这部分,可能存在稳定性或者其他问题,以下介绍下如何在RT-Thread Studio与KEIL MDK开发环境下使用这2MB FLASH。

一:KEIL MDK开发环境

KEIL MDK开发环境下配置比较简单的一种方法是将芯片类型更改为STM322H742系列,或者采用一下方法:

Step 1:将Option->Target中的IROM1大小改为2MB(0x200000)

Step 2:将Option->Linker配置成下图所示,使用自定义分散加载link.sct

Step 3:编辑link.sct文件,如下:

LR_IROM1 0x08000000 0x00200000  ; load region size_region
{    ;On chip flash, defined as 128 KB, but actual up to 2MBER_IROM1 0x08000000 0x00200000  ; load address = execution address{  *.o (RESET, +First)*(InRoot$$Sections).ANY (+RO).ANY (+XO)}; RW data -> 128KB DTCMRW_IRAM1 0x20000000 0x00020000  {.ANY (+RW +ZI)*(.DTCM) }; RW data -> 512KB AXI SRAMRW_IRAM2 0x24000000 0x00080000  {.ANY (+RW +ZI);*(.RAM_D1) }; RW data -> 288KB = 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)RW_IRAM3 0x30000000 0x00048000  {  *(.RAM_D2)}; RW data -> 64KB SRAM4(0x38000000)RW_IRAM4 0x38000000 0x00010000  {  *(.RAM_D3)}
}

Step 4:添加下载算法,这里选择STM32H7x_2048,保存配置

Step 5:编译下载,可以看到,实际代码已经超出128KB,但软件能够正常下载且正常运行!

linking...
Program Size: Code=399814 RO-data=21238 RW-data=107380 ZI-data=79584
".\Obj\tool_box.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:05
Load "D:\\Firmware_STM32\\project\\Obj\\tool_box.axf"
Erase Done.
Programming Done.
Verify OK.
Application running ...
Flash Load finished at 11:40:34

二:RT-Thread Studio开发环境

Step 1:建立RT-Thread工程这里不叙述,默认你已经建立并打开了RT-Thread Studio建立的工程,编译后下载,此时下载是没问题的,因为默认下载到了外部8MB的QSPI FLASH中,要使用内部2MBFLASH运行软件,我们需要将代码下载到内部FLASH并且在内部FLASH运行。

Step 2:修改配置,将代码下载到内部FLASH,首先打开link.lds(在board\linker_scripts\STM32H750XBHx目录),修改存储区域如下:
RT-Thread Studio下修改link.lds:直接修改或者添加存储区域即可。

文本模式下修改link.lds:

MEMORY
{
ROM (rx) : ORIGIN =0x8000000,LENGTH =2048k
RAM (rw) : ORIGIN =0x24000000,LENGTH =512k
RxDecripSection (rw) : ORIGIN =0x30040000,LENGTH =32k
TxDecripSection (rw) : ORIGIN =0x30040060,LENGTH =32k
RxArraySection (rw) : ORIGIN =0x30040200,LENGTH =32k
DTCM (rw) : ORIGIN =0x20000000,LENGTH =128k
SRAM12 (rw) : ORIGIN =0x30000000,LENGTH =256k
SRAM4 (rw) : ORIGIN =0x38000000,LENGTH =64k
}

此时我们编译下载,会发现下载失败了,原因是使用STM32CubeProgrammer下载时,FLASH操作超区了,输出日志如下:

      -------------------------------------------------------------------STM32CubeProgrammer v2.7.0-RC1                  -------------------------------------------------------------------
Warning: The external loader file does not exist:
mode=normal
ST-LINK SN  : 066CFF554957886687083011
ST-LINK FW  : V2J37M26
Board       : --
Voltage     : 3.29V
SWD freq    : 4000 KHz
Connect mode: Normal
Reset mode  : Software reset
Device ID   : 0x450
Revision ID : Rev V
Device name : STM32H7xx
Flash size  : 128 KBytes
Device type : MCU
Device CPU  : Cortex-M7
Memory Programming ...
Opening and parsing file: rtthread.elfFile          : rtthread.elfSize          : 488772 BytesAddress       : 0x08000000
Erasing memory corresponding to segment 0:
Error: Operation exceeds memory limits  //这里FLASH操作超区导致FLASH操作失败
Error: failed to erase memory
Error: Unable to reset MCU!

因此要将代码下载进去,我们得修改STM32CubeProgrammer 的配置参数了,接下来我们就来更改STM32CubeProgrammer 配置参数。

Step 3:更改STM32CubeProgrammer 配置参数,解除H750的128KB下载限制
首先我们文本方式打开ST-LINK_Debugger\1.6.0\tools\Data_Base目录下的STM32_Prog_DB_0x450.xml,找到以下代码段,将内部FLASH的128KB 0x20000改为2MB 0x200000,然后保存退出。

            <!-- Embedded Flash --><Peripheral><Name>Embedded Flash</Name><Type>Storage</Type><Description>The Flash memory interface manages CPU AHB I-Code and D-Code accesses to the Flash memory. It implements the erase and program Flash memory operations and the read and write protection mechanisms</Description><ErasedValue>0xFF</ErasedValue><Access>RWE</Access><FlashSize address="0x1FF1E880" default="0x200000"/><!-- 2MB Dual Bank --><Configuration config="0,1,2,3"><Parameters address="0x08000000" name="2 MBytes Dual Bank Embedded Flash" size="0x200000"/><Description/><Organization>Dual</Organization><Allignement>0x20</Allignement><Bank name="Bank 1"><Field><Parameters address="0x08000000" name="sector0" occurence="0x8" size="0x20000"/></Field></Bank><Bank name="Bank 2"><Field><Parameters address="0x08100000" name="sector8" occurence="0x8" size="0x20000"/></Field></Bank></Configuration><!-- RomLess 128KB --><Configuration config="4,5,6,7"><Parameters address="0x08000000" name="RomLess 128 KB Embedded Flash" size="0x200000"/><Description/><Organization>Single</Organization><Allignement>0x20</Allignement><Bank name="Bank 1"><Field><Parameters address="0x08000000" name="sector0" occurence="0x1" size="0x200000"/></Field></Bank></Configuration></Peripheral>

Step 4:编译下载,可以看到,实际代码已经可以下载进去了,但软件却没有正常运行,这是因为项目工程代码中跳转到了外部FLASH,中断向量表映射到了0x90000000UL位置而不是内部的0x8000000UL位置,所以我们屏蔽掉跳转即可,代码如下,屏蔽或者删除main.c中的以下代码块即可;

      -------------------------------------------------------------------STM32CubeProgrammer v2.7.0-RC1                  -------------------------------------------------------------------
Warning: The external loader file does not exist:
mode=normal
ST-LINK SN  : 066CFF554957886687083011
ST-LINK FW  : V2J37M26
Board       : --
Voltage     : 3.29V
SWD freq    : 4000 KHz
Connect mode: Normal
Reset mode  : Software reset
Device ID   : 0x450
Revision ID : Rev V
Device name : STM32H7xx
Flash size  : 128 KBytes
Device type : MCU
Device CPU  : Cortex-M7
Memory Programming ...
Opening and parsing file: rtthread.elfFile          : rtthread.elfSize          : 488772 BytesAddress       : 0x08000000
Erasing memory corresponding to segment 0:
Download in Progress:
Progress: 100%
File download complete
Time elapsed during download operation: 00:00:08.946
//#include "stm32h7xx.h"
//static int vtor_config(void)
//{
//    /* Vector Table Relocation in Internal QSPI_FLASH */
//    SCB->VTOR = QSPI_BASE;
//    return 0;
//}
//INIT_BOARD_EXPORT(vtor_config);

Step 5:编译下载,实际代码已经可以下载进去了,软件也正常运行了。

【ART-PI】使用STM32H750的隐藏2MB ROM相关推荐

  1. 隐藏马尔科夫模型HMM

    概率图模型 HMM 先从一个具体的例子入手,看看我们要解决的实际问题.例子引自wiki.https://en.wikipedia.org/wiki/Hidden_Markov_model Consid ...

  2. 香蕉派 Banana pi BPI-M1+ 双核开源单板计算机. 板载WIFI

     Banana PI BPI-M1+是一款高性能双核开源硬件单板计算机,Banana PI BPI-M1+是一款比树莓派更强悍的双核Android4.4与Linux产品. Banana PI BP ...

  3. android 4.4 art模式,安卓4.4的ART模式怎么打开 安卓4.4开启art模式方法图解

    ART模式是Android系统新增的一个新的底层运行模式,目前仅有Android 4.4系统才拥有ART模式,与传统的安卓Dalvik模式有很大的区别.通过在ART模式运行程序应用,可以达到省电.节约 ...

  4. Android ART详细介绍及配置参数详解

    配置 ART 本文介绍了如何配置 ART 及其编译选项.讨论的主题包括:系统映像预编译配置.dex2oat 编译选项,以及如何在 system 分区空间.data 分区空间和性能这三者之间取得平衡. ...

  5. Dalvik ART

    Android 4.4 到 Android 5.0有一个很大的变化,就是从Dalvik 到 ART,以下是根据我的理解做的总结. 有不对的地方,欢迎指正. 虚拟机 Dalvik  Dalvik VM ...

  6. android作用是什么意思,安卓ART模式是什么意思 ART模式有什么作用及功能

    ART模式相信大家都比较陌生,不过ART模式越来越多的被媒体提及,很多网友对于ART模式是什么以及有什么用确认详细的了解.以下脚本之家为大家详细汇总了ART模式相关知识汇总,通过本文,您可以全面了解A ...

  7. ART与Dalvik哪个好 ART模式和Dalvik模式区别对比

    最新的安卓4.4系统中引入了全新的ART模式 对比项目 CPU RAM内存 ROM内存 流畅度 省电 APP加载速度 兼容性 ART模式  -- 小 大 更佳 更佳 慢 有待优化 Dalvik模式   ...

  8. android 4.4 art模式,从未如此流畅 Android 4.4 ART模式体验

    Android 4.4系统最大的亮点莫过于针对RAM的占用进行了深度的优化,以至于谷歌官方宣称运行内存仅有512MB的老款手机,同样可以流畅运行Android 4.4系统,这说明谷歌已经对该系统有了充 ...

  9. android odex版本调试_android 基础-Dalvik ,ART,JIT,AOT,Dex,Odex

    Dalvik 和 ART Dalvik:Dalvik 虚拟机,android 5.0 以前所使用的虚拟机,可执行文件为 dex 格式,基于寄存器的虚拟机(jvm 基于堆栈).通过 dx 工具将 .cl ...

最新文章

  1. 【DND图形库】四、文本绘制和按键检测
  2. 锁相放大器sr830_各位谁会用Stanford SR830啊,我都快被这个锁相放大器折腾死了!!!!-北京搜狐焦点...
  3. asp 使用TreeView控件
  4. CString类(转)
  5. VR全景可视化制作小程序功能模块源码v1.0.28
  6. 服务器2003系统黑屏怎么办,windows-server-2003 – Windows Server 2003 – 黑屏,光标在启动时...
  7. [设想]增加比较的多元运算符
  8. 如何在 Mac 上控制对摄像头的访问?
  9. 19.docker attach
  10. 分享几十年来记录下的编程技巧
  11. java ftp 上传失败,java ftp上传时,代码不报错,也上传不过去文件
  12. Win10系统去掉桌面图标小箭头导致打开管理和任务栏处图标报错,且右键开始菜单无反应
  13. P9813驱动RGB灯珠
  14. 不义联盟网站无法连接服务器,不义联盟2总是显示无法连接网络
  15. 杀戮空间2服务器协议,杀戮空间2服务器设置
  16. openwrt屏蔽广告不生效
  17. 【AWS+Drupal应用案例】如何让一个千万级流量网站从一直挂机到起死回生?
  18. 陈 好 性 感 写 真 ,难得一见哦[贴图]
  19. apache基于端口的虚拟主机配置
  20. 如何报p20手机数据导入计算机,华为P20系列手机与电脑共享内容传输文件的方法...

热门文章

  1. mysql修改EST时区,mysql时间修改
  2. 43-为什么要训练数据集与测试数据集
  3. 高一学生计算机知识现状分析,浅析我校高中信息技术教学现状
  4. 沈阳计算机好的专科学校,我初中没毕业,想在沈阳找家计算机学校,哪家最好?...
  5. 什么是懒惰的苏珊(Lazy Susan)
  6. 结构体是纸老虎,旧知识新用法,easy
  7. 《统计学习方法》学习笔记 第二十一章 PageRank算法
  8. 企业级数据中台的建设方法、架构和技术栈
  9. 厉害了,用Python破个世界纪录!
  10. form表单之input标签