51822存储理解
本博客最后修改时间:2018年8月10日20:13:31
一、开发环境
keil版本 :keil5.12.0.0
SDK版本:12.3
IC :51822
仿真器 :J-link
二、基础知识
1.51822RAM和ROM空间有多大?
51822有不同的RAM空间的版本,可通过此链接查看[
http://infocenter.nordicsemi.com/index.jsp]
附图如下
2.如何填写IROM和IRAM Size?
我这里使用的是S130_V2.0.1版本的协议栈,通过协议栈查看如何填入【
https://www.nordicsemi.com/eng/nordic/Products/nRF51822/S130-SD-v2/53724
】
This version of the SoftDevice contains the Master Boot Record (MBR) version 1.0.3.
The combined MBR and SoftDevice memory requirements for this version are as follows:
Flash: 108 kB (0x1B000 bytes).
RAM: 4.95 kB (0x13C8 bytes) (minimum required memory – actual requirements are dependent upon the configuration
chosen at sd_ble_enable() time).
ROM的Size要根据自己编写的代码的大小来计算,如果要升级则下面详细讲解
RAM协议栈运行需要占用一些,如果自己增加的服务和特征值超过了协议栈预留的大小则需修改协议栈初始化下的属性表大小
注意4字节对齐,来修改RAM的start,然后和后面的Size对应。
三、51822存储自己的一些理解
这里讲一下自己双buf升级的理解
注意:
51822是按页对齐的,一页的大小为1024个字节
如果要使用稳定的ota这些是必不可少的
BT stack(0x00000 – 0x1B000)
buf1(需自己计算)
buf2(需自己计算)
数据存储区3page,page大小在fds中自己配置
bootloader:(0x5000,起始地址为0x3AC00)
boot setting:(0x400 一页)
这里我设置的 fds存储page的大小为512(word)-> 2048Byte
所以通过bootloader往上加得到swap的地址为0x3A400
再往上加还有两个page 1024(word)得到页结束地址为0x39400
计算到此处只剩下buf区了,注意要页对齐
我们用0x39400 – 0x1B000 = 2 * 0xF200
因为0xF200不是 0x400的整数倍,所以要补充一个页对齐(0x400)
所以补充后的地址为0x39000
然后计算出buf的大小0xF000
如下图所示
注意:
自己的代码编译后的大小不要超过此值
boot的ROM不需要修改,RAM根据自己的芯片来选
以上只是自己的理解,有什么不对的地方希望各位大牛 批评指正。