美文网首页蓝牙BLE
DA14580 学习笔记 - 内存分布

DA14580 学习笔记 - 内存分布

作者: 寂陌的季节 | 来源:发表于2016-11-04 09:55 被阅读1571次

资料基于目前Dialog官方最新的 DA1458x_SDK_5.0.4
下载地址:https://support.dialog-semiconductor.com/connectivity/product/da14580


da14580内部存储空间

da14580内部存储空间有:

  • 84 kB ROM.
    包含Boot ROM code BLE协议栈相关代码.
  • 32 kB OTP.
    芯片上电时Boot ROM内的代码会检查OTP内是否烧录有代码,如果有烧录则会将OTP的内容mirror到system RAM,然后从system RAM开始执行。
  • 128 kB Flash (DA14583 only).
  • 42 kB System SRAM.
  • 8 kB Retention SRAM.

da14580存储空间的地址映射

这几种不同的存储介质对应到不同的逻辑地址空间,在
***GP_CONTROL_REG[EM_MAPPING] ***寄存器中可以设置不同的方案。而官方SDK中选择了case23作为基本的映射方案。
参考: sdk\platform\arch\boot\rvds\system_ARMCM0.c:

SetBits32(GP_CONTROL_REG, EM_MAP, 23);

case23的地址空间示意图如下:


memory map case 23memory map case 23

其中, 0x80000 到 0x81FFF 为retention RAM,可以在deep sleep模式下维持数据,而deep sleep下除此之外的模块都会被关闭以降低功耗。
0x20000000 到 0x200097FF 为system RAM,可以作为用户程序空间,但注意某些地方是系统预留的:

  • Vector table, placed at 0x20000000.
  • Jump table, placed at 0x20000160.
  • Timeout table, placed at 0x200002C0.
  • NVDS storage, placed at 0x20000340.
  • ROM code data, placed at 0x20009000.

另外补充一点,资料中似乎没有说明ROM code的运行时地址,不过通过SDK中的符号定义文件rom_symdef.txt可以看出是在0x0到0x00080000之间。

系统层面的内存空间分布

下面是一张high level的memory mapping示意图:


high level memory mappinghigh level memory mapping

几点说明:

  • 当系统支持的并发连接数大于4时,BLE exchange table所需空间会超过0x254,需要将其中的一部分移动至0x00080768,相应的各heap会往后挤压最终使得留给用户程序使用的retaintion RAM变小。
  • 增大并发连接数导致各heap向后挤压,如果使得用户程序需要的retaintion RAM大小不够,可以将BLE descriptor移出retaintion RAM区域。这时系统从deep sleep唤醒时需要重新初始化BLE descriptor。
  • system RAM区域的non-retained heap如果不够可以将0x20008000处的ZI移除,并压缩OTP mirror过来的地址空间到0x20007E00,此时non-retained heap的大小能从4096增大到4608 bytes。

总体来说,da14580内部存储空间划分的相当细致,特别是针对低功耗设计的retaintion RAM,使得芯片的功耗表现非常有优势。不过由此带来的问题就是学习成本相对于nordic,TI等厂商来说会比较高。另外由于没有内置flash,对于某些应用来说可能会有一些不方便,可以选择带flash的da14583。


相关文章

  • DA14580 学习笔记 - 内存分布

    资料基于目前Dialog官方最新的 DA1458x_SDK_5.0.4下载地址:https://support.d...

  • JavaScript学习笔记三

    JavaScript学习笔记三 个人学习笔记参考阮一峰的JavaScript教学类型转换,内存,深拷贝,关于内存的...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • Z_HPC_内存

    分布式内存 共享式内存

  • Effective Objective-C读后笔记(1)

    1、Objective-C中的内存分布 对象类型内存分布在堆里面,是直接管理内存。 指针类型分布在栈里面系统帮我们...

  • hadoop学习02

    hadoop学习笔记 - HDFS - 完全分布式模式 Hadoop完全分布式模式结构 hadoop01hadoo...

  • 内存分布

    http://www.cnblogs.com/mddblog/p/4405165.html战队全长待

  • 内存管理

    本文将介绍,内存分布、内存管理 一、内存分布 内存主要分为五大区,按照地址从高向低依次为:栈区 -> 堆区 -> ...

  • Linux和shell学习笔记

    Linux和shell学习笔记 2019年5月31日 1、载入内存(虚拟内存) 对于读写速度,内存 > 固态硬盘 ...

  • 内存优化-内存分布

     我们在排查内存的时候,往往会通过以下命令: 获取对应应用的详细内存信息,一般我们会获取到如下信息(对于不同的An...

网友评论

    本文标题:DA14580 学习笔记 - 内存分布

    本文链接:https://www.haomeiwen.com/subject/uywiuttx.html