打印
[应用相关]

AN0026—如何在程序中开启片上RAM扩展功能

[复制链接]
2534|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ArterySW 于 2022-1-5 20:18 编辑

AN0026—如何在程序中开启片上RAM扩展功能



概述
AT32 MCU某些型号片上SRAM,有提供一个特别的SRAM扩展模式,可让用户通过设定用户系统数据区的EOPB0来调整SRAM的大小。一般此扩展模式的设置都建议使用雅特力的ICP或ISP工具,在产品批量生成时跟程序的烧录一起完成,但在使用者无法使用ICP/ISP工具的情境下,也可以通过执行程序来完成。本篇指南将说明如何在程序中正确的设置EOPB0来完成SRAM的扩展。

支持型号
AT32F403xx
AT32F403Axx
AT32F407xx
AT32F413xx
AT32F435xx
AT32F437xx



目录
概述 ................................... 5
设置例程 ........................... 6
例程分析 ................. 7
函数说明 ................. 7
例程展示.......................... 9
历史版本.......................... 11


extend_sram()函数操作修改EOPB0,通过EXTEND_SRAM宏定义可将SRAM从默认的96K字节扩展到224K字节,或从224K字节改回96K字节。其中EXTEND_SRAM的定义值在工程项目配置选项中完成。须注意函数内,不可使用全局变量。修改EOPB0之后,必须执行系统复位,新的EOPB0数值才会生效并真正的设定到所选的SRAM大小,函数如下图

通过修改 startup_at32f403a_407.s 的启动汇编代码,使extend_sram函数在程序初始化之前执行,范例中的 startup_at32f403a_407_ext_ram.s就是修改后的启动文件。下面的图分别是在KEIL和IAR工程中如何修改启动代码。
需注意的两个重点:1) 必须在Reset_Handler的一开头就去做EOPB0的修改,不要在SystemInit()函数里头设置,因为用户一开始在Keil/IAR等开发环境设定的SRAM范围,就可能是以扩充后的224K字节作设定,且实际用到的SRAM可能超过了默认的96K,此时堆栈(STACK)的指针初始值会被设定到96K之后的地址,执行SystemInit( )时就会出错,甚至发生HardFault而造成死机。2) 在调用extend_sram()函数前,要将堆栈(STACK)的指针先改到 96K字节内(例程中是修改到(0x20001000),避免因STACK的指针初始值被设定到96K之后的地址,而造成extend_SRAM函数执行时发生错误。

当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ →Preprocessor Symbols 的定义框里面,编译时extend_sram()函数就会选择对应的配置。
当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ Compiler→Preprocessor的定义框里面,编译时extend_sram()函数就会选择对应的配置。

当选择set_sram_96k或者set_sram_224k时,EXTEND_SRAM的宏定义值对应设置在 C/C++ Compiler→Preprocessor的定义框里面,编译时extend_sram()函数就会选择对应的配置。
程序运行完SRAM扩展并进入main( )函数时,会检查EOPB0 的数值以确认是否有正确的去配置成所选择的SRAM大小,并且通过点亮LED4显示结果。




AN0026_Extending_SRAM_in_User's_Program_CH_V2.0.0.pdf

383.88 KB

使用特权

评论回复
评论
hqgboy 2022-1-8 14:56 回复TA
看来是用原厂的库函数操作了。烧录意法代码,有修改的例程吗? 
沙发
PeterAmy| | 2020-9-13 20:23 | 只看该作者
这个是不是意味片上的RAM实际大小比标注的大,只是出厂把他限制了,415可以扩展吗,

使用特权

评论回复
板凳
muyichuan2012|  楼主 | 2020-9-14 09:01 | 只看该作者
本帖最后由 muyichuan2012 于 2020-9-14 09:16 编辑
PeterAmy 发表于 2020-9-13 20:23
这个是不是意味片上的RAM实际大小比标注的大,只是出厂把他限制了,415可以扩展吗, ...

对于403A,datasheet上有描述为SRAM(96+128),即默认96K byte,可通过修改选择字节修改为224Kbyte。目前只有403,413和403A型号支持该功能。415不支持。

使用特权

评论回复
地板
zeshoufx| | 2020-9-14 10:19 | 只看该作者
谢谢分享【如何在程序中开启片上RAM扩展功能】

使用特权

评论回复
5
单片小菜| | 2020-9-14 18:06 | 只看该作者
如果将片上的资源都用上的话,跑一个小的操作系统,应该没有什么问题吧、

使用特权

评论回复
6
可爱的烧饼| | 2020-9-17 19:08 | 只看该作者
本篇指南将说明如何在程序中正确的设置EOPB0来完成SRAM的扩展。

使用特权

评论回复
7
muyichuan2012|  楼主 | 2020-9-17 22:03 | 只看该作者
单片小菜 发表于 2020-9-14 18:06
如果将片上的资源都用上的话,跑一个小的操作系统,应该没有什么问题吧、
...

没有问题哈  RT Thread ,FreeRTOS,ucosII/III 等都是没有问题的。

使用特权

评论回复
8
单片小菜| | 2020-9-18 08:48 | 只看该作者
那确实值得玩一下的,问一下,现在哪个操作系统比较主流一些?

使用特权

评论回复
9
muyichuan2012|  楼主 | 2020-9-18 11:19 | 只看该作者
单片小菜 发表于 2020-9-18 08:48
那确实值得玩一下的,问一下,现在哪个操作系统比较主流一些?

目前我们的客户用的最多的是FreeRTOS和RT Thread.

使用特权

评论回复
10
muyichuan2012|  楼主 | 2020-9-18 11:20 | 只看该作者
muyichuan2012 发表于 2020-9-18 11:19
目前我们的客户用的最多的是FreeRTOS和RT Thread.

FreeRTOS 在我们的BSP中有详细教程和Demo,
对于,RT Thread和RT Thread Studio IDE,RTT官方已经支持AT32。

使用特权

评论回复
11
weifeng90| | 2022-1-8 21:20 | 只看该作者
这个和内部RAM有什么区别呢?

使用特权

评论回复
12
muyichuan2012|  楼主 | 2022-1-9 10:53 | 只看该作者
扩展的就是内部SRAM

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

1900

帖子

28

粉丝